SameBoy/Shaders/MasterShader.fsh

65 lines
1.5 KiB
Plaintext
Raw Permalink Normal View History

#version 150
uniform sampler2D image;
2018-06-15 15:08:54 +00:00
uniform sampler2D previous_image;
2020-03-26 18:54:18 +00:00
uniform int frame_blending_mode;
2018-06-15 15:08:54 +00:00
uniform vec2 output_resolution;
uniform vec2 origin;
2018-06-15 16:11:06 +00:00
#define equal(x, y) ((x) == (y))
#define inequal(x, y) ((x) != (y))
#define STATIC
2018-06-15 16:11:06 +00:00
out vec4 frag_color;
#line 1
{filter}
2020-03-26 18:54:18 +00:00
#define BLEND_BIAS (1.0/3.0)
#define DISABLED 0
#define SIMPLE 1
#define ACCURATE 2
#define ACCURATE_EVEN ACCURATE
#define ACCURATE_ODD 3
2018-06-15 15:08:54 +00:00
void main()
{
vec2 position = gl_FragCoord.xy - origin;
position /= output_resolution;
position.y = 1 - position.y;
vec2 input_resolution = textureSize(image, 0);
2020-03-26 18:54:18 +00:00
float ratio;
switch (frame_blending_mode) {
default:
case DISABLED:
frag_color = scale(image, position, input_resolution, output_resolution);
return;
case SIMPLE:
ratio = 0.5;
break;
case ACCURATE_EVEN:
if ((int(position.y * input_resolution.y) & 1) == 0) {
ratio = BLEND_BIAS;
}
else {
ratio = 1 - BLEND_BIAS;
}
break;
case ACCURATE_ODD:
if ((int(position.y * input_resolution.y) & 1) == 0) {
ratio = 1 - BLEND_BIAS;
}
else {
ratio = BLEND_BIAS;
}
break;
}
2020-03-26 18:54:18 +00:00
frag_color = mix(scale(image, position, input_resolution, output_resolution),
scale(previous_image, position, input_resolution, output_resolution), ratio);
2018-06-15 15:08:54 +00:00
}