static void init (gpointer data) { GError *error = NULL; shader = gst_gl_shader_new_default (context, &error); fail_if (shader == NULL, "failed to create shader object %s", error->message); shader_attr_position_loc = gst_gl_shader_get_attribute_location (shader, "a_position"); shader_attr_texture_loc = gst_gl_shader_get_attribute_location (shader, "a_texCoord"); }
static void _test_default_shader_gl (GstGLContext * context, gpointer data) { GstGLShader *shader; GError *error = NULL; shader = gst_gl_shader_new_default (context, &error); fail_unless (shader != NULL); fail_unless (error == NULL); gst_gl_shader_use (shader); gst_gl_context_clear_shader (context); gst_object_unref (shader); }
static void _test_get_attribute_location_gl (GstGLContext * context, gpointer data) { GstGLShader *shader; GError *error = NULL; gint loc; shader = gst_gl_shader_new_default (context, &error); gst_gl_shader_use (shader); loc = gst_gl_shader_get_attribute_location (shader, "a_position"); fail_unless (loc != -1); loc = gst_gl_shader_get_attribute_location (shader, "a_texcoord"); fail_unless (loc != -1); loc = gst_gl_shader_get_attribute_location (shader, "unused_value_1928374"); fail_unless (loc == -1); gst_object_unref (shader); }
static void init (gpointer data) { const GstGLFuncs *gl = context->gl_vtable; GError *error = NULL; shader = gst_gl_shader_new_default (context, &error); fail_if (shader == NULL, "failed to create shader object %s", error->message); shader_attr_position_loc = gst_gl_shader_get_attribute_location (shader, "a_position"); shader_attr_texture_loc = gst_gl_shader_get_attribute_location (shader, "a_texcoord"); if (!vbo) { if (gl->GenVertexArrays) { gl->GenVertexArrays (1, &vao); gl->BindVertexArray (vao); } gl->GenBuffers (1, &vbo); gl->BindBuffer (GL_ARRAY_BUFFER, vbo); gl->BufferData (GL_ARRAY_BUFFER, 4 * 5 * sizeof (GLfloat), vertices, GL_STATIC_DRAW); gl->GenBuffers (1, &vbo_indices); gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, vbo_indices); gl->BufferData (GL_ELEMENT_ARRAY_BUFFER, sizeof (indices), indices, GL_STATIC_DRAW); if (gl->GenVertexArrays) { _bind_buffer (context); gl->BindVertexArray (0); } gl->BindBuffer (GL_ARRAY_BUFFER, 0); gl->BindBuffer (GL_ELEMENT_ARRAY_BUFFER, 0); } }
static void init (gpointer data) { GstGLContext *context = data; GError *error = NULL; GstVideoInfo v_info; GstGLMemoryAllocator *allocator; GstGLVideoAllocationParams *params; gst_video_info_set_format (&v_info, GST_VIDEO_FORMAT_RGBA, 320, 240); allocator = gst_gl_memory_allocator_get_default (context); params = gst_gl_video_allocation_params_new (context, NULL, &v_info, 0, NULL, GST_GL_TEXTURE_TARGET_2D, GST_GL_RGBA); /* has to be called in the thread that is going to use the framebuffer */ fbo = gst_gl_framebuffer_new_with_default_depth (context, 320, 240); fail_if (fbo == NULL, "failed to create framebuffer object"); gl_tex = (GstGLMemory *) gst_gl_base_memory_alloc ((GstGLBaseMemoryAllocator *) allocator, (GstGLAllocationParams *) params); gl_tex2 = (GstGLMemory *) gst_gl_base_memory_alloc ((GstGLBaseMemoryAllocator *) allocator, (GstGLAllocationParams *) params); gst_object_unref (allocator); gst_gl_allocation_params_free ((GstGLAllocationParams *) params); fail_if (gl_tex == NULL, "failed to create texture"); shader = gst_gl_shader_new_default (context, &error); fail_if (shader == NULL, "failed to create shader object: %s", error->message); shader_attr_position_loc = gst_gl_shader_get_attribute_location (shader, "a_position"); shader_attr_texture_loc = gst_gl_shader_get_attribute_location (shader, "a_texcoord"); }
static gboolean gst_gl_colorscale_gl_start (GstGLBaseFilter * base_filter) { GstGLColorscale *colorscale = GST_GL_COLORSCALE (base_filter); GstGLFilter *filter = GST_GL_FILTER (base_filter); GstGLShader *shader; GError *error = NULL; if (!(shader = gst_gl_shader_new_default (base_filter->context, &error))) { GST_ERROR_OBJECT (colorscale, "Failed to initialize shader: %s", error->message); gst_object_unref (shader); return FALSE; } filter->draw_attr_position_loc = gst_gl_shader_get_attribute_location (shader, "a_position"); filter->draw_attr_texture_loc = gst_gl_shader_get_attribute_location (shader, "a_texcoord"); colorscale->shader = shader; return GST_GL_BASE_FILTER_CLASS (parent_class)->gl_start (base_filter); }
/* init resources that need a gl context */ static void gst_gl_differencematte_init_gl_resources (GstGLFilter * filter) { GstGLDifferenceMatte *differencematte = GST_GL_DIFFERENCEMATTE (filter); GstGLContext *context = GST_GL_BASE_FILTER (filter)->context; const GstGLFuncs *gl = context->gl_vtable; GError *error = NULL; gint i; for (i = 0; i < 4; i++) { gl->GenTextures (1, &differencematte->midtexture[i]); gl->BindTexture (GL_TEXTURE_2D, differencematte->midtexture[i]); gl->TexImage2D (GL_TEXTURE_2D, 0, GL_RGBA8, GST_VIDEO_INFO_WIDTH (&filter->out_info), GST_VIDEO_INFO_HEIGHT (&filter->out_info), 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); gl->TexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); } if (!(differencematte->identity_shader = gst_gl_shader_new_default (context, &error))) { GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, ("%s", "Failed to compile identity shader"), ("%s", error->message)); return; } if (!(differencematte->shader[0] = gst_gl_shader_new_link_with_stages (context, &error, gst_glsl_stage_new_default_vertex (context), gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, difference_fragment_source), NULL))) { GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, ("%s", "Failed to compile difference shader"), ("%s", error->message)); return; } if (!(differencematte->shader[1] = gst_gl_shader_new_link_with_stages (context, &error, gst_glsl_stage_new_default_vertex (context), gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, hconv7_fragment_source_gles2), NULL))) { GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, ("%s", "Failed to compile convolution shader"), ("%s", error->message)); return; } if (!(differencematte->shader[2] = gst_gl_shader_new_link_with_stages (context, &error, gst_glsl_stage_new_default_vertex (context), gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, vconv7_fragment_source_gles2), NULL))) { GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, ("%s", "Failed to compile convolution shader"), ("%s", error->message)); return; } if (!(differencematte->shader[3] = gst_gl_shader_new_link_with_stages (context, &error, gst_glsl_stage_new_default_vertex (context), gst_glsl_stage_new_with_string (context, GL_FRAGMENT_SHADER, GST_GLSL_VERSION_NONE, GST_GLSL_PROFILE_ES | GST_GLSL_PROFILE_COMPATIBILITY, texture_interp_fragment_source), NULL))) { GST_ELEMENT_ERROR (differencematte, RESOURCE, NOT_FOUND, ("%s", "Failed to compile interpolation shader"), ("%s", error->message)); return; } /* FIXME: this should really be per shader */ filter->draw_attr_position_loc = gst_gl_shader_get_attribute_location (differencematte->shader[2], "a_position"); filter->draw_attr_texture_loc = gst_gl_shader_get_attribute_location (differencematte->shader[2], "a_texcoord"); }