mesa: added gl_array_object::Weight array field
authorBrian Paul <brianp@vmware.com>
Thu, 21 May 2009 16:15:18 +0000 (10:15 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 21 May 2009 22:10:45 +0000 (16:10 -0600)
We don't really implement vertex weights but in the VBO code this
fixes and odd case for the legacy_array[] setup.  Before, the
vbo->draw_prims() call was always indicating that the vertex weight
array was present/enabled when it really wasn't.

src/mesa/main/arrayobj.c
src/mesa/main/mtypes.h
src/mesa/vbo/vbo_exec_array.c

index 8973c3cb37d43d971cd0eddd9e0af349167cd8c5..f9b11ee244aff471c782178f1d1ee8e1de1db56d 100644 (file)
@@ -81,6 +81,7 @@ unbind_array_object_vbos(GLcontext *ctx, struct gl_array_object *obj)
    GLuint i;
 
    _mesa_reference_buffer_object(ctx, &obj->Vertex.BufferObj, NULL);
+   _mesa_reference_buffer_object(ctx, &obj->Weight.BufferObj, NULL);
    _mesa_reference_buffer_object(ctx, &obj->Normal.BufferObj, NULL);
    _mesa_reference_buffer_object(ctx, &obj->Color.BufferObj, NULL);
    _mesa_reference_buffer_object(ctx, &obj->SecondaryColor.BufferObj, NULL);
@@ -223,6 +224,7 @@ _mesa_initialize_array_object( GLcontext *ctx,
 
    /* Init the individual arrays */
    init_array(ctx, &obj->Vertex, 4, GL_FLOAT);
+   init_array(ctx, &obj->Weight, 1, GL_FLOAT);
    init_array(ctx, &obj->Normal, 3, GL_FLOAT);
    init_array(ctx, &obj->Color, 4, GL_FLOAT);
    init_array(ctx, &obj->SecondaryColor, 4, GL_FLOAT);
@@ -326,6 +328,7 @@ _mesa_update_array_object_max_element(GLcontext *ctx,
    GLuint i, min = ~0;
 
    min = update_min(min, &arrayObj->Vertex);
+   min = update_min(min, &arrayObj->Weight);
    min = update_min(min, &arrayObj->Normal);
    min = update_min(min, &arrayObj->Color);
    min = update_min(min, &arrayObj->SecondaryColor);
index 2708678e64c38ea3e848647c6b71ddc920f95fae..55bfa2bf41102b70de838574c33dbff476e96499 100644 (file)
@@ -1563,6 +1563,7 @@ struct gl_array_object
    /** Conventional vertex arrays */
    /*@{*/
    struct gl_client_array Vertex;
+   struct gl_client_array Weight;
    struct gl_client_array Normal;
    struct gl_client_array Color;
    struct gl_client_array SecondaryColor;
index a4c67c1de155204b03da0ecb75c125623fd2e1fd..c33d557e9263e6ea43f44c4bdfdbf7f720f5c9c0 100644 (file)
@@ -103,7 +103,7 @@ static void bind_array_obj( GLcontext *ctx )
     * go away.
     */
    exec->array.legacy_array[VERT_ATTRIB_POS] = &arrayObj->Vertex;
-   exec->array.legacy_array[VERT_ATTRIB_WEIGHT] = &vbo->legacy_currval[VERT_ATTRIB_WEIGHT];
+   exec->array.legacy_array[VERT_ATTRIB_WEIGHT] = &arrayObj->Weight;
    exec->array.legacy_array[VERT_ATTRIB_NORMAL] = &arrayObj->Normal;
    exec->array.legacy_array[VERT_ATTRIB_COLOR0] = &arrayObj->Color;
    exec->array.legacy_array[VERT_ATTRIB_COLOR1] = &arrayObj->SecondaryColor;