mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-23 17:14:23 +00:00
[197/906] Shaders which are in the shaderstable are now released
This commit is contained in:
parent
e25a8f27db
commit
631a06c6ab
1 changed files with 24 additions and 5 deletions
|
@ -44,6 +44,8 @@ static void gst_gl_effects_get_property (GObject * object, guint prop_id,
|
||||||
static void gst_gl_effects_init_resources (GstGLFilter* filter);
|
static void gst_gl_effects_init_resources (GstGLFilter* filter);
|
||||||
static void gst_gl_effects_reset_resources (GstGLFilter* filter);
|
static void gst_gl_effects_reset_resources (GstGLFilter* filter);
|
||||||
|
|
||||||
|
static void gst_gl_effects_ghash_func_clean (gpointer key, gpointer value, gpointer data);
|
||||||
|
|
||||||
static gboolean gst_gl_effects_filter (GstGLFilter * filter,
|
static gboolean gst_gl_effects_filter (GstGLFilter * filter,
|
||||||
GstGLBuffer * inbuf, GstGLBuffer * outbuf);
|
GstGLBuffer * inbuf, GstGLBuffer * outbuf);
|
||||||
|
|
||||||
|
@ -283,6 +285,18 @@ gst_gl_effects_init (GstGLEffects * effects, GstGLEffectsClass * klass)
|
||||||
effects->horizontal_swap = FALSE;
|
effects->horizontal_swap = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_gl_effects_ghash_func_clean (gpointer key, gpointer value, gpointer data)
|
||||||
|
{
|
||||||
|
GstGLShader* shader = (GstGLShader*) value;
|
||||||
|
GstGLFilter* filter = (GstGLFilter*) data;
|
||||||
|
|
||||||
|
//blocking call, wait the opengl thread has destroyed the shader
|
||||||
|
gst_gl_display_del_shader (filter->display, shader);
|
||||||
|
|
||||||
|
value = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gst_gl_effects_reset_resources (GstGLFilter* filter)
|
gst_gl_effects_reset_resources (GstGLFilter* filter)
|
||||||
{
|
{
|
||||||
|
@ -290,6 +304,13 @@ gst_gl_effects_reset_resources (GstGLFilter* filter)
|
||||||
|
|
||||||
// g_message ("reset resources");
|
// g_message ("reset resources");
|
||||||
|
|
||||||
|
//release shaders in the gl thread
|
||||||
|
g_hash_table_foreach (effects->shaderstable, gst_gl_effects_ghash_func_clean,
|
||||||
|
filter);
|
||||||
|
|
||||||
|
//clean the htable without calling values destructors
|
||||||
|
//because shaders have been released in the glthread
|
||||||
|
//through the foreach func
|
||||||
g_hash_table_unref (effects->shaderstable);
|
g_hash_table_unref (effects->shaderstable);
|
||||||
effects->shaderstable = NULL;
|
effects->shaderstable = NULL;
|
||||||
}
|
}
|
||||||
|
@ -298,7 +319,7 @@ static void
|
||||||
gst_gl_effects_set_property (GObject * object, guint prop_id,
|
gst_gl_effects_set_property (GObject * object, guint prop_id,
|
||||||
const GValue * value, GParamSpec * pspec)
|
const GValue * value, GParamSpec * pspec)
|
||||||
{
|
{
|
||||||
GstGLEffects *effects = GST_GL_EFFECTS (object);
|
GstGLEffects *effects = GST_GL_EFFECTS (object);
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_EFFECT:
|
case PROP_EFFECT:
|
||||||
|
@ -339,10 +360,8 @@ gst_gl_effects_init_resources (GstGLFilter* filter)
|
||||||
gint i;
|
gint i;
|
||||||
// g_message ("init resources");
|
// g_message ("init resources");
|
||||||
// g_message ("init hashtable");
|
// g_message ("init hashtable");
|
||||||
effects->shaderstable = g_hash_table_new_full (g_str_hash,
|
effects->shaderstable = g_hash_table_new (g_str_hash,
|
||||||
g_str_equal,
|
g_str_equal);
|
||||||
NULL,
|
|
||||||
g_object_unref);
|
|
||||||
// g_message ("zero textures and curves");
|
// g_message ("zero textures and curves");
|
||||||
for (i=0; i<NEEDED_TEXTURES; i++) {
|
for (i=0; i<NEEDED_TEXTURES; i++) {
|
||||||
effects->midtexture[i] = 0;
|
effects->midtexture[i] = 0;
|
||||||
|
|
Loading…
Reference in a new issue