#version 300 es // OpenGL ES 3.0 - Compatible con Raspberry Pi 5 precision highp float; // Configuración #define SCANLINES #define MULTISAMPLE #define GAMMA //#define FAKE_GAMMA //#define CURVATURE //#define SHARPER #define MASK_TYPE 2 #define CURVATURE_X 0.05 #define CURVATURE_Y 0.1 #define MASK_BRIGHTNESS 0.80 #define SCANLINE_WEIGHT 6.0 #define SCANLINE_GAP_BRIGHTNESS 0.12 #define BLOOM_FACTOR 3.5 #define INPUT_GAMMA 2.4 #define OUTPUT_GAMMA 2.2 // Inputs (desde VAO) layout(location = 0) in vec2 aPosition; layout(location = 1) in vec2 aTexCoord; // Outputs al fragment shader out vec2 vTexCoord; out float vFilterWidth; #if defined(CURVATURE) out vec2 vScreenScale; #endif // Uniforms uniform vec2 TextureSize; void main() { #if defined(CURVATURE) vScreenScale = vec2(1.0, 1.0); #endif // Calcula filterWidth dinámicamente basándose en la altura de la textura vFilterWidth = (768.0 / TextureSize.y) / 3.0; // Pasar coordenadas de textura (invertir Y para SDL) vTexCoord = vec2(aTexCoord.x, 1.0 - aTexCoord.y) * 1.0001; // Posición del vértice (ya en espacio de clip [-1, 1]) gl_Position = vec4(aPosition, 0.0, 1.0); }