atagen

monolith

public
Star0
Watch0
f89d02f177fad26299b3f9b4cf8f21680916e88f
1
ssh://brewery@pls.lobotomise.me:33/atagen/monolith.git

Blame: crates/render-vk/shaders/clip.glsl

47259c39793fatagen2026-10-17 10:13 UTC1
// Coverage of the fragment under the push constant clip, a rounded rect in
47259c39793fatagen2026-10-17 10:13 UTC2
// framebuffer pixels with radii TL, TR, BR, BL. A ring keeps only the band
47259c39793fatagen2026-10-17 10:13 UTC3
// that wide inside the edge, for borders.
47259c39793fatagen2026-10-17 10:13 UTC4
float rounded_box(vec2 p, vec2 half_size, float r) {
47259c39793fatagen2026-10-17 10:13 UTC5
    vec2 q = abs(p) - half_size + r;
47259c39793fatagen2026-10-17 10:13 UTC6
    return length(max(q, 0.0)) + min(max(q.x, q.y), 0.0) - r;
47259c39793fatagen2026-10-17 10:13 UTC7
}
47259c39793fatagen2026-10-17 10:13 UTC8
47259c39793fatagen2026-10-17 10:13 UTC9
float clip_alpha() {
47259c39793fatagen2026-10-17 10:13 UTC10
    if (pc.clip.z <= 0.0) {
47259c39793fatagen2026-10-17 10:13 UTC11
        return 1.0;
47259c39793fatagen2026-10-17 10:13 UTC12
    }
47259c39793fatagen2026-10-17 10:13 UTC13
    vec2 half_size = pc.clip.zw * 0.5;
47259c39793fatagen2026-10-17 10:13 UTC14
    vec2 p = gl_FragCoord.xy - (pc.clip.xy + half_size);
47259c39793fatagen2026-10-17 10:13 UTC15
    float r = p.x < 0.0 ? (p.y < 0.0 ? pc.radii.x : pc.radii.w)
47259c39793fatagen2026-10-17 10:13 UTC16
                        : (p.y < 0.0 ? pc.radii.y : pc.radii.z);
47259c39793fatagen2026-10-17 10:13 UTC17
    float a = clamp(0.5 - rounded_box(p, half_size, r), 0.0, 1.0);
47259c39793fatagen2026-10-17 10:13 UTC18
    float ring = pc.ring.x;
47259c39793fatagen2026-10-17 10:13 UTC19
    if (ring > 0.0) {
47259c39793fatagen2026-10-17 10:13 UTC20
        float inner = rounded_box(p, half_size - ring, max(r - ring, 0.0));
47259c39793fatagen2026-10-17 10:13 UTC21
        a *= clamp(0.5 + inner, 0.0, 1.0);
47259c39793fatagen2026-10-17 10:13 UTC22
    }
47259c39793fatagen2026-10-17 10:13 UTC23
    return a;
47259c39793fatagen2026-10-17 10:13 UTC24
}