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

Reply via email to