From 91802fdf730451aaa0246f514f6778ffaef92c50 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 4 Oct 2005 16:01:02 +0000 Subject: [PATCH] check if deleting currently bound frame/renderbuffer object --- src/mesa/main/fbobject.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 324a303..f2ab7dc 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -582,6 +582,13 @@ _mesa_DeleteRenderbuffersEXT(GLsizei n, const GLuint *renderbuffers) struct gl_renderbuffer *rb; rb = lookup_renderbuffer(ctx, renderbuffers[i]); if (rb) { + /* check if deleting currently bound renderbuffer object */ + if (rb == ctx->CurrentRenderbuffer) { + /* bind default */ + ASSERT(rb->RefCount >= 2); + _mesa_BindRenderbufferEXT(GL_RENDERBUFFER_EXT, 0); + } + /* remove from hash table immediately, to free the ID */ _mesa_HashRemove(ctx->Shared->RenderBuffers, renderbuffers[i]); @@ -896,7 +903,7 @@ _mesa_BindFramebufferEXT(GLenum target, GLuint framebuffer) } oldFb = ctx->DrawBuffer; - if (oldFb) { /* AND oldFb->Name != 0 */ + if (oldFb && oldFb->Name != 0) { oldFb->RefCount--; if (oldFb->RefCount == 0) { oldFb->Delete(oldFb); @@ -925,6 +932,14 @@ _mesa_DeleteFramebuffersEXT(GLsizei n, const GLuint *framebuffers) fb = lookup_framebuffer(ctx, framebuffers[i]); if (fb) { ASSERT(fb == &DummyFramebuffer || fb->Name == framebuffers[i]); + + /* check if deleting currently bound framebuffer object */ + if (fb == ctx->DrawBuffer) { + /* bind default */ + ASSERT(fb->RefCount >= 2); + _mesa_BindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); + } + /* remove from hash table immediately, to free the ID */ _mesa_HashRemove(ctx->Shared->FrameBuffers, framebuffers[i]); -- 2.7.4