Demos (master): util: add GL_FLOAT_MAT4 support, more sampler types

Brian Paul brianp at kemper.freedesktop.org
Wed May 9 14:09:52 UTC 2012


Module: Demos
Branch: master
Commit: 1e01b1ec23f68b93d1dbeb0035c5387ea3506912
URL:    http://cgit.freedesktop.org/mesa/demos/commit/?id=1e01b1ec23f68b93d1dbeb0035c5387ea3506912

Author: Brian Paul <brianp at vmware.com>
Date:   Wed May  9 08:08:56 2012 -0600

util: add GL_FLOAT_MAT4 support, more sampler types

---

 src/util/shaderutil.c |   13 +++++++++++++
 src/util/shaderutil.h |    4 ++--
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/src/util/shaderutil.c b/src/util/shaderutil.c
index 7ac8160..0fa300b 100644
--- a/src/util/shaderutil.c
+++ b/src/util/shaderutil.c
@@ -38,6 +38,7 @@ PFNGLUNIFORM1FVPROC Uniform1fv = NULL;
 PFNGLUNIFORM2FVPROC Uniform2fv = NULL;
 PFNGLUNIFORM3FVPROC Uniform3fv = NULL;
 PFNGLUNIFORM4FVPROC Uniform4fv = NULL;
+PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv = NULL;
 PFNGLGETACTIVEATTRIBPROC GetActiveAttrib = NULL;
 PFNGLGETATTRIBLOCATIONPROC GetAttribLocation = NULL;
 
@@ -70,6 +71,7 @@ ShadersSupported(void)
       Uniform2fv = glUniform2fv;
       Uniform3fv = glUniform3fv;
       Uniform4fv = glUniform4fv;
+      UniformMatrix4fv = glUniformMatrix4fv;
       GetActiveAttrib = glGetActiveAttrib;
       GetAttribLocation = glGetAttribLocation;
       return GL_TRUE;
@@ -95,6 +97,7 @@ ShadersSupported(void)
       Uniform2fv = glUniform2fvARB;
       Uniform3fv = glUniform3fvARB;
       Uniform4fv = glUniform4fvARB;
+      UniformMatrix4fv = glUniformMatrix4fvARB;
       GetActiveAttrib = glGetActiveAttribARB;
       GetAttribLocation = glGetAttribLocationARB;
       return GL_TRUE;
@@ -267,6 +270,12 @@ SetUniformValues(GLuint program, struct uniform_info uniforms[])
       case GL_SAMPLER_3D:
       case GL_SAMPLER_CUBE:
       case GL_SAMPLER_2D_RECT_ARB:
+      case GL_SAMPLER_1D_SHADOW:
+      case GL_SAMPLER_2D_SHADOW:
+      case GL_SAMPLER_1D_ARRAY:
+      case GL_SAMPLER_2D_ARRAY:
+      case GL_SAMPLER_1D_ARRAY_SHADOW:
+      case GL_SAMPLER_2D_ARRAY_SHADOW:
          assert(uniforms[i].value[0] >= 0.0F);
          Uniform1i(uniforms[i].location,
                      (GLint) uniforms[i].value[0]);
@@ -283,6 +292,10 @@ SetUniformValues(GLuint program, struct uniform_info uniforms[])
       case GL_FLOAT_VEC4:
          Uniform4fv(uniforms[i].location, 1, uniforms[i].value);
          break;
+      case GL_FLOAT_MAT4:
+         UniformMatrix4fv(uniforms[i].location, 1, GL_FALSE,
+                          uniforms[i].value);
+         break;
       default:
          if (strncmp(uniforms[i].name, "gl_", 3) == 0) {
             /* built-in uniform: ignore */
diff --git a/src/util/shaderutil.h b/src/util/shaderutil.h
index 08b2f28..7af6a31 100644
--- a/src/util/shaderutil.h
+++ b/src/util/shaderutil.h
@@ -7,8 +7,8 @@ struct uniform_info
 {
    const char *name;
    GLuint size;  /**< number of value[] elements: 1, 2, 3 or 4 */
-   GLenum type;  /**< GL_FLOAT, GL_FLOAT_VEC4, GL_INT, etc */
-   GLfloat value[4];
+   GLenum type;  /**< GL_FLOAT, GL_FLOAT_VEC4, GL_INT, GL_FLOAT_MAT4, etc */
+   GLfloat value[16];
    GLint location;  /**< filled in by InitUniforms() */
 };
 




More information about the mesa-commit mailing list