fix an attr/src mix-up when setting-up/binding vertex arrays
authorBrian Paul <brian.paul@tungstengraphics.com>
Fri, 16 May 2008 21:34:22 +0000 (15:34 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Fri, 16 May 2008 21:34:22 +0000 (15:34 -0600)
This fixes problems with incorrect material coefficients when glMaterial
is called per-vertex.

src/mesa/vbo/vbo_exec_draw.c
src/mesa/vbo/vbo_save_draw.c

index 23a3658..6bb6849 100644 (file)
@@ -198,7 +198,7 @@ static void vbo_exec_bind_arrays( GLcontext *ctx )
         arrays[attr].BufferObj = exec->vtx.bufferobj;
         arrays[attr]._MaxElement = count; /* ??? */
 
-        data += exec->vtx.attrsz[attr] * sizeof(GLfloat);
+        data += exec->vtx.attrsz[src] * sizeof(GLfloat);
       }
    }
 }
index 3c6f0fc..bf5c6d4 100644 (file)
@@ -131,10 +131,12 @@ static void vbo_bind_vertex_list( GLcontext *ctx,
       break;
    }
 
-   for (attr = 0; attr < VBO_ATTRIB_MAX; attr++) {
-      if (node->attrsz[attr]) {
+   for (attr = 0; attr < VERT_ATTRIB_MAX; attr++) {
+      GLuint src = map[attr];
+
+      if (node->attrsz[src]) {
         arrays[attr].Ptr = (const GLubyte *)data;
-        arrays[attr].Size = node->attrsz[attr];
+        arrays[attr].Size = node->attrsz[src];
         arrays[attr].StrideB = node->vertex_size * sizeof(GLfloat);
         arrays[attr].Stride = node->vertex_size * sizeof(GLfloat);
         arrays[attr].Type = GL_FLOAT;
@@ -144,7 +146,7 @@ static void vbo_bind_vertex_list( GLcontext *ctx,
         
         assert(arrays[attr].BufferObj->Name);
 
-        data += node->attrsz[attr] * sizeof(GLfloat);
+        data += node->attrsz[src] * sizeof(GLfloat);
       }
    }
 }