#version 450

// Fragment shader per a línies vectorials.
//
// Antialias geomètric: rebem `frag_edge_dist` interpolat (±1 als laterals del
// quad, 0 a l'eix central). Apliquem un smoothstep d'1 píxel d'amplada perquè
// el gruix nominal (els |edge_dist| < threshold) quedi totalment opac i només
// el píxel extruit als laterals faci la transició suau.
//
// La línia ja ve extruïda amb thickness + 1px a CPU; el threshold equival a
// (thickness)/(thickness+1), però no el coneixem aquí per vèrtex. En el cas
// general (línies fines), fade lineal entre 0.0 i 1.0 dóna prou bon resultat
// visualment sense necessitat d'un uniform per línia.

layout(location = 0) in vec4 frag_color;
layout(location = 1) in float frag_edge_dist;
layout(location = 0) out vec4 out_color;

void main() {
    // |edge_dist|=0 → totalment opac; |edge_dist|=1 → totalment transparent.
    // smoothstep dóna un fade Hermite C¹ que evita banding.
    float d = abs(frag_edge_dist);
    float alpha = 1.0 - smoothstep(0.7, 1.0, d);
    out_color = vec4(frag_color.rgb, frag_color.a * alpha);
}
