summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian <brian.paul@tungstengraphics.com>2007-08-13 17:37:30 +0100
committerBrian <brian.paul@tungstengraphics.com>2007-08-13 17:39:29 +0100
commit393a6255381f019586bd9acc49fbf2fd431e534e (patch)
tree2853c7a146031efd17c0e2364ab52ff4be24c66e
parentb7a9222dc7492181588cedd62b94482fab8e9c95 (diff)
downloadmesa-393a6255381f019586bd9acc49fbf2fd431e534e.tar.gz
free any render/framebuffers left in hash tables when freeing shared state
-rw-r--r--src/mesa/main/context.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index f360eac1e77..5fbc69693ef 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -640,6 +640,27 @@ delete_shader_cb(GLuint id, void *data, void *userData)
}
}
+/**
+ * Callback for deleting a framebuffer object. Called by _mesa_HashDeleteAll()
+ */
+static void
+delete_framebuffer_cb(GLuint id, void *data, void *userData)
+{
+ struct gl_framebuffer *fb = (struct gl_framebuffer *) data;
+ fb->Delete(fb);
+}
+
+/**
+ * Callback for deleting a renderbuffer object. Called by _mesa_HashDeleteAll()
+ */
+static void
+delete_renderbuffer_cb(GLuint id, void *data, void *userData)
+{
+ struct gl_renderbuffer *rb = (struct gl_renderbuffer *) data;
+ rb->Delete(rb);
+}
+
+
/**
* Deallocate a shared state object and all children structures.
@@ -710,7 +731,9 @@ free_shared_state( GLcontext *ctx, struct gl_shared_state *ss )
#endif
#if FEATURE_EXT_framebuffer_object
+ _mesa_HashDeleteAll(ss->FrameBuffers, delete_framebuffer_cb, ctx);
_mesa_DeleteHashTable(ss->FrameBuffers);
+ _mesa_HashDeleteAll(ss->RenderBuffers, delete_renderbuffer_cb, ctx);
_mesa_DeleteHashTable(ss->RenderBuffers);
#endif