From fe25ba3c5f735525324bad7740ae38e81736fd08 Mon Sep 17 00:00:00 2001 From: Emmanuele Bassi Date: Sat, 23 Apr 2016 13:52:03 +0100 Subject: [PATCH] gl: Tweak the swizzle for GLES texture fragments Cairo surfaces are in BGRA format, but we upload them as RGBA buffers on GLES; this means that the R and B channels are flipped in the texture data. Instead of doing a costly channel flip before putting them on the GPU, we can flip the values inside the GLSL shader we use specifically for GLES. --- gdk/resources/glsl/gles2-texture.fs.glsl | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gdk/resources/glsl/gles2-texture.fs.glsl b/gdk/resources/glsl/gles2-texture.fs.glsl index 68e455fcf3..56c6c82002 100644 --- a/gdk/resources/glsl/gles2-texture.fs.glsl +++ b/gdk/resources/glsl/gles2-texture.fs.glsl @@ -5,5 +5,8 @@ uniform sampler2D map; varying highp vec2 vUv; void main() { - gl_FragColor = texture2D(map, vUv); + 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); }