[222/906] Finish TODO task 17

This commit is contained in:
Julien Isorce 2008-09-14 19:56:50 +02:00 committed by Tim-Philipp Müller
parent 5759b60ba3
commit 69159fa0af

View file

@ -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);
isAlive = FALSE;
}
if (!isAlive) display->gen_shader = gst_gl_shader_new ();
{
display->isAlive = FALSE; if (display->gen_shader_vertex_source)
g_object_unref (G_OBJECT (display->gen_shader)); gst_gl_shader_set_vertex_source(display->gen_shader, display->gen_shader_vertex_source);
display->gen_shader = NULL;
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);
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;