From fa0b02bf66be34d6040b551c821df7417aa38bca Mon Sep 17 00:00:00 2001 From: hunterk Date: Mon, 12 Feb 2018 12:41:33 -0600 Subject: [PATCH] add snes-hires-blend shader --- crt/shaders/snes-hires-blend.slang | 50 ++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 crt/shaders/snes-hires-blend.slang diff --git a/crt/shaders/snes-hires-blend.slang b/crt/shaders/snes-hires-blend.slang new file mode 100644 index 0000000..cea3f31 --- /dev/null +++ b/crt/shaders/snes-hires-blend.slang @@ -0,0 +1,50 @@ +#version 450 + +layout(push_constant) uniform Push +{ + vec4 SourceSize; + vec4 OriginalSize; + vec4 OutputSize; + uint FrameCount; +} params; + +layout(std140, set = 0, binding = 0) uniform UBO +{ + mat4 MVP; +} global; + +#pragma stage vertex +layout(location = 0) in vec4 Position; +layout(location = 1) in vec2 TexCoord; +layout(location = 0) out vec2 vTexCoord; +layout(location = 1) out vec4 t1; + +void main() +{ + gl_Position = global.MVP * Position; + vTexCoord = TexCoord; + vec2 ps = params.SourceSize.zw; + float dx = ps.x; + float dy = ps.y; + t1 = vTexCoord.xxxy + vec4( -dx, 0, dx, 0); // L, C, R +} + +#pragma stage fragment +layout(location = 0) in vec2 vTexCoord; +layout(location = 1) in vec4 t1; +layout(location = 0) out vec4 FragColor; +layout(set = 0, binding = 2) uniform sampler2D Source; + +void main() +{ + // pixel location + float fp = round(fract(0.5*vTexCoord.x*params.SourceSize.x)); + + // reading the texels + vec3 l = texture(Source, t1.xw).xyz; + vec3 c = texture(Source, t1.yw).xyz; + vec3 r = texture(Source, t1.zw).xyz; + + // output + FragColor = vec4((params.SourceSize.x > 500) ? (fp == 0 ? mix(c,r,0.5) : mix(c,l,0.5)) : c, 1.0); +} \ No newline at end of file