gl renderer: Move final color computation to vertex shader
authorTimm Bäder <mail@baedert.org>
Tue, 17 Dec 2019 14:59:42 +0000 (15:59 +0100)
committerTimm Bäder <mail@baedert.org>
Tue, 7 Jan 2020 16:27:16 +0000 (17:27 +0100)
.. of the coloring program, which is used all the time for text.

gsk/resources/glsl/coloring.glsl

index a61d9222b40b2c335128e8061ee160d6dee77e34..e1b26540c8116967cffc401d5c34c87083268cf8 100644 (file)
@@ -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);
 }