#version 450

// Vertex shader del pase de postprocesado.
// Emite un solo triángulo que cubre toda la pantalla (técnica del "fullscreen
// triangle"): tres vértices en (-1,-1), (3,-1), (-1,3) → la región visible
// [-1..1]² queda completamente cubierta y el clip recorta el resto. No hace
// falta vertex buffer; el draw es DrawPrimitives(vertex_count=3).

layout(location = 0) out vec2 v_uv;

void main() {
    vec2 positions[3] = vec2[3](
        vec2(-1.0, -1.0),
        vec2( 3.0, -1.0),
        vec2(-1.0,  3.0)
    );
    // UV.y invertida para compensar la diferencia entre la convención de
    // clip-space del line shader (ndc.y flipeado, GL-style) y la convención
    // de muestreo de SDL_gpu/Vulkan (origen de textura en top-left). Sin esta
    // inversión, el offscreen se ve cabeza-abajo en el composite.
    vec2 uvs[3] = vec2[3](
        vec2(0.0, 1.0),
        vec2(2.0, 1.0),
        vec2(0.0, -1.0)
    );
    gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0);
    v_uv = uvs[gl_VertexIndex];
}
