[Mesa-dev] [PATCH] mesa: Unbind ARB_copy_buffer and transform feedback buffers on delete.

Brian Paul brianp at vmware.com
Mon Jun 4 16:37:20 CEST 2012


On 06/04/2012 12:32 AM, Kenneth Graunke wrote:
> 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<kenneth at whitecape.org>
> ---
>   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 ae7bac1..fe7db2a 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 );


Reviewed-by: Brian Paul <brianp at vmware.com>


More information about the mesa-dev mailing list