summaryrefslogtreecommitdiffstats
path: root/glow/src/shader/compatibility/quad.frag
diff options
context:
space:
mode:
authorLibravatar Casper Storm <casper.storm@lich.io>2022-12-13 09:31:57 +0100
committerLibravatar Casper Storm <casper.storm@lich.io>2022-12-13 09:31:57 +0100
commit2e6d90f141217bad83eacd392562c13d7485881f (patch)
treebaa2c507076073aed4fd24abc9c7a7949d85c039 /glow/src/shader/compatibility/quad.frag
parentba95042fff378213f5029b2b164d79e768482a47 (diff)
parent02182eea45537c9eb5b2bddfdff822bb8a3d143d (diff)
downloadiced-2e6d90f141217bad83eacd392562c13d7485881f.tar.gz
iced-2e6d90f141217bad83eacd392562c13d7485881f.tar.bz2
iced-2e6d90f141217bad83eacd392562c13d7485881f.zip
Merge branch 'master' into feat/slider-orientation
Diffstat (limited to 'glow/src/shader/compatibility/quad.frag')
-rw-r--r--glow/src/shader/compatibility/quad.frag24
1 files changed, 20 insertions, 4 deletions
diff --git a/glow/src/shader/compatibility/quad.frag b/glow/src/shader/compatibility/quad.frag
index 8ea5693d..bb9d8122 100644
--- a/glow/src/shader/compatibility/quad.frag
+++ b/glow/src/shader/compatibility/quad.frag
@@ -12,7 +12,7 @@ varying vec4 v_Color;
varying vec4 v_BorderColor;
varying vec2 v_Pos;
varying vec2 v_Scale;
-varying float v_BorderRadius;
+varying vec4 v_BorderRadius;
varying float v_BorderWidth;
float _distance(vec2 frag_coord, vec2 position, vec2 size, float radius)
@@ -33,10 +33,26 @@ float _distance(vec2 frag_coord, vec2 position, vec2 size, float radius)
return sqrt(distance.x * distance.x + distance.y * distance.y);
}
+float selectBorderRadius(vec4 radi, vec2 position, vec2 center)
+{
+ float rx = radi.x;
+ float ry = radi.y;
+ rx = position.x > center.x ? radi.y : radi.x;
+ ry = position.x > center.x ? radi.z : radi.w;
+ rx = position.y > center.y ? ry : rx;
+ return rx;
+}
+
void main() {
vec2 fragCoord = vec2(gl_FragCoord.x, u_ScreenHeight - gl_FragCoord.y);
- float internal_border = max(v_BorderRadius - v_BorderWidth, 0.0);
+ float border_radius = selectBorderRadius(
+ v_BorderRadius,
+ fragCoord,
+ (v_Pos + v_Scale * 0.5).xy
+ );
+
+ float internal_border = max(border_radius - v_BorderWidth, 0.0);
float internal_distance = _distance(
fragCoord,
@@ -57,11 +73,11 @@ void main() {
fragCoord,
v_Pos,
v_Scale,
- v_BorderRadius
+ border_radius
);
float radius_alpha =
- 1.0 - smoothstep(max(v_BorderRadius - 0.5, 0.0), v_BorderRadius + 0.5, d);
+ 1.0 - smoothstep(max(border_radius - 0.5, 0.0), border_radius + 0.5, d);
gl_FragColor = vec4(mixed_color.xyz, mixed_color.w * radius_alpha);
}