mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-28 04:31:06 +00:00
[222/906] Finish TODO task 17
This commit is contained in:
parent
6ad3704c30
commit
72b90292eb
2 changed files with 41 additions and 25 deletions
|
@ -1624,32 +1624,36 @@ gst_gl_display_thread_gen_shader (GstGLDisplay* display)
|
||||||
glutSetWindow (display->glutWinId);
|
glutSetWindow (display->glutWinId);
|
||||||
if (GLEW_ARB_fragment_shader)
|
if (GLEW_ARB_fragment_shader)
|
||||||
{
|
{
|
||||||
gboolean isAlive = TRUE;
|
if (display->gen_shader_vertex_source ||
|
||||||
GError *error = NULL;
|
display->gen_shader_fragment_source)
|
||||||
|
|
||||||
display->gen_shader = gst_gl_shader_new ();
|
|
||||||
|
|
||||||
if (display->gen_shader_vertex_source)
|
|
||||||
gst_gl_shader_set_vertex_source(display->gen_shader, display->gen_shader_vertex_source);
|
|
||||||
|
|
||||||
if (display->gen_shader_fragment_source)
|
|
||||||
gst_gl_shader_set_fragment_source(display->gen_shader, display->gen_shader_fragment_source);
|
|
||||||
|
|
||||||
gst_gl_shader_compile (display->gen_shader, &error);
|
|
||||||
if (error)
|
|
||||||
{
|
{
|
||||||
GST_CAT_ERROR (GST_CAT_DEFAULT, "%s", error->message);
|
gboolean isAlive = TRUE;
|
||||||
g_error_free (error);
|
GError *error = NULL;
|
||||||
error = NULL;
|
|
||||||
gst_gl_shader_use (NULL);
|
display->gen_shader = gst_gl_shader_new ();
|
||||||
isAlive = FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isAlive)
|
if (display->gen_shader_vertex_source)
|
||||||
{
|
gst_gl_shader_set_vertex_source(display->gen_shader, display->gen_shader_vertex_source);
|
||||||
display->isAlive = FALSE;
|
|
||||||
g_object_unref (G_OBJECT (display->gen_shader));
|
if (display->gen_shader_fragment_source)
|
||||||
display->gen_shader = NULL;
|
gst_gl_shader_set_fragment_source(display->gen_shader, display->gen_shader_fragment_source);
|
||||||
|
|
||||||
|
gst_gl_shader_compile (display->gen_shader, &error);
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
GST_CAT_ERROR (GST_CAT_DEFAULT, "%s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
error = NULL;
|
||||||
|
gst_gl_shader_use (NULL);
|
||||||
|
isAlive = FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isAlive)
|
||||||
|
{
|
||||||
|
display->isAlive = FALSE;
|
||||||
|
g_object_unref (G_OBJECT (display->gen_shader));
|
||||||
|
display->gen_shader = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -2297,7 +2301,8 @@ gst_gl_display_gen_shader (GstGLDisplay* display,
|
||||||
display->gen_shader_fragment_source = shader_fragment_source;
|
display->gen_shader_fragment_source = shader_fragment_source;
|
||||||
gst_gl_display_post_message (GST_GL_DISPLAY_ACTION_GEN_SHADER, display);
|
gst_gl_display_post_message (GST_GL_DISPLAY_ACTION_GEN_SHADER, display);
|
||||||
g_cond_wait (display->cond_gen_shader, display->mutex);
|
g_cond_wait (display->cond_gen_shader, display->mutex);
|
||||||
*shader = display->gen_shader;
|
if (shader)
|
||||||
|
*shader = display->gen_shader;
|
||||||
display->gen_shader = NULL;
|
display->gen_shader = NULL;
|
||||||
display->gen_shader_vertex_source = NULL;
|
display->gen_shader_vertex_source = NULL;
|
||||||
display->gen_shader_fragment_source = NULL;
|
display->gen_shader_fragment_source = NULL;
|
||||||
|
|
|
@ -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_on_init_gl_context (GstGLFilter* filter);
|
||||||
|
|
||||||
static void gst_gl_effects_ghash_func_clean (gpointer key, gpointer value, gpointer data);
|
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,
|
||||||
|
@ -219,6 +221,7 @@ gst_gl_effects_class_init (GstGLEffectsClass * klass)
|
||||||
GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_effects_reset_gl_resources;
|
GST_GL_FILTER_CLASS (klass)->display_reset_cb = gst_gl_effects_reset_gl_resources;
|
||||||
GST_GL_FILTER_CLASS (klass)->onStart = gst_gl_effects_init_resources;
|
GST_GL_FILTER_CLASS (klass)->onStart = gst_gl_effects_init_resources;
|
||||||
GST_GL_FILTER_CLASS (klass)->onStop = gst_gl_effects_reset_resources;
|
GST_GL_FILTER_CLASS (klass)->onStop = gst_gl_effects_reset_resources;
|
||||||
|
GST_GL_FILTER_CLASS (klass)->onInitFBO = gst_gl_effects_on_init_gl_context;
|
||||||
|
|
||||||
g_object_class_install_property (
|
g_object_class_install_property (
|
||||||
gobject_class,
|
gobject_class,
|
||||||
|
@ -371,6 +374,14 @@ gst_gl_effects_init_resources (GstGLFilter* filter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
gst_gl_effects_on_init_gl_context (GstGLFilter* filter)
|
||||||
|
{
|
||||||
|
//check that your hardware supports shader
|
||||||
|
//if not the pipeline correctly shut down
|
||||||
|
gst_gl_display_gen_shader (filter->display, 0, 0, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
gst_gl_effects_filter (GstGLFilter* filter, GstGLBuffer* inbuf,
|
gst_gl_effects_filter (GstGLFilter* filter, GstGLBuffer* inbuf,
|
||||||
GstGLBuffer* outbuf)
|
GstGLBuffer* outbuf)
|
||||||
|
|
Loading…
Reference in a new issue