[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