summaryrefslogtreecommitdiff
path: root/ext/gtk
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2015-07-17 15:08:53 -0400
committerNicolas Dufresne <nicolas.dufresne@collabora.com>2015-07-17 15:41:09 -0400
commit5e87b9f9af14aa2f973db7cede212834e66c3464 (patch)
tree907d43989f7ab82cd93b9f6794a0010107e14a09 /ext/gtk
parent410ffd5c62771831b3d48e1ea0b7b97ad09715a3 (diff)
downloadgstreamer-plugins-bad-5e87b9f9af14aa2f973db7cede212834e66c3464.tar.gz
gtkglsink: Don't leak vertex array and buffers
This is now possible since reset is always called from the main thread. https://bugzilla.gnome.org/show_bug.cgi?id=752441
Diffstat (limited to 'ext/gtk')
-rw-r--r--ext/gtk/gtkgstglwidget.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/ext/gtk/gtkgstglwidget.c b/ext/gtk/gtkgstglwidget.c
index b72198478..ba01e604e 100644
--- a/ext/gtk/gtkgstglwidget.c
+++ b/ext/gtk/gtkgstglwidget.c
@@ -360,6 +360,26 @@ _reset (GtkGstBaseWidget * base_widget)
!base_widget->ignore_alpha);
}
+/* called from main thread */
+static void
+gtk_gst_gl_widget_reset (GtkGstBaseWidget * base_widget)
+{
+ GtkGstGLWidgetPrivate *priv = GTK_GST_GL_WIDGET (base_widget)->priv;
+ const GstGLFuncs *gl = priv->other_context->gl_vtable;
+
+ _reset (base_widget);
+
+ if (priv->vao) {
+ gl->DeleteVertexArrays (1, &priv->vao);
+ priv->vao = 0;
+ }
+
+ if (priv->vertex_buffer) {
+ gl->DeleteBuffers (1, &priv->vertex_buffer);
+ priv->vertex_buffer = 0;
+ }
+}
+
static void
gtk_gst_gl_widget_finalize (GObject * object)
{
@@ -393,7 +413,7 @@ gtk_gst_gl_widget_class_init (GtkGstGLWidgetClass * klass)
gobject_klass->finalize = gtk_gst_gl_widget_finalize;
gl_widget_klass->render = gtk_gst_gl_widget_render;
- base_widget_klass->reset = _reset;
+ base_widget_klass->reset = gtk_gst_gl_widget_reset;
}
static void