#version 320 es

struct UiRectFragment {
    highp vec4 device_position;
    highp vec2 position;
    highp vec2 size;
    highp vec2 border_size;
    highp vec2 screen_size;
    highp vec2 tex_coord;
    highp vec4 color;
};

in UiRectFragment out_rect;

layout(location = 0) out highp vec4 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);
    }
}