summaryrefslogtreecommitdiff
path: root/gsk/ngl/resources/unblurred_outset_shadow.glsl
diff options
context:
space:
mode:
Diffstat (limited to 'gsk/ngl/resources/unblurred_outset_shadow.glsl')
-rw-r--r--gsk/ngl/resources/unblurred_outset_shadow.glsl20
1 files changed, 17 insertions, 3 deletions
diff --git a/gsk/ngl/resources/unblurred_outset_shadow.glsl b/gsk/ngl/resources/unblurred_outset_shadow.glsl
index 56f0750e6d..0ce6790e98 100644
--- a/gsk/ngl/resources/unblurred_outset_shadow.glsl
+++ b/gsk/ngl/resources/unblurred_outset_shadow.glsl
@@ -1,4 +1,6 @@
// VERTEX_SHADER:
+// unblurred_outset_shadow.glsl
+
uniform float u_spread;
uniform vec2 u_offset;
uniform vec4[3] u_outline_rect;
@@ -25,16 +27,28 @@ void main() {
}
// FRAGMENT_SHADER:
+// unblurred_outset_shadow.glsl
_IN_ vec4 final_color;
_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_outside_outline;
_IN_ _GSK_ROUNDED_RECT_UNIFORM_ transformed_inside_outline;
void main() {
vec2 frag = gsk_get_frag_coord();
+ float inside_coverage;
+
+ inside_coverage = gsk_rounded_rect_coverage(gsk_decode_rect(transformed_inside_outline), frag);
+ float alpha;
+
+ if (inside_coverage == 1.0)
+ alpha = 0.0;
+ else
+ {
+ float outside_coverage;
+
+ outside_coverage = gsk_rounded_rect_coverage(gsk_decode_rect(transformed_outside_outline), frag);
- float alpha = clamp(gsk_rounded_rect_coverage(gsk_decode_rect(transformed_outside_outline), frag) -
- gsk_rounded_rect_coverage(gsk_decode_rect(transformed_inside_outline), frag),
- 0.0, 1.0);
+ alpha = clamp(outside_coverage - inside_coverage, 0.0, 1.0);
+ }
gskSetOutputColor(final_color * alpha);
}