From: Timm Bäder Date: Tue, 17 Dec 2019 14:59:42 +0000 (+0100) Subject: gl renderer: Move final color computation to vertex shader X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~20^2~420 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6ef0bb8beaf7bc408bf6adb1d989117d2b001e49;p=gtk4.git gl renderer: Move final color computation to vertex shader .. of the coloring program, which is used all the time for text. --- diff --git a/gsk/resources/glsl/coloring.glsl b/gsk/resources/glsl/coloring.glsl index a61d9222b4..e1b26540c8 100644 --- a/gsk/resources/glsl/coloring.glsl +++ b/gsk/resources/glsl/coloring.glsl @@ -1,23 +1,25 @@ // VERTEX_SHADER: +uniform vec4 u_color; + +_OUT_ vec4 final_color; + void main() { gl_Position = u_projection * u_modelview * vec4(aPosition, 0.0, 1.0); vUv = vec2(aUv.x, aUv.y); + + final_color = u_color; + // pre-multiply + final_color.rgb *= final_color.a; + final_color *= u_alpha; } // FRAGMENT_SHADER: -uniform vec4 u_color; + +_IN_ vec4 final_color; void main() { vec4 diffuse = Texture(u_source, vUv); - vec4 color = u_color; - - // pre-multiply - color.rgb *= color.a; - - // u_source is drawn using cairo, so already pre-multiplied. - color = vec4(color.rgb * diffuse.a * u_alpha, - color.a * diffuse.a * u_alpha); - setOutputColor(color); + setOutputColor(final_color * diffuse.a); }