diff options
author | Brian Paul <brian.paul@tungstengraphics.com> | 2004-09-27 16:19:17 +0000 |
---|---|---|
committer | Brian Paul <brian.paul@tungstengraphics.com> | 2004-09-27 16:19:17 +0000 |
commit | 293ad985103ceab90c126236af2f75617fce6b2b (patch) | |
tree | d6093d3b648c2f0e8914c22de848384303641c8e /src/mesa | |
parent | e60c9311daeba49fcc221da82c29b35558ffc6ab (diff) |
VBO RefCount fix (David Reveman)
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/main/bufferobj.c | 9 | ||||
-rw-r--r-- | src/mesa/main/varray.c | 1 |
2 files changed, 10 insertions, 0 deletions
diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 84af8158ad..0d0e5f4bcf 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -539,41 +539,50 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids) if (ctx->Array.Vertex.BufferObj == bufObj) { bufObj->RefCount--; ctx->Array.Vertex.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; } if (ctx->Array.Normal.BufferObj == bufObj) { bufObj->RefCount--; ctx->Array.Normal.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; } if (ctx->Array.Color.BufferObj == bufObj) { bufObj->RefCount--; ctx->Array.Color.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; } if (ctx->Array.SecondaryColor.BufferObj == bufObj) { bufObj->RefCount--; ctx->Array.SecondaryColor.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; } if (ctx->Array.FogCoord.BufferObj == bufObj) { bufObj->RefCount--; ctx->Array.FogCoord.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; } if (ctx->Array.Index.BufferObj == bufObj) { bufObj->RefCount--; ctx->Array.Index.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; } if (ctx->Array.EdgeFlag.BufferObj == bufObj) { bufObj->RefCount--; ctx->Array.EdgeFlag.BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; } for (j = 0; j < MAX_TEXTURE_UNITS; j++) { if (ctx->Array.TexCoord[j].BufferObj == bufObj) { bufObj->RefCount--; ctx->Array.TexCoord[j].BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; } } for (j = 0; j < VERT_ATTRIB_MAX; j++) { if (ctx->Array.VertexAttrib[j].BufferObj == bufObj) { bufObj->RefCount--; ctx->Array.VertexAttrib[j].BufferObj = ctx->Array.NullBufferObj; + ctx->Array.NullBufferObj->RefCount++; } } diff --git a/src/mesa/main/varray.c b/src/mesa/main/varray.c index 04d0a07e28..404302873b 100644 --- a/src/mesa/main/varray.c +++ b/src/mesa/main/varray.c @@ -60,6 +60,7 @@ update_array(GLcontext *ctx, struct gl_client_array *array, #if FEATURE_ARB_vertex_buffer_object array->BufferObj->RefCount--; if (array->BufferObj->RefCount <= 0) { + ASSERT(array->BufferObj->Name); _mesa_remove_buffer_object( ctx, array->BufferObj ); (*ctx->Driver.DeleteBuffer)( ctx, array->BufferObj ); } |