From cb8ed93dd0faf958493d35a4729c4a00a201af8d Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Sun, 3 Jun 2012 22:34:32 -0700 Subject: [PATCH] mesa: Unbind ARB_copy_buffer and transform feedback buffers on delete. According to the GL 3.1 spec, section 2.9 ("Buffer Objects"): "If a buffer object is deleted while it is bound, all bindings to that object in the current context (i.e. in the thread that called DeleteBuffers) are reset to zero." The code already checked for a number of cases, but neglected these newer binding points. +21 oglconforms. NOTE: This is a candidate for stable release branches. Signed-off-by: Kenneth Graunke Reviewed-by: Brian Paul --- src/mesa/main/bufferobj.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index ae7bac14dbd..fe7db2a678b 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -821,6 +821,19 @@ _mesa_DeleteBuffersARB(GLsizei n, const GLuint *ids) _mesa_BindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 ); } + /* unbind ARB_copy_buffer binding points */ + if (ctx->CopyReadBuffer == bufObj) { + _mesa_BindBufferARB( GL_COPY_READ_BUFFER, 0 ); + } + if (ctx->CopyWriteBuffer == bufObj) { + _mesa_BindBufferARB( GL_COPY_WRITE_BUFFER, 0 ); + } + + /* unbind transform feedback binding point */ + if (ctx->TransformFeedback.CurrentBuffer == bufObj) { + _mesa_BindBufferARB( GL_TRANSFORM_FEEDBACK_BUFFER, 0 ); + } + /* unbind any pixel pack/unpack pointers bound to this buffer */ if (ctx->Pack.BufferObj == bufObj) { _mesa_BindBufferARB( GL_PIXEL_PACK_BUFFER_EXT, 0 ); -- 2.30.2