diff options
author | Julien Isorce <julien.isorce@gmail.com> | 2009-11-21 21:40:14 +0100 |
---|---|---|
committer | Matthew Waters <ystreet00@gmail.com> | 2014-03-15 18:36:38 +0100 |
commit | e002f92e6d0f99cd87340ee04be0418b3bbdab4c (patch) | |
tree | 96237e778958afc8855f3c2efc50951b15785dea /gst/gl/effects/gstgleffectmirror.c | |
parent | 9e22a5e0e6bc1f7d01683769422baf2f20445238 (diff) | |
download | gstreamer-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.c | 25 |
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); } |