gl: Use a uniform to flip R and B colors on GLES

This allows us to decide when the R and B color channels should be
flipped with a much better granularity.

For instance, when using GLX_EXT_texture_from_pixmap to create a GL
texture from a surface we don't need to swap the R and B channels, as
the internal representation of the texture data will already have the
appropriate colors.

We also don't need to flip color channels when blitting from a texture.
This commit is contained in:
Emmanuele Bassi
2016-04-25 13:38:22 +01:00
parent 1379b4b175
commit f848450a70
5 changed files with 24 additions and 11 deletions

View File

@ -1,12 +1,16 @@
precision mediump float;
uniform sampler2D map;
uniform int flipColors;
varying highp vec2 vUv;
void main() {
vec4 color = texture2D(map, vUv);
/* Flip R and B around to match the Cairo convention */
gl_FragColor = vec4(color.z, color.y, color.x, color.w);
/* Flip R and B around to match the Cairo convention, if required */
if (flipColors == 1)
gl_FragColor = vec4(color.z, color.y, color.x, color.w);
else
gl_FragColor = color;
}