gleffects: use new helper functions to avoid duplicating the same vertex shader text
authorJulien Isorce <julien.isorce@collabora.co.uk>
Wed, 30 Apr 2014 14:28:35 +0000 (15:28 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Sat, 9 Dec 2017 19:31:38 +0000 (19:31 +0000)
And also use the default fragment shader text for the identity effect

ext/gl/effects/gstgleffectidentity.c
ext/gl/effects/gstgleffectmirror.c
ext/gl/effects/gstgleffectsqueeze.c
ext/gl/effects/gstgleffectssources.c
ext/gl/effects/gstgleffectssources.h

index eb17e33..526b7d0 100644 (file)
@@ -54,23 +54,14 @@ gst_gl_effects_identity_callback (gint width, gint height, guint texture,
       g_hash_table_insert (effects->shaderstable, (gchar *) "identity0",
           shader);
 
-      if (shader) {
-        GError *error = NULL;
-        gst_gl_shader_set_vertex_source (shader, vertex_shader_source);
-        gst_gl_shader_set_fragment_source (shader, identity_fragment_source);
-
-        gst_gl_shader_compile (shader, &error);
-        if (error) {
-          GST_ERROR ("%s", error->message);
-          g_error_free (error);
-          error = NULL;
-          gst_gl_shader_use (NULL);
-        } else {
-          filter->draw_attr_position_loc =
-              gst_gl_shader_get_attribute_location (shader, "a_position");
-          filter->draw_attr_texture_loc =
-              gst_gl_shader_get_attribute_location (shader, "a_texCoord");
-        }
+      if (!gst_gl_shader_compile_with_default_vf_and_check (shader,
+              &filter->draw_attr_position_loc,
+              &filter->draw_attr_texture_loc)) {
+        /* gst gl context error is already set */
+        GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND,
+            ("Failed to initialize identity shader, %s",
+                gst_gl_context_get_error ()), (NULL));
+        return;
       }
     }
     gst_gl_shader_use (shader);
index 5311b53..33c0844 100644 (file)
@@ -47,27 +47,14 @@ gst_gl_effects_mirror_callback (gint width, gint height, guint texture,
 
 #if GST_GL_HAVE_GLES2
     if (USING_GLES2 (context)) {
-      if (shader) {
-        GError *error = NULL;
-        gst_gl_shader_set_vertex_source (shader, vertex_shader_source);
-        gst_gl_shader_set_fragment_source (shader,
-            mirror_fragment_source_gles2);
-
-        gst_gl_shader_compile (shader, &error);
-        if (error) {
-          gst_gl_context_set_error (context,
-              "Failed to initialize mirror shader, %s", error->message);
-          g_error_free (error);
-          error = NULL;
-          gst_gl_shader_use (NULL);
-          GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND,
-              ("%s", gst_gl_context_get_error ()), (NULL));
-        } else {
-          filter->draw_attr_position_loc =
-              gst_gl_shader_get_attribute_location (shader, "a_position");
-          filter->draw_attr_texture_loc =
-              gst_gl_shader_get_attribute_location (shader, "a_texCoord");
-        }
+      if (!gst_gl_shader_compile_with_default_v_and_check (shader,
+              mirror_fragment_source_gles2, &filter->draw_attr_position_loc,
+              &filter->draw_attr_texture_loc)) {
+        /* gst gl context error is already set */
+        GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND,
+            ("Failed to initialize squeeze shader, %s",
+                gst_gl_context_get_error ()), (NULL));
+        return;
       }
     }
 #endif
index e55c447..5978b5b 100644 (file)
@@ -47,27 +47,14 @@ gst_gl_effects_squeeze_callback (gint width, gint height, guint texture,
 
 #if GST_GL_HAVE_GLES2
     if (USING_GLES2 (context)) {
-      if (shader) {
-        GError *error = NULL;
-        gst_gl_shader_set_vertex_source (shader, vertex_shader_source);
-        gst_gl_shader_set_fragment_source (shader,
-            squeeze_fragment_source_gles2);
-
-        gst_gl_shader_compile (shader, &error);
-        if (error) {
-          gst_gl_context_set_error (context,
-              "Failed to initialize squeeze shader, %s", error->message);
-          g_error_free (error);
-          error = NULL;
-          gst_gl_shader_use (NULL);
-          GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND,
-              ("%s", gst_gl_context_get_error ()), (NULL));
-        } else {
-          filter->draw_attr_position_loc =
-              gst_gl_shader_get_attribute_location (shader, "a_position");
-          filter->draw_attr_texture_loc =
-              gst_gl_shader_get_attribute_location (shader, "a_texCoord");
-        }
+      if (!gst_gl_shader_compile_with_default_v_and_check (shader,
+              squeeze_fragment_source_gles2, &filter->draw_attr_position_loc,
+              &filter->draw_attr_texture_loc)) {
+        /* gst gl context error is already set */
+        GST_ELEMENT_ERROR (effects, RESOURCE, NOT_FOUND,
+            ("Failed to initialize squeeze shader, %s",
+                gst_gl_context_get_error ()), (NULL));
+        return;
       }
     }
 #endif
index eadcccd..0b4d2d6 100644 (file)
@@ -64,27 +64,6 @@ fill_gaussian_kernel (float *kernel, int size, float sigma)
 
 /* *INDENT-OFF* */
 
-/* Vertex shader */
-const gchar *vertex_shader_source =
-  "attribute vec4 a_position;"
-  "attribute vec2 a_texCoord;"
-  "varying vec2 v_texCoord;"
-  "void main()"
-  "{"
-  "   gl_Position = a_position;"
-  "   v_texCoord = a_texCoord;"
-  "}";
-
-/* Identity effect */
-const gchar *identity_fragment_source =
-  "precision mediump float;"
-  "varying vec2 v_texCoord;"
-  "uniform sampler2D tex;"
-  "void main()"
-  "{"
-  "  gl_FragColor = texture2D(tex, v_texCoord);"
-  "}";
-
 /* Mirror effect */
 #if GST_GL_HAVE_OPENGL
 const gchar *mirror_fragment_source_opengl =
index ba05de1..68a6f57 100644 (file)
@@ -21,8 +21,6 @@
 #ifndef __GST_GL_EFFECTS_SOURCES_H__
 #define __GST_GL_EFFECTS_SOURCES_H__
 
-extern const gchar *vertex_shader_source;
-extern const gchar *identity_fragment_source;
 #if GST_GL_HAVE_OPENGL
 extern const gchar *mirror_fragment_source_opengl;
 extern const gchar *squeeze_fragment_source_opengl;