gloverlaycompositor: Add shader to convert BGRA/ARGB -> RGBA

Depending on the bytes order we will get BGRA (little) and ARGB (big)
from the composition overlay buffer while our GL code expects RGBA. Add
a fragment shader that do this conversion.

https://bugzilla.gnome.org/show_bug.cgi?id=752842
This commit is contained in:
Nicolas Dufresne 2015-08-08 14:45:42 -04:00
parent 6b8cf8419d
commit d6baf8dcc7

View file

@ -44,6 +44,24 @@ typedef struct _GstGLCompositionOverlayClass GstGLCompositionOverlayClass;
static GType gst_gl_composition_overlay_get_type (void);
/* *INDENT-OFF* */
const gchar *fragment_shader =
"#ifdef GL_ES\n"
"precision mediump float;\n"
"#endif\n"
"varying vec2 v_texcoord;\n"
"uniform sampler2D tex;\n"
"void main(void)\n"
"{\n"
" vec4 t = texture2D(tex, v_texcoord);\n"
#if G_BYTE_ORDER == G_LITTLE_ENDIAN
" gl_FragColor = t.bgra;\n"
#else
" gl_FragColor = t.gbar;\n"
#endif
"}";
/* *INDENT-ON* */
struct _GstGLCompositionOverlay
{
GstObject parent;
@ -408,8 +426,8 @@ gst_gl_overlay_compositor_init_gl (GstGLContext * context,
GstGLOverlayCompositor *compositor =
(GstGLOverlayCompositor *) compositor_pointer;
if (!gst_gl_shader_compile_with_default_vf_and_check
(compositor->shader, &compositor->position_attrib,
if (!gst_gl_shader_compile_with_default_v_and_check (compositor->shader,
fragment_shader, &compositor->position_attrib,
&compositor->texcoord_attrib)) {
GST_ERROR ("could not initialize shader.");
}