#version 450

// Vertex shader para líneas vectoriales.
// Las líneas se proveen ya extrudidas en CPU como quads (2 triángulos por línea)
// con grosor configurable. El vertex shader solo:
//   1. Transforma de píxeles lógicos (0..viewport_size) a clip-space (-1..+1).
//   2. Pasa el color RGBA al fragment shader.
//
// Slot de uniform buffer 0 (vertex): viewport size para la transformación.
// Convención SDL_gpu: SDL_PushGPUVertexUniformData(cmd, 0, &ubo, sizeof(ubo)).

layout(set = 1, binding = 0) uniform UBO {
    vec2 viewport_size;  // ancho y alto en píxeles lógicos (ej. 1280, 720)
    vec2 _padding;       // alineamiento a 16 bytes
} ubo;

layout(location = 0) in vec2 in_position;   // píxeles lógicos
layout(location = 1) in vec4 in_color;      // RGBA 0..1
layout(location = 2) in float in_edge_dist; // ±1 als laterals, 0 al centre

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

void main() {
    // Píxeles lógicos -> NDC (-1..+1)
    vec2 ndc = (in_position / ubo.viewport_size) * 2.0 - 1.0;
    // Y flip: SDL screen-Y va hacia abajo, clip-Y hacia arriba.
    ndc.y = -ndc.y;
    gl_Position = vec4(ndc, 0.0, 1.0);
    frag_color = in_color;
    frag_edge_dist = in_edge_dist;
}
