diff options
author | Brian <[email protected]> | 2007-08-13 17:37:30 +0100 |
---|---|---|
committer | Brian <[email protected]> | 2007-08-13 17:39:29 +0100 |
commit | 393a6255381f019586bd9acc49fbf2fd431e534e (patch) | |
tree | 2853c7a146031efd17c0e2364ab52ff4be24c66e /src/mesa/main/context.c | |
parent | b7a9222dc7492181588cedd62b94482fab8e9c95 (diff) |
free any render/framebuffers left in hash tables when freeing shared state
Diffstat (limited to 'src/mesa/main/context.c')
-rw-r--r-- | src/mesa/main/context.c | 23 |
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 |