gl: gradients should transition in unpremultiplied space
authorBenjamin Otte <otte@redhat.com>
Sun, 17 Sep 2023 04:26:16 +0000 (06:26 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 19 Sep 2023 20:32:27 +0000 (16:32 -0400)
So make the gradient shaders do that.

gsk/gl/resources/conic_gradient.glsl
gsk/gl/resources/linear_gradient.glsl
gsk/gl/resources/radial_gradient.glsl

index f1d33cd6a70d1429003e8c075603bcea94a4f478..eaa04aa3ad7c761391495b22eb1c3320502e3063 100644 (file)
@@ -75,10 +75,10 @@ void main() {
 
     if (offset < next_offset) {
       float f = (offset - curr_offset) / (next_offset - curr_offset);
-      vec4 curr_color = gsk_premultiply(get_color(i));
-      vec4 next_color = gsk_premultiply(get_color(i + 1));
+      vec4 curr_color = get_color(i);
+      vec4 next_color = get_color(i + 1);
       vec4 color = mix(curr_color, next_color, f);
-      gskSetScaledOutputColor(color, u_alpha);
+      gskSetScaledOutputColor(gsk_premultiply(color), u_alpha);
       return;
     }
   }
index fa130be4cb07626ba850955f586bee2b4a260d18..8a7a557f8e312a8374291d9f3510777161c1e85c 100644 (file)
@@ -97,10 +97,10 @@ void main() {
 
     if (offset < next_offset) {
       float f = (offset - curr_offset) / (next_offset - curr_offset);
-      vec4 curr_color = gsk_premultiply(get_color(i));
-      vec4 next_color = gsk_premultiply(get_color(i + 1));
+      vec4 curr_color = get_color(i);
+      vec4 next_color = get_color(i + 1);
       vec4 color = mix(curr_color, next_color, f);
-      gskSetScaledOutputColor(color, u_alpha);
+      gskSetScaledOutputColor(gsk_premultiply (color), u_alpha);
       return;
     }
   }
index 59fad002908c4ed600807828c49e3399e4aa0d4d..d03ca96b8c5279d658d75e6b344610c9382cb0b4 100644 (file)
@@ -77,10 +77,10 @@ void main() {
 
     if (offset < next_offset) {
       float f = (offset - curr_offset) / (next_offset - curr_offset);
-      vec4 curr_color = gsk_premultiply(get_color(i));
-      vec4 next_color = gsk_premultiply(get_color(i + 1));
+      vec4 curr_color = get_color(i);
+      vec4 next_color = get_color(i + 1);
       vec4 color = mix(curr_color, next_color, f);
-      gskSetScaledOutputColor(color, u_alpha);
+      gskSetScaledOutputColor(gsk_premultiply(color), u_alpha);
       return;
     }
   }