From 2b8de2d1bcf77d738b2b75138ba0e7fec12cec64 Mon Sep 17 00:00:00 2001 From: Julien Isorce Date: Wed, 30 Apr 2014 15:28:35 +0100 Subject: [PATCH] gleffects: use new helper functions to avoid duplicating the same vertex shader text And also use the default fragment shader text for the identity effect --- ext/gl/effects/gstgleffectidentity.c | 25 ++++++++---------------- ext/gl/effects/gstgleffectmirror.c | 29 ++++++++-------------------- ext/gl/effects/gstgleffectsqueeze.c | 29 ++++++++-------------------- ext/gl/effects/gstgleffectssources.c | 21 -------------------- ext/gl/effects/gstgleffectssources.h | 2 -- 5 files changed, 24 insertions(+), 82 deletions(-) diff --git a/ext/gl/effects/gstgleffectidentity.c b/ext/gl/effects/gstgleffectidentity.c index eb17e33e57..526b7d017f 100644 --- a/ext/gl/effects/gstgleffectidentity.c +++ b/ext/gl/effects/gstgleffectidentity.c @@ -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); diff --git a/ext/gl/effects/gstgleffectmirror.c b/ext/gl/effects/gstgleffectmirror.c index 5311b53bb9..33c0844915 100644 --- a/ext/gl/effects/gstgleffectmirror.c +++ b/ext/gl/effects/gstgleffectmirror.c @@ -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 diff --git a/ext/gl/effects/gstgleffectsqueeze.c b/ext/gl/effects/gstgleffectsqueeze.c index e55c4475bb..5978b5b746 100644 --- a/ext/gl/effects/gstgleffectsqueeze.c +++ b/ext/gl/effects/gstgleffectsqueeze.c @@ -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 diff --git a/ext/gl/effects/gstgleffectssources.c b/ext/gl/effects/gstgleffectssources.c index eadcccda2e..0b4d2d6e40 100644 --- a/ext/gl/effects/gstgleffectssources.c +++ b/ext/gl/effects/gstgleffectssources.c @@ -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 = diff --git a/ext/gl/effects/gstgleffectssources.h b/ext/gl/effects/gstgleffectssources.h index ba05de14f8..68a6f571b5 100644 --- a/ext/gl/effects/gstgleffectssources.h +++ b/ext/gl/effects/gstgleffectssources.h @@ -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;