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:
parent
9f9e0e87cf
commit
d576a71e9a
@ -44,6 +44,24 @@ typedef struct _GstGLCompositionOverlayClass GstGLCompositionOverlayClass;
|
|||||||
|
|
||||||
static GType gst_gl_composition_overlay_get_type (void);
|
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
|
struct _GstGLCompositionOverlay
|
||||||
{
|
{
|
||||||
GstObject parent;
|
GstObject parent;
|
||||||
@ -408,8 +426,8 @@ gst_gl_overlay_compositor_init_gl (GstGLContext * context,
|
|||||||
GstGLOverlayCompositor *compositor =
|
GstGLOverlayCompositor *compositor =
|
||||||
(GstGLOverlayCompositor *) compositor_pointer;
|
(GstGLOverlayCompositor *) compositor_pointer;
|
||||||
|
|
||||||
if (!gst_gl_shader_compile_with_default_vf_and_check
|
if (!gst_gl_shader_compile_with_default_v_and_check (compositor->shader,
|
||||||
(compositor->shader, &compositor->position_attrib,
|
fragment_shader, &compositor->position_attrib,
|
||||||
&compositor->texcoord_attrib)) {
|
&compositor->texcoord_attrib)) {
|
||||||
GST_ERROR ("could not initialize shader.");
|
GST_ERROR ("could not initialize shader.");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user