summaryrefslogtreecommitdiff
path: root/gst/gl/effects/gstgleffectmirror.c
diff options
context:
space:
mode:
authorJulien Isorce <julien.isorce@gmail.com>2009-11-21 21:40:14 +0100
committerMatthew Waters <ystreet00@gmail.com>2014-03-15 18:36:38 +0100
commite002f92e6d0f99cd87340ee04be0418b3bbdab4c (patch)
tree96237e778958afc8855f3c2efc50951b15785dea /gst/gl/effects/gstgleffectmirror.c
parent9e22a5e0e6bc1f7d01683769422baf2f20445238 (diff)
downloadgstreamer-plugins-bad-e002f92e6d0f99cd87340ee04be0418b3bbdab4c.tar.gz
[408/906] gleffects: start to make it compatible with OpenGL ES 2.0
For now only identity, mirror and squeeze effects are available. Maybe some factorization is needed about compilation shader before to put the other effects since only a copy/past is needed, at least until effect number 9: heat. The effects from 10:sepia to 15:glow require more work.
Diffstat (limited to 'gst/gl/effects/gstgleffectmirror.c')
-rw-r--r--gst/gl/effects/gstgleffectmirror.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/gst/gl/effects/gstgleffectmirror.c b/gst/gl/effects/gstgleffectmirror.c
index 5be4e73ed..4cb39ea6c 100644
--- a/gst/gl/effects/gstgleffectmirror.c
+++ b/gst/gl/effects/gstgleffectmirror.c
@@ -33,13 +33,36 @@ gst_gl_effects_mirror_callback (gint width, gint height, guint texture,
if (!shader) {
shader = gst_gl_shader_new ();
g_hash_table_insert (effects->shaderstable, "mirror0", shader);
+
+#ifdef OPENGL_ES2
+ 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);
+
+ 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 {
+ effects->draw_attr_position_loc =
+ gst_gl_shader_get_attribute_location (shader, "a_position");
+ effects->draw_attr_texture_loc =
+ gst_gl_shader_get_attribute_location (shader, "a_texCoord");
+ }
+ }
+#endif
}
+#ifndef OPENGL_ES2
g_return_if_fail (gst_gl_shader_compile_and_check (shader,
mirror_fragment_source, GST_GL_SHADER_FRAGMENT_SOURCE));
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
+#endif
gst_gl_shader_use (shader);
@@ -49,8 +72,10 @@ gst_gl_effects_mirror_callback (gint width, gint height, guint texture,
gst_gl_shader_set_uniform_1i (shader, "tex", 0);
+#ifndef OPENGL_ES2
gst_gl_shader_set_uniform_1f (shader, "width", (gfloat) width / 2.0f);
gst_gl_shader_set_uniform_1f (shader, "height", (gfloat) height / 2.0f);
+#endif
gst_gl_effects_draw_texture (effects, texture);
}