summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mesa/vbo/vbo_context.c1
-rw-r--r--src/mesa/vbo/vbo_save.c15
2 files changed, 16 insertions, 0 deletions
diff --git a/src/mesa/vbo/vbo_context.c b/src/mesa/vbo/vbo_context.c
index 60d0b76ab6..235cee2429 100644
--- a/src/mesa/vbo/vbo_context.c
+++ b/src/mesa/vbo/vbo_context.c
@@ -246,6 +246,7 @@ void _vbo_DestroyContext( GLcontext *ctx )
}
vbo_exec_destroy(ctx);
+ vbo_save_destroy(ctx);
FREE(vbo_context(ctx));
ctx->swtnl_im = NULL;
}
diff --git a/src/mesa/vbo/vbo_save.c b/src/mesa/vbo/vbo_save.c
index 87248e10f3..8dd87141c0 100644
--- a/src/mesa/vbo/vbo_save.c
+++ b/src/mesa/vbo/vbo_save.c
@@ -69,6 +69,21 @@ void vbo_save_init( GLcontext *ctx )
void vbo_save_destroy( GLcontext *ctx )
{
+ struct vbo_context *vbo = vbo_context(ctx);
+ struct vbo_save_context *save = &vbo->save;
+ if (save->prim_store) {
+ if ( --save->prim_store->refcount == 0 ) {
+ FREE( save->prim_store );
+ save->prim_store = NULL;
+ }
+ if ( --save->vertex_store->refcount == 0 ) {
+ if (save->vertex_store->bufferobj)
+ ctx->Driver.DeleteBuffer( ctx, save->vertex_store->bufferobj );
+
+ FREE( save->vertex_store );
+ save->vertex_store = NULL;
+ }
+ }
}