void gst_gl_effects_sobel (GstGLEffects * effects) { GstGLFilter *filter = GST_GL_FILTER (effects); GstGLShader *shader; shader = gst_gl_effects_get_fragment_shader (effects, "desat0", desaturate_fragment_source_gles2); gst_gl_filter_render_to_target_with_shader (filter, effects->intexture, effects->midtexture[0], shader); shader = gst_gl_effects_get_fragment_shader (effects, "hconv0", sep_sobel_hconv3_fragment_source_gles2); gst_gl_shader_use (shader); gst_gl_shader_set_uniform_1f (shader, "height", GST_VIDEO_INFO_HEIGHT (&filter->out_info)); gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0], effects->midtexture[1], shader); shader = gst_gl_effects_get_fragment_shader (effects, "vconv0", sep_sobel_vconv3_fragment_source_gles2); gst_gl_shader_use (shader); gst_gl_shader_set_uniform_1f (shader, "width", GST_VIDEO_INFO_WIDTH (&filter->out_info)); gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[1], effects->midtexture[0], shader); shader = gst_gl_effects_get_fragment_shader (effects, "len0", sep_sobel_length_fragment_source_gles2); gst_gl_shader_use (shader); gst_gl_shader_set_uniform_1i (shader, "invert", effects->invert); gst_gl_filter_render_to_target_with_shader (filter, effects->midtexture[0], effects->outtexture, shader); }
static void gst_gl_effects_twirl_callback (gint width, gint height, guint texture, gpointer data) { GstGLShader *shader; GstGLEffects *effects = GST_GL_EFFECTS (data); GstGLFilter *filter = GST_GL_FILTER (effects); GstGLContext *context = GST_GL_BASE_FILTER (filter)->context; GstGLFuncs *gl = context->gl_vtable; shader = gst_gl_effects_get_fragment_shader (effects, "twirl", twirl_fragment_source_gles2); if (!shader) return; #if GST_GL_HAVE_OPENGL if (USING_OPENGL (context)) { gl->MatrixMode (GL_PROJECTION); gl->LoadIdentity (); } #endif gst_gl_shader_use (shader); gl->ActiveTexture (GL_TEXTURE0); gl->BindTexture (GL_TEXTURE_2D, texture); gst_gl_shader_set_uniform_1i (shader, "tex", 0); gst_gl_filter_draw_texture (filter, texture, width, height); }
static void gst_gl_effects_sobel_callback_vconv (gint width, gint height, guint texture, gpointer data) { GstGLShader *shader = NULL; GstGLEffects *effects = GST_GL_EFFECTS (data); GstGLFilter *filter = GST_GL_FILTER (effects); if (NULL != (shader = gst_gl_effects_get_fragment_shader (effects, "vconv0", sep_sobel_vconv3_fragment_source_gles2, sep_sobel_vconv3_fragment_source_opengl))) { GstGLFuncs *gl = GST_GL_BASE_FILTER (filter)->context->gl_vtable; #if GST_GL_HAVE_OPENGL if (USING_OPENGL (GST_GL_BASE_FILTER (filter)->context)) { gl->MatrixMode (GL_PROJECTION); gl->LoadIdentity (); } #endif gst_gl_shader_use (shader); gl->ActiveTexture (GL_TEXTURE0); gl->BindTexture (GL_TEXTURE_2D, texture); gst_gl_shader_set_uniform_1i (shader, "tex", 0); gst_gl_shader_set_uniform_1f (shader, "height", height); gst_gl_filter_draw_texture (filter, texture, width, height); } }
void gst_gl_effects_sin (GstGLEffects * effects) { GstGLFilter *filter = GST_GL_FILTER (effects); GstGLShader *shader; shader = gst_gl_effects_get_fragment_shader (effects, "sin", sin_fragment_source_gles2); gst_gl_filter_render_to_target_with_shader (filter, effects->intexture, effects->outtexture, shader); }