This would make ElementArrayBufferObj data per vertex array object. I did't find something to support this at the spec page[0]. But I did find something that somehow support this at opengl wiki page[1].
NOTE: with my test, both NV and ATI's closed source opengl implementation would attach the Elelemnt array buffer to vao. This would fix most of(3 left) intel oglc vao test fail [0]: http://www.opengl.org/registry/specs/ARB/vertex_array_object.txt [1]: http://www.opengl.org/wiki/Vertex_Array_Object Cc: i...@freedesktop.org Signed-off-by: Yuanhan Liu <yuanhan....@linux.intel.com> --- src/mesa/main/arrayobj.c | 2 ++ src/mesa/main/bufferobj.c | 4 ++++ src/mesa/main/mtypes.h | 2 ++ 3 files changed, 8 insertions(+), 0 deletions(-) diff --git a/src/mesa/main/arrayobj.c b/src/mesa/main/arrayobj.c index 1283940..765a7d5 100644 --- a/src/mesa/main/arrayobj.c +++ b/src/mesa/main/arrayobj.c @@ -382,6 +382,8 @@ bind_vertex_array(struct gl_context *ctx, GLuint id, GLboolean genRequired) ctx->NewState |= _NEW_ARRAY; ctx->Array.NewState |= _NEW_ARRAY_ALL; _mesa_reference_array_object(ctx, &ctx->Array.ArrayObj, newObj); + if (newObj->ElementArrayBufferObj) + _mesa_reference_buffer_object(ctx, &ctx->Array.ElementArrayBufferObj, newObj->ElementArrayBufferObj); /* Pass BindVertexArray call to device driver */ if (ctx->Driver.BindArrayObject && newObj) diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 4c77397..d96dc5f 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -603,6 +603,10 @@ bind_buffer_object(struct gl_context *ctx, GLenum target, GLuint buffer) /* bind new buffer */ _mesa_reference_buffer_object(ctx, bindTarget, newBufObj); + if (target == GL_ELEMENT_ARRAY_BUFFER) { + _mesa_reference_buffer_object(ctx, &ctx->Array.ArrayObj->ElementArrayBufferObj, newBufObj); + } + /* Pass BindBuffer call to device driver */ if (ctx->Driver.BindBuffer) ctx->Driver.BindBuffer( ctx, target, newBufObj ); diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index b3427da..5cd1084 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1620,6 +1620,8 @@ struct gl_array_object * we can determine the max legal (in bounds) glDrawElements array index. */ GLuint _MaxElement; + + struct gl_buffer_object *ElementArrayBufferObj; }; -- 1.7.4.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev