mirror of https://github.com/bsnes-emu/bsnes.git
78 lines
2.0 KiB
GLSL
78 lines
2.0 KiB
GLSL
#version 150
|
|
|
|
////////////////////////////////////////////////////////
|
|
// GTU version 0.40
|
|
// Author: aliaspider - aliaspider@gmail.com
|
|
// License: GPLv3
|
|
////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////
|
|
// SETTINGS
|
|
////////////////////////////////////////////////////////
|
|
|
|
//#define CROP_OVERSCAN
|
|
#define TV_COLOR_LEVELS
|
|
//#define COMPOSITE_CONNECTION
|
|
//#define NO_SCANLINES
|
|
#define TV_HORIZONTAL_RESOLUTION 400.0
|
|
#define TV_VERTICAL_RESOLUTION 300.0
|
|
#define SIGNAL_RESOLUTION 280.0
|
|
#define SIGNAL_RESOLUTION_I 83.0
|
|
#define SIGNAL_RESOLUTION_Q 25.0
|
|
#define TV_DISPLAY_GAMMA 2.4
|
|
#define OUTPUT_DISPLAY_GAMMA 2.2
|
|
|
|
////////////////////////////////////////////////////////
|
|
//
|
|
////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
#define SCANLINE_WIDTH (1.5*sourceSize[0].y/TV_VERTICAL_RESOLUTION)
|
|
|
|
uniform sampler2D source[];
|
|
uniform sampler2D texture[];
|
|
uniform vec4 sourceSize[];
|
|
|
|
in Vertex {
|
|
vec2 texCoord;
|
|
};
|
|
out vec4 fragColor;
|
|
|
|
|
|
#define GAMMAOUT(c0) (pow(c0, vec3(1.0/OUTPUTG2)))
|
|
#define pi 3.14159265358
|
|
#define GAUSS(x,w) ((sqrt(2.0) / (w)) * (exp((-2.0 * pi * (x) * (x)) / ((w) * (w)))))
|
|
#define Y(j) (offset.y-(j))
|
|
#define a(x) abs(x)
|
|
#define d(x,b) (pi*b*min(a(x)+0.5,1.0/b))
|
|
#define e(x,b) (pi*b*min(max(a(x)-0.5,-1.0/b),1.0/b))
|
|
#define STU(x,b) ((d(x,b)+sin(d(x,b))-e(x,b)-sin(e(x,b)))/(2.0*pi))
|
|
|
|
#define SOURCE(j) vec2(texCoord.x,texCoord.y - Y(j)*sourceSize[0].w)
|
|
#define C(j) (texture2D(source[0], SOURCE(j)).xyz)
|
|
|
|
#ifdef NO_SCANLINES
|
|
#define VAL(j) (C(j)*STU(Y(j),(TV_VERTICAL_RESOLUTION*sourceSize[0].w)))
|
|
#else
|
|
#define VAL(j) (C(j)*GAUSS(Y(j),SCANLINE_WIDTH))
|
|
#endif
|
|
|
|
|
|
|
|
void main() {
|
|
|
|
vec2 offset = fract((texCoord.xy * sourceSize[0].xy) - 0.5);
|
|
vec3 tempColor = vec3(0.0);
|
|
|
|
tempColor+=VAL(-3.0);
|
|
tempColor+=VAL(-2.0);
|
|
tempColor+=VAL(-1.0);
|
|
tempColor+=VAL(0.0);
|
|
tempColor+=VAL(1.0);
|
|
tempColor+=VAL(2.0);
|
|
tempColor+=VAL(3.0);
|
|
tempColor+=VAL(4.0);
|
|
|
|
fragColor = vec4(pow(tempColor,vec3(1.0/OUTPUT_DISPLAY_GAMMA)), 1.0);
|
|
} |