Esempio n. 1
0
static void
gst_gl_filterblur_reset_resources (GstGLFilter * filter)
{
    GstGLFilterBlur *filterblur = GST_GL_FILTERBLUR (filter);

    glDeleteTextures (1, &filterblur->midtexture);
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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);
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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);
}
Esempio n. 6
0
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;
}
Esempio n. 7
0
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);
}