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; }