mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
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
6b8cf8419d
commit
d6baf8dcc7
1 changed files with 20 additions and 2 deletions
|
@ -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…
Reference in a new issue