Commit c9d15fec authored by Michael Tretter's avatar Michael Tretter

glslstage: delete shader on finalize of stage

GLSLstage creates the glShader using glCreateShader, but never calls
glDeleteShader if the glShader is not used anymore. This forces the GL
library to keep the compiled shader around, because it might be used in
the future. Therefore, the glShader is leaked whenever a GLSLStage is
destroyed.

Fix the leak by deleting the glShader when finishing the GLSLStage.

Part-of: <gstreamer/gst-plugins-base!886>
parent 6af87dee
......@@ -74,12 +74,24 @@ G_DEFINE_TYPE_WITH_CODE (GstGLSLStage, gst_glsl_stage, GST_TYPE_OBJECT,
GST_DEBUG_CATEGORY_INIT (gst_glsl_stage_debug, "glslstage", 0,
"GLSL Stage"););
static void
_delete_shader (GstGLContext * context, GstGLSLStage * stage)
{
GstGLSLStagePrivate *priv = stage->priv;
if (priv->handle)
priv->vtable.DeleteShader (priv->handle);
}
static void
gst_glsl_stage_finalize (GObject * object)
{
GstGLSLStage *stage = GST_GLSL_STAGE (object);
gint i;
gst_gl_context_thread_add (stage->context,
(GstGLContextThreadFunc) _delete_shader, stage);
if (stage->context) {
gst_object_unref (stage->context);
stage->context = NULL;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment