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

Brian Paul brianp at kemper.freedesktop.org
Fri May 22 19:21:03 UTC 2009


Module: Mesa
Branch: mesa_7_4_branch
Commit: 506d3403633b1ec1e2e961883ae3497a9b1496bb
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=506d3403633b1ec1e2e961883ae3497a9b1496bb

Author: Brian Paul <brianp at vmware.com>
Date:   Fri May 22 13:20:48 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.

(cherry picked from commit 58fadc624281b3f0bbe084e3e8af28a61036ca94)

---

 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