From 89f0a15adee879fb95cd2c12b189a69c7e9f0520 Mon Sep 17 00:00:00 2001 From: Patrick Cleavelin Date: Sat, 20 Apr 2024 18:22:11 -0500 Subject: [PATCH] render those rectangles --- shaders/ui_rect_fragment.glsl | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/shaders/ui_rect_fragment.glsl b/shaders/ui_rect_fragment.glsl index 7b2c372..21fa67c 100644 --- a/shaders/ui_rect_fragment.glsl +++ b/shaders/ui_rect_fragment.glsl @@ -14,6 +14,32 @@ in UiRectFragment out_rect; layout(location = 0) out highp vec4 color; -void main() { - color = out_rect.color; +highp float rect_sdf( + highp vec2 absolute_pixel_position, + highp vec2 origin, + highp vec2 size, + highp float corner_radius +) { + highp vec2 half_size = size / 2.0; + highp vec2 rect_center = origin + half_size; + + highp vec2 pixel_position = abs(absolute_pixel_position - rect_center); + highp vec2 shrunk_corner_position = half_size - corner_radius; + + highp vec2 pixel_to_shrunk_corner = max(vec2(0), pixel_position - shrunk_corner_position); + highp float distance_to_shrunk_corner = length(pixel_to_shrunk_corner); + highp float distance = distance_to_shrunk_corner - corner_radius; + + return distance; +} + +void main() { + highp vec2 pixel_pos = out_rect.tex_coord.xy * out_rect.screen_size; + + highp float distance = rect_sdf(pixel_pos, out_rect.position, out_rect.size, out_rect.border_size.x); + if (distance <= 0.0) { + color = out_rect.color; + } else { + color = vec4(0); + } }