Actually free buffer objects
authorOwen W. Taylor <otaylor@fishsoup.net>
Mon, 15 Nov 2010 03:59:24 +0000 (22:59 -0500)
committerRobert Bragg <robert@linux.intel.com>
Fri, 19 Nov 2010 13:27:30 +0000 (13:27 +0000)
With the refactoring to centralize code into CoglBuffer,
_cogl_buffer_fini() was never actually implemented, so all GL
vertex and index buffer objects were leaked.

The duplicate call to glDeleteBuffers() in CoglPixelArray is
removed (it wasn't paying attention to whether the buffer had been
allocated as a PBO or not.)

http://bugzilla.clutter-project.org/show_bug.cgi?id=2423

clutter/cogl/cogl/cogl-buffer.c
clutter/cogl/cogl/cogl-pixel-array.c

index a63e171..35234d9 100644 (file)
@@ -299,8 +299,15 @@ _cogl_buffer_initialize (CoglBuffer           *buffer,
 void
 _cogl_buffer_fini (CoglBuffer *buffer)
 {
+  _COGL_GET_CONTEXT (ctx, NO_RETVAL);
+
   g_return_if_fail (!(buffer->flags & COGL_BUFFER_FLAG_MAPPED));
   g_return_if_fail (buffer->immutable_ref == 0);
+
+  if (buffer->flags & COGL_BUFFER_FLAG_BUFFER_OBJECT)
+    GE( glDeleteBuffers (1, &buffer->gl_handle) );
+  else
+    g_free (buffer->data);
 }
 
 /* OpenGL ES 1.1 and 2 have a GL_OES_mapbuffer extension that is able to map
index 3f5e10a..1ac9b08 100644 (file)
@@ -147,8 +147,6 @@ _cogl_pixel_array_free (CoglPixelArray *buffer)
   /* parent's destructor */
   _cogl_buffer_fini (COGL_BUFFER (buffer));
 
-  GE( glDeleteBuffers (1, &(COGL_BUFFER (buffer)->gl_handle)) );
-
   g_slice_free (CoglPixelArray, buffer);
 }