#version 330 core

// 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);
}
