diff options
Diffstat (limited to 'gsk/ngl/resources/unblurred_outset_shadow.glsl')
-rw-r--r-- | gsk/ngl/resources/unblurred_outset_shadow.glsl | 20 |
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); } |