summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Isorce <julien.isorce@collabora.co.uk>2014-04-30 15:28:35 +0100
committerJulien Isorce <julien.isorce@collabora.co.uk>2014-04-30 15:35:49 +0100
commitf4626ef619d90f5de63ca06638f617cf4a41d1ae (patch)
tree509146a3a7fc63c476ec81d8761af64574e23f78
parent64e5b5a203bea47f329f36e6fe6cc43b87a1326f (diff)
downloadgstreamer-plugins-bad-f4626ef619d90f5de63ca06638f617cf4a41d1ae.tar.gz
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
-rw-r--r--ext/gl/effects/gstgleffectidentity.c25
-rw-r--r--ext/gl/effects/gstgleffectmirror.c29
-rw-r--r--ext/gl/effects/gstgleffectsqueeze.c29
-rw-r--r--ext/gl/effects/gstgleffectssources.c21
-rw-r--r--ext/gl/effects/gstgleffectssources.h2
5 files changed, 24 insertions, 82 deletions
diff --git a/ext/gl/effects/gstgleffectidentity.c b/ext/gl/effects/gstgleffectidentity.c
index eb17e33e5..526b7d017 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 5311b53bb..33c084491 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 e55c4475b..5978b5b74 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 eadcccda2..0b4d2d6e4 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 ba05de14f..68a6f571b 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;