22 lines
762 B
Plaintext
22 lines
762 B
Plaintext
float rounded_box_sdf(vec2 p, vec2 half_size, vec4 r) {
|
|
r.xy = (p.x > 0.0) ? r.xy : r.zw;
|
|
r.x = (p.y > 0.0) ? r.x : r.y;
|
|
vec2 q = abs(p) - half_size + r.x;
|
|
return min(max(q.x, q.y), 0.0) + length(max(q, 0.0)) - r.x;
|
|
}
|
|
|
|
vec4 apply_rounded_border(vec4 base_color, vec2 uv, vec2 rect_size, vec4 corner_radius, float border_width, vec4 border_color) {
|
|
vec2 px = uv * rect_size;
|
|
vec2 centered = px - rect_size * 0.5;
|
|
vec2 half_size = rect_size * 0.5;
|
|
float d = rounded_box_sdf(centered, half_size, corner_radius);
|
|
|
|
float aa = 1.0;
|
|
float shape_alpha = 1.0 - smoothstep(-aa, aa, d);
|
|
float border_mask = 1.0 - smoothstep(border_width - aa, border_width + aa, -d);
|
|
|
|
vec4 col = mix(base_color, border_color, border_mask);
|
|
col.a *= shape_alpha;
|
|
return col;
|
|
}
|