a73x

shaders/cell.frag

Ref:   Size: 633 B

#version 450

layout(binding = 0) uniform sampler2D glyph_atlas;

layout(push_constant) uniform PushConstants {
    vec2 viewport_size;
    vec2 cell_size;
    vec2 coverage_params;
} pc;

layout(location = 0) in vec2 in_uv;
layout(location = 1) in vec4 in_fg;
layout(location = 2) in vec4 in_bg;

layout(location = 0) out vec4 out_color;

float shape_coverage(float alpha) {
    float curved = pow(alpha, pc.coverage_params.x);
    return clamp(curved + pc.coverage_params.y, 0.0, 1.0);
}

void main() {
    float alpha = texture(glyph_atlas, in_uv).r;
    alpha = shape_coverage(alpha);
    out_color = mix(in_bg, in_fg, alpha);
}