Mesa (master): demos: fix multitex.c VertCoord attribute mapping

Brian Paul brianp at kemper.freedesktop.org
Fri May 22 21:02:13 UTC 2009


Module: Mesa
Branch: master
Commit: 58fadc624281b3f0bbe084e3e8af28a61036ca94
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=58fadc624281b3f0bbe084e3e8af28a61036ca94

Author: Brian Paul <brianp at vmware.com>
Date:   Fri May 22 13:00:49 2009 -0600

demos: fix multitex.c VertCoord attribute mapping

If the multitex.vert shader uses the VertCoord generic vertex attribute
instead of the pre-defined gl_Vertex attribute, we need to make sure that
VertCoord gets bound to generic vertex attribute zero.

That's because we need to call glVertexAttrib2fv(0, xy) after all the other
vertex attributes have been set since setting generic attribute 0 triggers
vertex submission.  Before, we wound up issuing the vertex attributes in
the order 0, 1, 2 which caused the first vertex to be submitted before all
the attributes were set.  Now, the attributes are set in 1, 2, 0 order.

---

 progs/glsl/multitex.c |   17 ++++++++++++++++-
 1 files changed, 16 insertions(+), 1 deletions(-)

diff --git a/progs/glsl/multitex.c b/progs/glsl/multitex.c
index b4be463..bbf58af 100644
--- a/progs/glsl/multitex.c
+++ b/progs/glsl/multitex.c
@@ -271,9 +271,24 @@ CreateProgram(const char *vertProgFile, const char *fragProgFile,
 
    InitUniforms(program, uniforms);
 
+   VertCoord_attr = glGetAttribLocation_func(program, "VertCoord");
+   if (VertCoord_attr > 0) {
+      /* We want the VertCoord attrib to have position zero so that
+       * the call to glVertexAttrib(0, xyz) triggers vertex processing.
+       * Otherwise, if TexCoord0 or TexCoord1 gets position 0 we'd have
+       * to set that attribute last (which is a PITA to manage).
+       */
+      glBindAttribLocation_func(program, 0, "VertCoord");
+      /* re-link */
+      glLinkProgram_func(program);
+      /* VertCoord_attr should be zero now */
+      VertCoord_attr = glGetAttribLocation_func(program, "VertCoord");
+      assert(VertCoord_attr == 0);
+   }
+
    TexCoord0_attr = glGetAttribLocation_func(program, "TexCoord0");
    TexCoord1_attr = glGetAttribLocation_func(program, "TexCoord1");
-   VertCoord_attr = glGetAttribLocation_func(program, "VertCoord");
+
    printf("TexCoord0_attr = %d\n", TexCoord0_attr);
    printf("TexCoord1_attr = %d\n", TexCoord1_attr);
    printf("VertCoord_attr = %d\n", VertCoord_attr);




More information about the mesa-commit mailing list