diff options
author | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2015-07-17 15:08:53 -0400 |
---|---|---|
committer | Nicolas Dufresne <nicolas.dufresne@collabora.com> | 2015-07-17 15:41:09 -0400 |
commit | 5e87b9f9af14aa2f973db7cede212834e66c3464 (patch) | |
tree | 907d43989f7ab82cd93b9f6794a0010107e14a09 /ext/gtk | |
parent | 410ffd5c62771831b3d48e1ea0b7b97ad09715a3 (diff) | |
download | gstreamer-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.c | 22 |
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 |