72 lines
1.9 KiB
GLSL
72 lines
1.9 KiB
GLSL
varying vec2 tex_coord;
|
|
varying vec2 pix_coord;
|
|
|
|
#if defined(VERTEX)
|
|
|
|
void main()
|
|
{
|
|
pix_coord = vec2(gl_MultiTexCoord0.x, 1.0-gl_MultiTexCoord0.y)*1.0001;
|
|
tex_coord = vec2((gl_Vertex.x+1.0)*0.5, (-gl_Vertex.y+1.0)*0.5);
|
|
vec4 pos = vec4(gl_Vertex.x * 2.0, gl_Vertex.y * 2.0, gl_Vertex.z, gl_Vertex.w);
|
|
gl_Position = gl_Vertex;
|
|
}
|
|
|
|
#elif defined(FRAGMENT)
|
|
|
|
uniform sampler2D Texture;
|
|
const vec2 screenRes = vec2(640.0, 480.0);
|
|
|
|
void main()
|
|
{
|
|
vec2 uv = tex_coord;
|
|
|
|
// Curvatura suau de pantalla
|
|
vec2 cc = uv - 0.5;
|
|
float dist = dot(cc, cc);
|
|
uv += cc * dist * 0.05;
|
|
|
|
float x = sign(pix_coord.x)*floor(abs(pix_coord.x)+0.5);
|
|
float column = mod(x,4.0);
|
|
float y = sign(pix_coord.y)*floor(abs(pix_coord.y)+0.5);
|
|
float row = mod(y,4.0);
|
|
|
|
// El que queda fora de la curvatura, es pinta de negre i a aprendre pel cul
|
|
if (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0) {
|
|
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
|
|
return;
|
|
}
|
|
vec4 color = texture2D(Texture, uv);
|
|
|
|
// Scanlines
|
|
//float y = sign(pix_coord.y)*floor(abs(pix_coord.y)*0.5);
|
|
//float row = mod(y,4.0);
|
|
if (row == 2.0) {
|
|
color = color * vec4(0.5, 0.5, 0.5, 1.0);
|
|
} else if (row > 0.0) {
|
|
color = color * vec4(0.8, 0.8, 0.8, 1.0);
|
|
}
|
|
//float scanline = sin(uv.y * screenRes.y * 3.14159265) * 0.15;
|
|
//color.rgb -= scanline;
|
|
|
|
// Máscara de subpixels RGB sutil
|
|
float pixelX = mod(uv.x * screenRes.x, 3.0);
|
|
vec3 mask = vec3(1.0);
|
|
if (pixelX < 1.0) {
|
|
mask = vec3(1.0, 0.85, 0.85);
|
|
} else if (pixelX < 2.0) {
|
|
mask = vec3(0.85, 1.0, 0.85);
|
|
} else {
|
|
mask = vec3(0.85, 0.85, 1.0);
|
|
}
|
|
color.rgb *= mask;
|
|
|
|
// Vignetting per a donar profunditat de tubo CRT
|
|
float vignette = uv.x * uv.y * (1.0 - uv.x) * (1.0 - uv.y);
|
|
vignette = clamp(pow(16.0 * vignette, 0.25), 0.0, 1.0);
|
|
color.rgb *= vignette;
|
|
|
|
gl_FragColor = color;
|
|
}
|
|
|
|
#endif
|