cairo-gl: Don't leak framebuffers
authorBenjamin Otte <otte@redhat.com>
Tue, 5 Oct 2021 23:23:02 +0000 (01:23 +0200)
committerBenjamin Otte <otte@redhat.com>
Wed, 6 Oct 2021 01:44:36 +0000 (03:44 +0200)
The framebufffer was cached, but never deleted. And because this
function is deprecated and nobody should ever use it: Don't bother with
caching now.

gdk/gdkgl.c

index c6a73a7071e66fcc5092774522aaa8fb6d322cb2..f5052f5ca0a0e0a7282c215b2794abc341b25c44 100644 (file)
@@ -355,10 +355,8 @@ gdk_cairo_draw_from_gl (cairo_t              *cr,
   es_use_bgra = gdk_gl_context_use_es_bgra (paint_context);
 
   gdk_gl_context_make_current (paint_context);
-  paint_data = gdk_gl_context_get_paint_data (paint_context);
 
-  if (paint_data->tmp_framebuffer == 0)
-    glGenFramebuffers (1, &paint_data->tmp_framebuffer);
+  glGenFramebuffers (1, &framebuffer);
 
   if (source_type == GL_RENDERBUFFER)
     {
@@ -397,7 +395,6 @@ gdk_cairo_draw_from_gl (cairo_t              *cr,
 
   cairo_surface_set_device_scale (image, buffer_scale, buffer_scale);
 
-  framebuffer = paint_data->tmp_framebuffer;
   glBindFramebuffer (GL_FRAMEBUFFER, framebuffer);
 
   if (source_type == GL_RENDERBUFFER)
@@ -428,6 +425,8 @@ gdk_cairo_draw_from_gl (cairo_t              *cr,
 
   glBindFramebuffer (GL_FRAMEBUFFER, 0);
 
+  glDeleteFramebuffers (1, &framebuffer);
+
   cairo_surface_mark_dirty (image);
 
   cairo_set_source_surface (cr, image, 0, 0);