Module: Demos Branch: master Commit: d7004ec9ae0366a3a47a232a4362f20b9ad5247d URL: http://cgit.freedesktop.org/mesa/demos/commit/?id=d7004ec9ae0366a3a47a232a4362f20b9ad5247d
Author: RALOVICH, Kristóf <tad...@freemail.hu> Date: Wed Jun 12 11:32:15 2013 +0200 util: generalize linking geometry shaders, allow cxx inclusion Reviewed-by: Brian Paul <bri...@vmware.com> --- src/util/shaderutil.c | 43 +++++++++++++++++++++++++++++++++++++++++++ src/util/shaderutil.h | 12 ++++++++++++ 2 files changed, 55 insertions(+), 0 deletions(-) diff --git a/src/util/shaderutil.c b/src/util/shaderutil.c index 0fa300b..954f949 100644 --- a/src/util/shaderutil.c +++ b/src/util/shaderutil.c @@ -221,6 +221,49 @@ LinkShaders3(GLuint vertShader, GLuint geomShader, GLuint fragShader) } +GLuint +LinkShaders3WithGeometryInfo(GLuint vertShader, GLuint geomShader, GLuint fragShader, + GLint verticesOut, GLenum inputType, GLenum outputType) +{ + GLuint program = CreateProgram(); + GLdouble t0, t1; + + assert(vertShader || fragShader); + + if (vertShader) + AttachShader(program, vertShader); + if (geomShader) { + AttachShader(program, geomShader); + glProgramParameteriARB(program, GL_GEOMETRY_VERTICES_OUT_ARB, verticesOut); + glProgramParameteriARB(program, GL_GEOMETRY_INPUT_TYPE_ARB, inputType); + glProgramParameteriARB(program, GL_GEOMETRY_OUTPUT_TYPE_ARB, outputType); + } + if (fragShader) + AttachShader(program, fragShader); + + t0 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + LinkProgram(program); + t1 = glutGet(GLUT_ELAPSED_TIME) * 0.001; + + LinkTime = t1 - t0; + + /* check link */ + { + GLint stat; + GetProgramiv(program, GL_LINK_STATUS, &stat); + if (!stat) { + GLchar log[1000]; + GLsizei len; + GetProgramInfoLog(program, 1000, &len, log); + fprintf(stderr, "Shader link error:\n%s\n", log); + return 0; + } + } + + return program; +} + + GLboolean ValidateShaderProgram(GLuint program) { diff --git a/src/util/shaderutil.h b/src/util/shaderutil.h index 7af6a31..300a35b 100644 --- a/src/util/shaderutil.h +++ b/src/util/shaderutil.h @@ -2,6 +2,10 @@ #define SHADER_UTIL_H +#ifdef __cplusplus +extern "C" { +#endif + struct uniform_info { @@ -39,6 +43,10 @@ LinkShaders(GLuint vertShader, GLuint fragShader); extern GLuint LinkShaders3(GLuint vertShader, GLuint geomShader, GLuint fragShader); +extern GLuint +LinkShaders3WithGeometryInfo(GLuint vertShader, GLuint geomShader, GLuint fragShader, + GLint verticesOut, GLenum inputType, GLenum outputType); + extern GLboolean ValidateShaderProgram(GLuint program); @@ -86,4 +94,8 @@ extern PFNGLUNIFORM4FVPROC Uniform4fv; extern PFNGLGETACTIVEATTRIBPROC GetActiveAttrib; extern PFNGLGETATTRIBLOCATIONPROC GetAttribLocation; +#ifdef __cplusplus +} +#endif + #endif /* SHADER_UTIL_H */ _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-commit