static void gst_gl_filterblur_reset_resources (GstGLFilter * filter) { GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter); glDeleteTextures (1, &filterblur->midtexture); }
static void gst_gl_filter_filterblur_reset (GstGLFilter * filter) { GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter); //blocking call, wait the opengl thread has destroyed the shader gst_gl_display_del_shader (filter->display, filterblur->shader0); //blocking call, wait the opengl thread has destroyed the shader gst_gl_display_del_shader (filter->display, filterblur->shader1); }
static void gst_gl_filterblur_init_shader (GstGLFilter * filter) { GstGLFilterBlur *blur_filter = GST_GL_FILTERBLUR (filter); //blocking call, wait the opengl thread has compiled the shader gst_gl_display_gen_shader (filter->display, 0, hconv7_fragment_source, &blur_filter->shader0); //blocking call, wait the opengl thread has compiled the shader gst_gl_display_gen_shader (filter->display, 0, vconv7_fragment_source, &blur_filter->shader1); }
static gboolean gst_gl_filterblur_filter (GstGLFilter * filter, GstGLBuffer * inbuf, GstGLBuffer * outbuf) { GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter); gst_gl_filter_render_to_target (filter, inbuf->texture, filterblur->midtexture, gst_gl_filterblur_hcallback, filterblur); gst_gl_filter_render_to_target (filter, filterblur->midtexture, outbuf->texture, gst_gl_filterblur_vcallback, filterblur); return TRUE; }
static void gst_gl_filterblur_init_resources (GstGLFilter * filter) { GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter); glGenTextures (1, &filterblur->midtexture); glBindTexture (GL_TEXTURE_RECTANGLE_ARB, filterblur->midtexture); glTexImage2D (GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA8, filter->width, filter->height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri (GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); }
static gboolean gst_gl_filterblur_init_shader (GstGLFilter * filter) { GstGLFilterBlur *blur_filter = GST_GL_FILTERBLUR (filter); //blocking call, wait the opengl thread has compiled the shader if (!gst_gl_display_gen_shader (filter->display, 0, hconv7_fragment_source, &blur_filter->shader0)) return FALSE; //blocking call, wait the opengl thread has compiled the shader if (!gst_gl_display_gen_shader (filter->display, 0, vconv7_fragment_source, &blur_filter->shader1)) return FALSE; return TRUE; }
static void gst_gl_filterblur_vcallback (gint width, gint height, guint texture, gpointer stuff) { GstGLFilter *filter = GST_GL_FILTER (stuff); GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gst_gl_shader_use (filterblur->shader1); glActiveTexture (GL_TEXTURE1); glEnable (GL_TEXTURE_RECTANGLE_ARB); glBindTexture (GL_TEXTURE_RECTANGLE_ARB, texture); glDisable (GL_TEXTURE_RECTANGLE_ARB); gst_gl_shader_set_uniform_1i (filterblur->shader1, "tex", 1); gst_gl_shader_set_uniform_1fv (filterblur->shader1, "kernel", 7, filterblur->gauss_kernel); gst_gl_filter_draw_texture (filter, texture); }