From: Matthew Waters Date: Sun, 16 Jun 2013 10:41:29 +0000 (+1000) Subject: [713/906] shader: make it possible to create the object in a non-GL thread X-Git-Tag: 1.19.3~511^2~1989^2~1827 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d7f5cac7ce82cfc5d5af29e8eee23077114763fa;p=platform%2Fupstream%2Fgstreamer.git [713/906] shader: make it possible to create the object in a non-GL thread --- diff --git a/gst-libs/gst/gl/gstglshader.c b/gst-libs/gst/gl/gstglshader.c index ed7624b..6579a5b 100644 --- a/gst-libs/gst/gl/gstglshader.c +++ b/gst-libs/gst/gl/gstglshader.c @@ -350,13 +350,6 @@ gst_gl_shader_new (GstGLDisplay * display) shader = g_object_new (GST_GL_TYPE_SHADER, NULL); shader->display = gst_object_ref (display); - if (!_fill_vtable (shader, display)) - return NULL; - - shader->priv->program_handle = shader->priv->vtable.CreateProgram (); - - GST_TRACE ("shader initialized %u", shader->priv->program_handle); - return shader; } @@ -386,6 +379,13 @@ gst_gl_shader_compile (GstGLShader * shader, GError ** error) if (priv->compiled) return priv->compiled; + if (!_fill_vtable (shader, shader->display)) + return FALSE; + + shader->priv->program_handle = shader->priv->vtable.CreateProgram (); + + GST_TRACE ("shader created %u", shader->priv->program_handle); + g_return_val_if_fail (priv->program_handle, FALSE); if (priv->vertex_src) { @@ -480,9 +480,7 @@ gst_gl_shader_release (GstGLShader * shader) priv = shader->priv; - g_return_if_fail (priv->program_handle); - - if (!priv->compiled) + if (!priv->compiled || !priv->program_handle) return; if (priv->vertex_handle) { /* not needed but nvidia doesn't care to respect the spec */