mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-01-31 11:32:38 +00:00
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: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-base/-/merge_requests/886>
This commit is contained in:
parent
6af87dee17
commit
c9d15fec7e
1 changed files with 12 additions and 0 deletions
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue