[713/906] shader: make it possible to create the object in a non-GL thread
authorMatthew Waters <ystreet00@gmail.com>
Sun, 16 Jun 2013 10:41:29 +0000 (20:41 +1000)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:31:28 +0000 (19:31 +0000)
gst-libs/gst/gl/gstglshader.c

index ed7624b..6579a5b 100644 (file)
@@ -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 */