#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; }