diff --git a/skeleton/BASE/Shaders/cubic.glsl b/skeleton/BASE/Shaders/cubic.glsl deleted file mode 100644 index d7b90959a..000000000 --- a/skeleton/BASE/Shaders/cubic.glsl +++ /dev/null @@ -1,137 +0,0 @@ -#version 130 - -#if defined(VERTEX) - -#if __VERSION__ >= 130 -#define COMPAT_VARYING out -#define COMPAT_ATTRIBUTE in -#define COMPAT_TEXTURE texture -#else -#define COMPAT_VARYING varying -#define COMPAT_ATTRIBUTE attribute -#define COMPAT_TEXTURE texture2D -#endif - -#ifdef GL_ES -#define COMPAT_PRECISION mediump -precision COMPAT_PRECISION float; -#else -#define COMPAT_PRECISION -#endif - -COMPAT_ATTRIBUTE vec4 VertexCoord; -COMPAT_ATTRIBUTE vec4 COLOR; -COMPAT_ATTRIBUTE vec4 TexCoord; -COMPAT_VARYING vec4 COL0; -COMPAT_VARYING vec4 TEX0; - -uniform mat4 MVPMatrix; -uniform COMPAT_PRECISION int FrameDirection; -uniform COMPAT_PRECISION int FrameCount; -uniform COMPAT_PRECISION vec2 OutputSize; -uniform COMPAT_PRECISION vec2 TextureSize; -uniform COMPAT_PRECISION vec2 InputSize; - -void main() -{ - gl_Position = MVPMatrix * VertexCoord; - COL0 = COLOR; - TEX0.xy = TexCoord.xy; -} - -#elif defined(FRAGMENT) - -#if __VERSION__ >= 130 -#define COMPAT_VARYING in -#define COMPAT_TEXTURE texture -out vec4 FragColor; -#else -#define COMPAT_VARYING varying -#define FragColor gl_FragColor -#define COMPAT_TEXTURE texture2D -#endif - -#ifdef GL_ES -#ifdef GL_FRAGMENT_PRECISION_HIGH -precision highp float; -#else -precision mediump float; -#endif -#define COMPAT_PRECISION mediump -#else -#define COMPAT_PRECISION -#endif - -uniform COMPAT_PRECISION int FrameDirection; -uniform COMPAT_PRECISION int FrameCount; -uniform COMPAT_PRECISION vec2 OutputSize; -uniform COMPAT_PRECISION vec2 TextureSize; -uniform COMPAT_PRECISION vec2 InputSize; -uniform sampler2D Texture; -COMPAT_VARYING vec4 TEX0; - -// compatibility #defines -#define Source Texture -#define vTexCoord TEX0.xy - -#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize -#define outsize vec4(OutputSize, 1.0 / OutputSize) - -void weights(out vec4 x, out vec4 y, vec2 t) -{ - vec2 t2 = t * t; - vec2 t3 = t2 * t; - - vec4 xs = vec4(1.0, t.x, t2.x, t3.x); - vec4 ys = vec4(1.0, t.y, t2.y, t3.y); - - const vec4 p0 = vec4(+0.0, -0.5, +1.0, -0.5); - const vec4 p1 = vec4(+1.0, 0.0, -2.5, +1.5); - const vec4 p2 = vec4(+0.0, +0.5, +2.0, -1.5); - const vec4 p3 = vec4(+0.0, 0.0, -0.5, +0.5); - - x = vec4(dot(xs, p0), dot(xs, p1), dot(xs, p2), dot(xs, p3)); - y = vec4(dot(ys, p0), dot(ys, p1), dot(ys, p2), dot(ys, p3)); -} - -void main() -{ - vec2 uv = vTexCoord * SourceSize.xy - 0.5; - vec2 texel = floor(uv); - vec2 tex = (texel + 0.5) * SourceSize.zw; - vec2 phase = uv - texel; - -#define TEX(x, y) textureLodOffset(Source, tex, 0.0, ivec2(x, y)).rgb - - vec4 x; - vec4 y; - weights(x, y, phase); - - vec3 color; - vec4 row = x * y.x; - color = TEX(-1, -1) * row.x; - color += TEX(+0, -1) * row.y; - color += TEX(+1, -1) * row.z; - color += TEX(+2, -1) * row.w; - - row = x * y.y; - color += TEX(-1, +0) * row.x; - color += TEX(+0, +0) * row.y; - color += TEX(+1, +0) * row.z; - color += TEX(+2, +0) * row.w; - - row = x * y.z; - color += TEX(-1, +1) * row.x; - color += TEX(+0, +1) * row.y; - color += TEX(+1, +1) * row.z; - color += TEX(+2, +1) * row.w; - - row = x * y.w; - color += TEX(-1, +2) * row.x; - color += TEX(+0, +2) * row.y; - color += TEX(+1, +2) * row.z; - color += TEX(+2, +2) * row.w; - - FragColor = vec4(color, 1.0); -} -#endif diff --git a/skeleton/BASE/Shaders/aa-shader-4.0.glsl b/skeleton/BASE/Shaders/glsl/aa-shader-4.0.glsl similarity index 100% rename from skeleton/BASE/Shaders/aa-shader-4.0.glsl rename to skeleton/BASE/Shaders/glsl/aa-shader-4.0.glsl diff --git a/skeleton/BASE/Shaders/barrel-distortion.glsl b/skeleton/BASE/Shaders/glsl/barrel-distortion.glsl similarity index 100% rename from skeleton/BASE/Shaders/barrel-distortion.glsl rename to skeleton/BASE/Shaders/glsl/barrel-distortion.glsl diff --git a/skeleton/BASE/Shaders/bicubic.glsl b/skeleton/BASE/Shaders/glsl/bicubic.glsl similarity index 100% rename from skeleton/BASE/Shaders/bicubic.glsl rename to skeleton/BASE/Shaders/glsl/bicubic.glsl diff --git a/skeleton/BASE/Shaders/edge1pixel.glsl b/skeleton/BASE/Shaders/glsl/edge1pixel.glsl similarity index 100% rename from skeleton/BASE/Shaders/edge1pixel.glsl rename to skeleton/BASE/Shaders/glsl/edge1pixel.glsl diff --git a/skeleton/BASE/Shaders/fast-sharpen.glsl b/skeleton/BASE/Shaders/glsl/fast-sharpen.glsl similarity index 100% rename from skeleton/BASE/Shaders/fast-sharpen.glsl rename to skeleton/BASE/Shaders/glsl/fast-sharpen.glsl diff --git a/skeleton/BASE/Shaders/lcd3x.glsl b/skeleton/BASE/Shaders/glsl/lcd3x.glsl similarity index 100% rename from skeleton/BASE/Shaders/lcd3x.glsl rename to skeleton/BASE/Shaders/glsl/lcd3x.glsl diff --git a/skeleton/BASE/Shaders/pixel_art_AA.glsl b/skeleton/BASE/Shaders/glsl/pixel_art_AA.glsl similarity index 100% rename from skeleton/BASE/Shaders/pixel_art_AA.glsl rename to skeleton/BASE/Shaders/glsl/pixel_art_AA.glsl diff --git a/skeleton/BASE/Shaders/pixellate.glsl b/skeleton/BASE/Shaders/glsl/pixellate.glsl similarity index 100% rename from skeleton/BASE/Shaders/pixellate.glsl rename to skeleton/BASE/Shaders/glsl/pixellate.glsl diff --git a/skeleton/BASE/Shaders/glsl/res-independent-scanlines.glsl b/skeleton/BASE/Shaders/glsl/res-independent-scanlines.glsl new file mode 100644 index 000000000..49dc269d3 --- /dev/null +++ b/skeleton/BASE/Shaders/glsl/res-independent-scanlines.glsl @@ -0,0 +1,138 @@ +/* + Resolution-Independent Scanlines + based on + Scanlines Sine Absolute Value + An ultra light scanline shader + by RiskyJumps + license: public domain +*/ + +#pragma parameter amp "Amplitude" 1.2500 0.000 2.000 0.05 +#pragma parameter phase "Phase" 0.5000 0.000 2.000 0.05 +#pragma parameter lines_black "Lines Blacks" 0.0000 0.000 1.000 0.05 +#pragma parameter lines_white "Lines Whites" 1.0000 0.000 2.000 0.05 +#pragma parameter imageSize "Simulated Image Height" 224.0 144.0 288.0 1.0 +#pragma parameter autoscale "Automatic Scale" 0.0 0.0 1.0 1.0 + +#define freq 0.500000 +#define offset 0.000000 +#define pi 3.141592654 + +#if defined(VERTEX) + +#if __VERSION__ >= 130 +#define COMPAT_VARYING out +#define COMPAT_ATTRIBUTE in +#define COMPAT_TEXTURE texture +#else +#define COMPAT_VARYING varying +#define COMPAT_ATTRIBUTE attribute +#define COMPAT_TEXTURE texture2D +#endif + +#ifdef GL_ES +#define COMPAT_PRECISION mediump +#else +#define COMPAT_PRECISION +#endif + +COMPAT_ATTRIBUTE vec4 VertexCoord; +COMPAT_ATTRIBUTE vec4 TexCoord; +COMPAT_VARYING vec4 TEX0; +COMPAT_VARYING float omega; + +uniform mat4 MVPMatrix; +uniform COMPAT_PRECISION int FrameDirection; +uniform COMPAT_PRECISION int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; + +// compatibility #defines +#define vTexCoord TEX0.xy +#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize +#define OutSize vec4(OutputSize, 1.0 / OutputSize) + +#define pi 3.141592654 + +void main() +{ + gl_Position = MVPMatrix * VertexCoord; + TEX0.xy = TexCoord.xy; + omega = 2.0 * pi * freq; // Angular frequency +} + +#elif defined(FRAGMENT) + +#ifdef GL_ES +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif +#define COMPAT_PRECISION mediump +#else +#define COMPAT_PRECISION +#endif + +#if __VERSION__ >= 130 +#define COMPAT_VARYING in +#define COMPAT_TEXTURE texture +out COMPAT_PRECISION vec4 FragColor; +#else +#define COMPAT_VARYING varying +#define FragColor gl_FragColor +#define COMPAT_TEXTURE texture2D +#endif + +uniform COMPAT_PRECISION int FrameDirection; +uniform COMPAT_PRECISION int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; +uniform sampler2D Texture; +COMPAT_VARYING vec4 TEX0; +COMPAT_VARYING float omega; + +// compatibility #defines +#define Source Texture +#define vTexCoord TEX0.xy + +#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize +#define OutSize vec4(OutputSize, 1.0 / OutputSize) + + +#ifdef PARAMETER_UNIFORM +uniform COMPAT_PRECISION float amp, phase, lines_black, lines_white, + imageSize, autoscale; +#else +#define amp 1.25 +#define phase 0.5 +#define lines_black 0.0 +#define lines_white 1.0 +#define imageSize 224.0 +#define autoscale 0.0 + +#endif + +void main() +{ + float scale = imageSize; if (autoscale == 1.0) scale = InputSize.y; + float angle = (gl_FragCoord.y * OutSize.w) * omega * scale + phase; + vec3 color = COMPAT_TEXTURE(Source, vTexCoord).xyz; + float grid; + + float lines; + + lines = sin(angle); + lines *= amp; + lines += offset; + lines = abs(lines); + lines *= lines_white - lines_black; + lines += lines_black; + color *= lines; + + FragColor = vec4(color.xyz, 1.0); +} + +#endif diff --git a/skeleton/BASE/Shaders/retro-v2.glsl b/skeleton/BASE/Shaders/glsl/retro-v2.glsl similarity index 100% rename from skeleton/BASE/Shaders/retro-v2.glsl rename to skeleton/BASE/Shaders/glsl/retro-v2.glsl diff --git a/skeleton/BASE/Shaders/scale3x.glsl b/skeleton/BASE/Shaders/glsl/scale3x.glsl similarity index 100% rename from skeleton/BASE/Shaders/scale3x.glsl rename to skeleton/BASE/Shaders/glsl/scale3x.glsl diff --git a/skeleton/BASE/Shaders/scanline.glsl b/skeleton/BASE/Shaders/glsl/scanline.glsl similarity index 100% rename from skeleton/BASE/Shaders/scanline.glsl rename to skeleton/BASE/Shaders/glsl/scanline.glsl diff --git a/skeleton/BASE/Shaders/sharp-bilinear.glsl b/skeleton/BASE/Shaders/glsl/sharp-bilinear.glsl similarity index 100% rename from skeleton/BASE/Shaders/sharp-bilinear.glsl rename to skeleton/BASE/Shaders/glsl/sharp-bilinear.glsl diff --git a/skeleton/BASE/Shaders/sharp-shimmerless-grid.glsl b/skeleton/BASE/Shaders/glsl/sharp-shimmerless-grid.glsl similarity index 100% rename from skeleton/BASE/Shaders/sharp-shimmerless-grid.glsl rename to skeleton/BASE/Shaders/glsl/sharp-shimmerless-grid.glsl diff --git a/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-vrgb.glsl b/skeleton/BASE/Shaders/glsl/sharp-shimmerless-subpixel-vrgb.glsl similarity index 100% rename from skeleton/BASE/Shaders/sharp-shimmerless-subpixel-vrgb.glsl rename to skeleton/BASE/Shaders/glsl/sharp-shimmerless-subpixel-vrgb.glsl diff --git a/skeleton/BASE/Shaders/sharp-shimmerless.glsl b/skeleton/BASE/Shaders/glsl/sharp-shimmerless.glsl similarity index 100% rename from skeleton/BASE/Shaders/sharp-shimmerless.glsl rename to skeleton/BASE/Shaders/glsl/sharp-shimmerless.glsl diff --git a/skeleton/BASE/Shaders/stock.glsl b/skeleton/BASE/Shaders/glsl/stock.glsl similarity index 100% rename from skeleton/BASE/Shaders/stock.glsl rename to skeleton/BASE/Shaders/glsl/stock.glsl diff --git a/skeleton/BASE/Shaders/waterpaint.glsl b/skeleton/BASE/Shaders/glsl/waterpaint.glsl similarity index 100% rename from skeleton/BASE/Shaders/waterpaint.glsl rename to skeleton/BASE/Shaders/glsl/waterpaint.glsl diff --git a/skeleton/BASE/Shaders/old-tv.cfg b/skeleton/BASE/Shaders/old-tv.cfg new file mode 100644 index 000000000..d45161660 --- /dev/null +++ b/skeleton/BASE/Shaders/old-tv.cfg @@ -0,0 +1,11 @@ +minarch_nrofshaders = 2 +minarch_shader1 = barrel-distortion.glsl +minarch_shader1_filter = NEAREST +minarch_shader1_srctype = source +minarch_shader1_scaletype = source +minarch_shader1_upscale = screen +minarch_shader2 = res-independent-scanlines.glsl +minarch_shader2_filter = NEAREST +minarch_shader2_srctype = source +minarch_shader2_scaletype = source +minarch_shader2_upscale = screen \ No newline at end of file diff --git a/skeleton/BASE/Shaders/pixelperfect-sharp.cfg b/skeleton/BASE/Shaders/pixelperfect-sharp.cfg new file mode 100644 index 000000000..366f16c28 --- /dev/null +++ b/skeleton/BASE/Shaders/pixelperfect-sharp.cfg @@ -0,0 +1,7 @@ +minarch_nrofshaders = 1 +minarch_shader1 = pixellate.glsl +minarch_shader1_filter = NEAREST +minarch_shader1_srctype = source +minarch_shader1_scaletype = source +minarch_shader1_upscale = screen +minarch_scale_filter = NEAREST \ No newline at end of file diff --git a/skeleton/BASE/Shaders/pixelperfect-smooth.cfg b/skeleton/BASE/Shaders/pixelperfect-smooth.cfg new file mode 100644 index 000000000..d1ea27e88 --- /dev/null +++ b/skeleton/BASE/Shaders/pixelperfect-smooth.cfg @@ -0,0 +1,7 @@ +minarch_nrofshaders = 1 +minarch_shader1 = stock.glsl +minarch_shader1_filter = NEAREST +minarch_shader1_srctype = source +minarch_shader1_scaletype = source +minarch_shader1_upscale = 3 +minarch_scale_filter = LINEAR \ No newline at end of file diff --git a/skeleton/BASE/Shaders/real-gameboy.cfg b/skeleton/BASE/Shaders/real-gameboy.cfg new file mode 100644 index 000000000..7bdac9a3f --- /dev/null +++ b/skeleton/BASE/Shaders/real-gameboy.cfg @@ -0,0 +1,16 @@ +minarch_nrofshaders = 2 +minarch_shader1 = pixellate.glsl +minarch_shader1_filter = NEAREST +minarch_shader1_srctype = source +minarch_shader1_scaletype = source +minarch_shader1_upscale = screen +minarch_shader2 = lcd3x.glsl +minarch_shader2_filter = NEAREST +minarch_shader2_srctype = source +minarch_shader2_scaletype = source +minarch_shader2_upscale = screen +minarch_scale_filter = NEAREST +gambatte_gb_palette_twb64_2 = TWB64 163 - Classic LCD +gambatte_gb_colorization = internal +gambatte_gbc_color_correction = always +gambatte_gbc_color_correction_mode = accurate \ No newline at end of file diff --git a/skeleton/BASE/Shaders/real-gba.cfg b/skeleton/BASE/Shaders/real-gba.cfg new file mode 100644 index 000000000..eebddbeb2 --- /dev/null +++ b/skeleton/BASE/Shaders/real-gba.cfg @@ -0,0 +1,12 @@ +minarch_nrofshaders = 2 +minarch_shader1 = pixellate.glsl +minarch_shader1_filter = NEAREST +minarch_shader1_srctype = source +minarch_shader1_scaletype = source +minarch_shader1_upscale = screen +minarch_shader2 = lcd3x.glsl +minarch_shader2_filter = NEAREST +minarch_shader2_srctype = source +minarch_shader2_scaletype = source +minarch_shader2_upscale = screen +minarch_scale_filter = NEAREST \ No newline at end of file diff --git a/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-bgr.glsl b/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-bgr.glsl deleted file mode 100644 index 9ddd5ddcf..000000000 --- a/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-bgr.glsl +++ /dev/null @@ -1,107 +0,0 @@ -/* - * sharp-shimmerless-vrgb - * Author: zadpos - * License: Public domain - * - * Sharp-Shimmerless shader for v-RGB subpixels - */ - -#if defined(VERTEX) - -#if __VERSION__ >= 130 -#define COMPAT_VARYING out -#define COMPAT_ATTRIBUTE in -#define COMPAT_TEXTURE texture -#else -#define COMPAT_VARYING varying -#define COMPAT_ATTRIBUTE attribute -#define COMPAT_TEXTURE texture2D -#endif - -#ifdef GL_ES -#define COMPAT_PRECISION mediump -#else -#define COMPAT_PRECISION -#endif - -COMPAT_ATTRIBUTE vec4 VertexCoord; -COMPAT_ATTRIBUTE vec4 COLOR; -COMPAT_ATTRIBUTE vec4 TexCoord; -COMPAT_VARYING vec4 pixel; -COMPAT_VARYING vec4 scale; -COMPAT_VARYING vec4 invscale; - -uniform mat4 MVPMatrix; -uniform COMPAT_PRECISION int FrameDirection; -uniform COMPAT_PRECISION int FrameCount; -uniform COMPAT_PRECISION vec2 OutputSize; -uniform COMPAT_PRECISION vec2 TextureSize; -uniform COMPAT_PRECISION vec2 InputSize; - -void main() -{ - gl_Position = MVPMatrix * VertexCoord; - - vec2 pixel_xy = TexCoord.xy * OutputSize * TextureSize / InputSize; - vec2 scale_xy = OutputSize / InputSize; - vec2 invscale_xy = InputSize / OutputSize; - - pixel = pixel_xy.xxxy; - scale = scale_xy.xxxy; - invscale = invscale_xy.xxxy; -} - -#elif defined(FRAGMENT) - -#if __VERSION__ >= 130 -#define COMPAT_VARYING in -#define COMPAT_TEXTURE texture -out vec4 FragColor; -#else -#define COMPAT_VARYING varying -#define FragColor gl_FragColor -#define COMPAT_TEXTURE texture2D -#endif - -#ifdef GL_ES -#ifdef GL_FRAGMENT_PRECISION_HIGH -precision highp float; -#else -precision mediump float; -#endif -#define COMPAT_PRECISION mediump -#else -#define COMPAT_PRECISION -#endif - -uniform COMPAT_PRECISION int FrameDirection; -uniform COMPAT_PRECISION int FrameCount; -uniform COMPAT_PRECISION vec2 OutputSize; -uniform COMPAT_PRECISION vec2 TextureSize; -uniform COMPAT_PRECISION vec2 InputSize; -uniform sampler2D Texture; -COMPAT_VARYING vec4 pixel; -COMPAT_VARYING vec4 scale; -COMPAT_VARYING vec4 invscale; - -void main() -{ - vec4 pixel_tl = floor(pixel); - pixel_tl.y -= 0.33; - pixel_tl.w += 0.33; - vec4 pixel_br = ceil(pixel); - pixel_br.y -= 0.33; - pixel_br.w += 0.33; - - vec4 texel_tl = floor(invscale * pixel_tl); - vec4 texel_br = floor(invscale * pixel_br); - - vec4 mod_texel = texel_br + vec4(0.5, 0.5, 0.5, 0.5); - mod_texel -= (vec4(1.0, 1.0, 1.0, 1.0) - step(texel_br, texel_tl)) * (scale * texel_br - pixel_tl); - - FragColor.b = COMPAT_TEXTURE(Texture, mod_texel.xw / TextureSize).b; - FragColor.g = COMPAT_TEXTURE(Texture, mod_texel.yw / TextureSize).g; - FragColor.r = COMPAT_TEXTURE(Texture, mod_texel.zw / TextureSize).r; - FragColor.a = 1.0; -} -#endif diff --git a/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-rgb.glsl b/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-rgb.glsl deleted file mode 100644 index fa73e38ad..000000000 --- a/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-rgb.glsl +++ /dev/null @@ -1,107 +0,0 @@ -/* - * sharp-shimmerless-vrgb - * Author: zadpos - * License: Public domain - * - * Sharp-Shimmerless shader for v-RGB subpixels - */ - -#if defined(VERTEX) - -#if __VERSION__ >= 130 -#define COMPAT_VARYING out -#define COMPAT_ATTRIBUTE in -#define COMPAT_TEXTURE texture -#else -#define COMPAT_VARYING varying -#define COMPAT_ATTRIBUTE attribute -#define COMPAT_TEXTURE texture2D -#endif - -#ifdef GL_ES -#define COMPAT_PRECISION mediump -#else -#define COMPAT_PRECISION -#endif - -COMPAT_ATTRIBUTE vec4 VertexCoord; -COMPAT_ATTRIBUTE vec4 COLOR; -COMPAT_ATTRIBUTE vec4 TexCoord; -COMPAT_VARYING vec4 pixel; -COMPAT_VARYING vec4 scale; -COMPAT_VARYING vec4 invscale; - -uniform mat4 MVPMatrix; -uniform COMPAT_PRECISION int FrameDirection; -uniform COMPAT_PRECISION int FrameCount; -uniform COMPAT_PRECISION vec2 OutputSize; -uniform COMPAT_PRECISION vec2 TextureSize; -uniform COMPAT_PRECISION vec2 InputSize; - -void main() -{ - gl_Position = MVPMatrix * VertexCoord; - - vec2 pixel_xy = TexCoord.xy * OutputSize * TextureSize / InputSize; - vec2 scale_xy = OutputSize / InputSize; - vec2 invscale_xy = InputSize / OutputSize; - - pixel = pixel_xy.xxxy; - scale = scale_xy.xxxy; - invscale = invscale_xy.xxxy; -} - -#elif defined(FRAGMENT) - -#if __VERSION__ >= 130 -#define COMPAT_VARYING in -#define COMPAT_TEXTURE texture -out vec4 FragColor; -#else -#define COMPAT_VARYING varying -#define FragColor gl_FragColor -#define COMPAT_TEXTURE texture2D -#endif - -#ifdef GL_ES -#ifdef GL_FRAGMENT_PRECISION_HIGH -precision highp float; -#else -precision mediump float; -#endif -#define COMPAT_PRECISION mediump -#else -#define COMPAT_PRECISION -#endif - -uniform COMPAT_PRECISION int FrameDirection; -uniform COMPAT_PRECISION int FrameCount; -uniform COMPAT_PRECISION vec2 OutputSize; -uniform COMPAT_PRECISION vec2 TextureSize; -uniform COMPAT_PRECISION vec2 InputSize; -uniform sampler2D Texture; -COMPAT_VARYING vec4 pixel; -COMPAT_VARYING vec4 scale; -COMPAT_VARYING vec4 invscale; - -void main() -{ - vec4 pixel_tl = floor(pixel); - pixel_tl.y -= 0.33; - pixel_tl.w += 0.33; - vec4 pixel_br = ceil(pixel); - pixel_br.y -= 0.33; - pixel_br.w += 0.33; - - vec4 texel_tl = floor(invscale * pixel_tl); - vec4 texel_br = floor(invscale * pixel_br); - - vec4 mod_texel = texel_br + vec4(0.5, 0.5, 0.5, 0.5); - mod_texel -= (vec4(1.0, 1.0, 1.0, 1.0) - step(texel_br, texel_tl)) * (scale * texel_br - pixel_tl); - - FragColor.r = COMPAT_TEXTURE(Texture, mod_texel.xw / TextureSize).r; - FragColor.g = COMPAT_TEXTURE(Texture, mod_texel.yw / TextureSize).g; - FragColor.b = COMPAT_TEXTURE(Texture, mod_texel.zw / TextureSize).b; - FragColor.a = 1.0; -} -#endif diff --git a/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-vbgr.glsl b/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-vbgr.glsl deleted file mode 100644 index c4a073ef9..000000000 --- a/skeleton/BASE/Shaders/sharp-shimmerless-subpixel-vbgr.glsl +++ /dev/null @@ -1,107 +0,0 @@ -/* - * sharp-shimmerless-vrgb - * Author: zadpos - * License: Public domain - * - * Sharp-Shimmerless shader for v-RGB subpixels - */ - -#if defined(VERTEX) - -#if __VERSION__ >= 130 -#define COMPAT_VARYING out -#define COMPAT_ATTRIBUTE in -#define COMPAT_TEXTURE texture -#else -#define COMPAT_VARYING varying -#define COMPAT_ATTRIBUTE attribute -#define COMPAT_TEXTURE texture2D -#endif - -#ifdef GL_ES -#define COMPAT_PRECISION mediump -#else -#define COMPAT_PRECISION -#endif - -COMPAT_ATTRIBUTE vec4 VertexCoord; -COMPAT_ATTRIBUTE vec4 COLOR; -COMPAT_ATTRIBUTE vec4 TexCoord; -COMPAT_VARYING vec4 pixel; -COMPAT_VARYING vec4 scale; -COMPAT_VARYING vec4 invscale; - -uniform mat4 MVPMatrix; -uniform COMPAT_PRECISION int FrameDirection; -uniform COMPAT_PRECISION int FrameCount; -uniform COMPAT_PRECISION vec2 OutputSize; -uniform COMPAT_PRECISION vec2 TextureSize; -uniform COMPAT_PRECISION vec2 InputSize; - -void main() -{ - gl_Position = MVPMatrix * VertexCoord; - - vec2 pixel_xy = TexCoord.xy * OutputSize * TextureSize / InputSize; - vec2 scale_xy = OutputSize / InputSize; - vec2 invscale_xy = InputSize / OutputSize; - - pixel = pixel_xy.xyyy; - scale = scale_xy.xyyy; - invscale = invscale_xy.xyyy; -} - -#elif defined(FRAGMENT) - -#if __VERSION__ >= 130 -#define COMPAT_VARYING in -#define COMPAT_TEXTURE texture -out vec4 FragColor; -#else -#define COMPAT_VARYING varying -#define FragColor gl_FragColor -#define COMPAT_TEXTURE texture2D -#endif - -#ifdef GL_ES -#ifdef GL_FRAGMENT_PRECISION_HIGH -precision highp float; -#else -precision mediump float; -#endif -#define COMPAT_PRECISION mediump -#else -#define COMPAT_PRECISION -#endif - -uniform COMPAT_PRECISION int FrameDirection; -uniform COMPAT_PRECISION int FrameCount; -uniform COMPAT_PRECISION vec2 OutputSize; -uniform COMPAT_PRECISION vec2 TextureSize; -uniform COMPAT_PRECISION vec2 InputSize; -uniform sampler2D Texture; -COMPAT_VARYING vec4 pixel; -COMPAT_VARYING vec4 scale; -COMPAT_VARYING vec4 invscale; - -void main() -{ - vec4 pixel_tl = floor(pixel); - pixel_tl.y -= 0.33; - pixel_tl.w += 0.33; - vec4 pixel_br = ceil(pixel); - pixel_br.y -= 0.33; - pixel_br.w += 0.33; - - vec4 texel_tl = floor(invscale * pixel_tl); - vec4 texel_br = floor(invscale * pixel_br); - - vec4 mod_texel = texel_br + vec4(0.5, 0.5, 0.5, 0.5); - mod_texel -= (vec4(1.0, 1.0, 1.0, 1.0) - step(texel_br, texel_tl)) * (scale * texel_br - pixel_tl); - - FragColor.b = COMPAT_TEXTURE(Texture, mod_texel.xy / TextureSize).b; - FragColor.g = COMPAT_TEXTURE(Texture, mod_texel.xz / TextureSize).g; - FragColor.r = COMPAT_TEXTURE(Texture, mod_texel.xw / TextureSize).r; - FragColor.a = 1.0; -} -#endif diff --git a/skeleton/SYSTEM/tg5040/shaders/pixellate.glsl b/skeleton/SYSTEM/tg5040/shaders/pixellate.glsl new file mode 100644 index 000000000..aa248462f --- /dev/null +++ b/skeleton/SYSTEM/tg5040/shaders/pixellate.glsl @@ -0,0 +1,143 @@ +// Pixellate Shader +// Copyright (c) 2011, 2012 Fes +// Permission to use, copy, modify, and/or distribute this software for any +// purpose with or without fee is hereby granted, provided that the above +// copyright notice and this permission notice appear in all copies. +// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +// SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +// IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +// (Fes gave their permission to have this shader distributed under this +// licence in this forum post: +// http://board.byuu.org/viewtopic.php?p=57295#p57295 + +// Parameter lines go here: +#pragma parameter INTERPOLATE_IN_LINEAR_GAMMA "Linear Gamma Weight" 1.0 0.0 1.0 1.0 + +#if defined(VERTEX) + +#if __VERSION__ >= 130 +#define COMPAT_VARYING out +#define COMPAT_ATTRIBUTE in +#define COMPAT_TEXTURE texture +#else +#define COMPAT_VARYING varying +#define COMPAT_ATTRIBUTE attribute +#define COMPAT_TEXTURE texture2D +#endif + +#ifdef GL_ES +#define COMPAT_PRECISION mediump +#else +#define COMPAT_PRECISION +#endif + +COMPAT_ATTRIBUTE vec4 VertexCoord; +COMPAT_ATTRIBUTE vec4 COLOR; +COMPAT_ATTRIBUTE vec4 TexCoord; +COMPAT_VARYING vec4 COL0; +COMPAT_VARYING vec4 TEX0; + +uniform mat4 MVPMatrix; +uniform COMPAT_PRECISION int FrameDirection; +uniform COMPAT_PRECISION int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; + +// vertex compatibility #defines +#define vTexCoord TEX0.xy +#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize +#define outsize vec4(OutputSize, 1.0 / OutputSize) + +void main() +{ + gl_Position = MVPMatrix * VertexCoord; + COL0 = COLOR; + TEX0.xy = TexCoord.xy; +} + +#elif defined(FRAGMENT) + +#if __VERSION__ >= 130 +#define COMPAT_VARYING in +#define COMPAT_TEXTURE texture +out vec4 FragColor; +#else +#define COMPAT_VARYING varying +#define FragColor gl_FragColor +#define COMPAT_TEXTURE texture2D +#endif + +#ifdef GL_ES +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif +#define COMPAT_PRECISION highp +#else +#define COMPAT_PRECISION +#endif + +uniform COMPAT_PRECISION int FrameDirection; +uniform COMPAT_PRECISION int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; +uniform sampler2D Texture; +COMPAT_VARYING vec4 TEX0; + +// fragment compatibility #defines +#define Source Texture +#define vTexCoord TEX0.xy + +#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize +#define outsize vec4(OutputSize, 1.0 / OutputSize) + +#ifdef PARAMETER_UNIFORM +uniform COMPAT_PRECISION float INTERPOLATE_IN_LINEAR_GAMMA; +#else +#define INTERPOLATE_IN_LINEAR_GAMMA 1.0 +#endif + +void main() +{ + vec2 texelSize = SourceSize.zw; + + vec2 range = vec2(abs(InputSize.x / (outsize.x * SourceSize.x)), abs(InputSize.y / (outsize.y * SourceSize.y))); + range = range / 2.0 * 0.999; + + float left = vTexCoord.x - range.x; + float top = vTexCoord.y + range.y; + float right = vTexCoord.x + range.x; + float bottom = vTexCoord.y - range.y; + + vec3 topLeftColor = COMPAT_TEXTURE(Source, (floor(vec2(left, top) / texelSize) + 0.5) * texelSize).rgb; + vec3 bottomRightColor = COMPAT_TEXTURE(Source, (floor(vec2(right, bottom) / texelSize) + 0.5) * texelSize).rgb; + vec3 bottomLeftColor = COMPAT_TEXTURE(Source, (floor(vec2(left, bottom) / texelSize) + 0.5) * texelSize).rgb; + vec3 topRightColor = COMPAT_TEXTURE(Source, (floor(vec2(right, top) / texelSize) + 0.5) * texelSize).rgb; + + if (INTERPOLATE_IN_LINEAR_GAMMA > 0.5){ + topLeftColor = pow(topLeftColor, vec3(2.2)); + bottomRightColor = pow(bottomRightColor, vec3(2.2)); + bottomLeftColor = pow(bottomLeftColor, vec3(2.2)); + topRightColor = pow(topRightColor, vec3(2.2)); + } + + vec2 border = clamp(floor((vTexCoord / texelSize) + vec2(0.5)) * texelSize, vec2(left, bottom), vec2(right, top)); + + float totalArea = 4.0 * range.x * range.y; + + vec3 averageColor; + averageColor = ((border.x - left) * (top - border.y) / totalArea) * topLeftColor; + averageColor += ((right - border.x) * (border.y - bottom) / totalArea) * bottomRightColor; + averageColor += ((border.x - left) * (border.y - bottom) / totalArea) * bottomLeftColor; + averageColor += ((right - border.x) * (top - border.y) / totalArea) * topRightColor; + + FragColor = (INTERPOLATE_IN_LINEAR_GAMMA > 0.5) ? vec4(pow(averageColor, vec3(1.0 / 2.2)), 1.0) : vec4(averageColor, 1.0); +} +#endif diff --git a/workspace/all/minarch/minarch.c b/workspace/all/minarch/minarch.c index 67de9ac10..5c99c3645 100644 --- a/workspace/all/minarch/minarch.c +++ b/workspace/all/minarch/minarch.c @@ -1199,6 +1199,7 @@ enum { SYNC_SRC_CORE }; enum { + SH_SHADERS_PRESET, SH_NROFSHADERS, SH_SHADER1, SH_SHADER1_FILTER, @@ -1371,6 +1372,7 @@ static struct Config { char* system_cfg; // system.cfg based on system limitations char* default_cfg; // pak.cfg based on platform limitations char* user_cfg; // minarch.cfg or game.cfg based on user preference + char* shaders_preset; // minarch.cfg or game.cfg based on user preference char* device_tag; OptionList frontend; OptionList core; @@ -1460,8 +1462,7 @@ static struct Config { .desc = "LINEAR smooths lines, but works better when final image is at higher resolution, so either core that outputs higher resolution or upscaling with shaders", .default_value = 1, .value = 1, - // .count = 3, - .count = 2, + .count = 3, .values = sharpness_labels, .labels = sharpness_labels, }, @@ -1535,8 +1536,18 @@ static struct Config { }, }, .shaders = { // (OptionList) - .count = 16, + .count = 17, .options = (Option[]){ + [SH_SHADERS_PRESET] = { + .key = "minarch_shaders_preset", + .name = "Preset", + .desc = "Load a premade shaders config", // will call getScreenScalingDesc() + .default_value = 1, + .value = 1, + .count = 0, + .values = NULL, + .labels = NULL, + }, [SH_NROFSHADERS] = { .key = "minarch_nrofshaders", .name = "Number of Shaders", @@ -1765,6 +1776,7 @@ static void setOverclock(int i) { } } static int toggle_thread = 0; +static int shadersreload = 0; static void Config_syncFrontend(char* key, int value) { int i = -1; if (exactMatch(key,config.frontend.options[FE_OPT_SCALING].key)) { @@ -1898,109 +1910,8 @@ char** list_files_in_folder(const char* folderPath, int* fileCount) { } -static void Config_syncShaders(char* key, int value) { - int i = -1; - if (exactMatch(key,config.shaders.options[SH_NROFSHADERS].key)) { - GFX_setShaders(value); - i = SH_NROFSHADERS; - } - if (exactMatch(key, config.shaders.options[SH_SHADER1].key)) { - char** shaderList = config.shaders.options[SH_SHADER1].values; - if (shaderList) { - LOG_info("minarch: updating shader 1 - %i\n",value); - int count = 0; - while (shaderList && shaderList[count]) count++; - if (value >= 0 && value < count) { - GFX_updateShader(0, shaderList[value], NULL, NULL,NULL,NULL); - i = SH_SHADER1; - } - } - } - if (exactMatch(key,config.shaders.options[SH_SHADER1_FILTER].key)) { - GFX_updateShader(0,NULL,NULL,&value,NULL,NULL); - i = SH_SHADER1_FILTER; - } - if (exactMatch(key,config.shaders.options[SH_SRCTYPE1].key)) { - GFX_updateShader(0,NULL,NULL,NULL,NULL,&value); - i = SH_SRCTYPE1; - } - if (exactMatch(key,config.shaders.options[SH_SCALETYPE1].key)) { - GFX_updateShader(0,NULL,NULL,NULL,&value,NULL); - i = SH_SCALETYPE1; - } - if (exactMatch(key,config.shaders.options[SH_UPSCALE1].key)) { - GFX_updateShader(0,NULL,&value,NULL,NULL,NULL); - i = SH_UPSCALE1; - } - if (exactMatch(key, config.shaders.options[SH_SHADER2].key)) { - char** shaderList = config.shaders.options[SH_SHADER2].values; - if (shaderList) { - LOG_info("minarch: updating shader 2 - %i\n",value); - int count = 0; - while (shaderList && shaderList[count]) count++; - if (value >= 0 && value < count) { - GFX_updateShader(1, shaderList[value], NULL, NULL,NULL,NULL); - i = SH_SHADER2; - } - } - } - if (exactMatch(key,config.shaders.options[SH_SHADER2_FILTER].key)) { - GFX_updateShader(1,NULL,NULL,&value,NULL,NULL); - i = SH_SHADER2_FILTER; - } - if (exactMatch(key,config.shaders.options[SH_SRCTYPE2].key)) { - GFX_updateShader(1,NULL,NULL,NULL,NULL,&value); - i = SH_SRCTYPE2; - } - if (exactMatch(key,config.shaders.options[SH_SCALETYPE2].key)) { - GFX_updateShader(1,NULL,NULL,NULL,&value,NULL); - i = SH_SCALETYPE2; - } - if (exactMatch(key,config.shaders.options[SH_UPSCALE2].key)) { - GFX_updateShader(1,NULL,&value,NULL,NULL,NULL); - i = SH_UPSCALE2; - } - if (exactMatch(key, config.shaders.options[SH_SHADER3].key)) { - char** shaderList = config.shaders.options[SH_SHADER3].values; - if (shaderList) { - LOG_info("minarch: updating shader 3 - %i\n",value); - int count = 0; - while (shaderList && shaderList[count]) count++; - if (value >= 0 && value < count) { - GFX_updateShader(2, shaderList[value], NULL, NULL,NULL,NULL); - i = SH_SHADER3; - } - } - } - if (exactMatch(key,config.shaders.options[SH_SHADER3_FILTER].key)) { - GFX_updateShader(2,NULL,NULL,&value,NULL,NULL); - i = SH_SHADER3_FILTER; - } - if (exactMatch(key,config.shaders.options[SH_SRCTYPE3].key)) { - GFX_updateShader(2,NULL,NULL,NULL,NULL,&value); - i = SH_SRCTYPE3; - } - if (exactMatch(key,config.shaders.options[SH_SCALETYPE3].key)) { - GFX_updateShader(2,NULL,NULL,NULL,&value,NULL); - i = SH_SCALETYPE3; - } - if (exactMatch(key,config.shaders.options[SH_UPSCALE3].key)) { - GFX_updateShader(2,NULL,&value,NULL,NULL,NULL); - i = SH_UPSCALE3; - } - - if (i==-1) return; - Option* option = &config.shaders.options[i]; - option->value = value; -} -void initShaders() { - LOG_info("Init shaders\n"); - for (int i=0; config.shaders.options[i].key; i++) { - Option* option = &config.shaders.options[i]; - Config_syncShaders(option->key, option->value); - } -} + static void OptionList_setOptionValue(OptionList* list, const char* key, const char* value); enum { CONFIG_WRITE_ALL, @@ -2079,16 +1990,24 @@ static void Config_init(void) { // populate shader options int filecount; - char** filelist = list_files_in_folder(SHADERS_FOLDER, &filecount); + char** filelist = list_files_in_folder(SHADERS_FOLDER "/glsl", &filecount); + int preset_filecount; + char** preset_filelist = list_files_in_folder(SHADERS_FOLDER, &preset_filecount); + config.shaders.options[SH_SHADER1].values = filelist; config.shaders.options[SH_SHADER2].values = filelist; config.shaders.options[SH_SHADER3].values = filelist; + config.shaders.options[SH_SHADERS_PRESET].values = preset_filelist; + config.shaders.options[SH_SHADER1].labels = filelist; config.shaders.options[SH_SHADER2].labels = filelist; config.shaders.options[SH_SHADER3].labels = filelist; + config.shaders.options[SH_SHADERS_PRESET].labels = preset_filelist; + config.shaders.options[SH_SHADER1].count = filecount; config.shaders.options[SH_SHADER2].count = filecount; config.shaders.options[SH_SHADER3].count = filecount; + config.shaders.options[SH_SHADERS_PRESET].count = preset_filecount; char overlaypath[255]; snprintf(overlaypath, sizeof(overlaypath), "%s/%s", OVERLAYS_FOLDER, core.tag); @@ -2153,6 +2072,7 @@ static void Config_readOptionsString(char* cfg) { for (int i=0; config.shaders.options[i].key; i++) { Option* option = &config.shaders.options[i]; if (!Config_getValue(cfg, option->key, value, &option->lock)) continue; + LOG_info("set value toch %s %s\n",option->key,value); OptionList_setOptionValue(&config.shaders, option->key, value); } } @@ -2243,6 +2163,8 @@ static void Config_load(void) { else if (exists(system_path)) config.system_cfg = allocFile(system_path); else config.system_cfg = NULL; + + // LOG_info("config.system_cfg: %s\n", config.system_cfg); char default_path[MAX_PATH]; @@ -2292,6 +2214,8 @@ static void Config_readOptions(void) { Config_readOptionsString(config.default_cfg); Config_readOptionsString(config.user_cfg); + + // screen_scaling = SCALE_NATIVE; // TODO: tmp } static void Config_readControls(void) { @@ -2406,6 +2330,130 @@ static void Config_restore(void) { renderer.dst_p = 0; } +void readShadersPreset(int i) { + char shaderspath[MAX_PATH] = {0}; + sprintf(shaderspath, SHADERS_FOLDER "/%s", config.shaders.options[SH_SHADERS_PRESET].values[i]); + LOG_info("read shaders preset %s\n",shaderspath); + if (exists(shaderspath)) config.shaders_preset = allocFile(shaderspath); + else config.shaders_preset = NULL; + Config_readOptionsString(config.shaders_preset); +} + +static void Config_syncShaders(char* key, int value) { + int i = -1; + if (exactMatch(key,config.shaders.options[SH_SHADERS_PRESET].key)) { + readShadersPreset(value); + i = SH_SHADERS_PRESET; + } + if (exactMatch(key,config.shaders.options[SH_NROFSHADERS].key)) { + GFX_setShaders(value); + shadersreload = 1; + i = SH_NROFSHADERS; + } + + if (exactMatch(key, config.shaders.options[SH_SHADER1].key)) { + char** shaderList = config.shaders.options[SH_SHADER1].values; + if (shaderList) { + LOG_info("minarch: updating shader 1 - %i\n",value); + int count = 0; + while (shaderList && shaderList[count]) count++; + if (value >= 0 && value < count) { + GFX_updateShader(0, shaderList[value], NULL, NULL,NULL,NULL); + i = SH_SHADER1; + } + } + } + if (exactMatch(key,config.shaders.options[SH_SHADER1_FILTER].key)) { + GFX_updateShader(0,NULL,NULL,&value,NULL,NULL); + i = SH_SHADER1_FILTER; + } + if (exactMatch(key,config.shaders.options[SH_SRCTYPE1].key)) { + GFX_updateShader(0,NULL,NULL,NULL,NULL,&value); + i = SH_SRCTYPE1; + } + if (exactMatch(key,config.shaders.options[SH_SCALETYPE1].key)) { + GFX_updateShader(0,NULL,NULL,NULL,&value,NULL); + i = SH_SCALETYPE1; + } + if (exactMatch(key,config.shaders.options[SH_UPSCALE1].key)) { + GFX_updateShader(0,NULL,&value,NULL,NULL,NULL); + i = SH_UPSCALE1; + } + if (exactMatch(key, config.shaders.options[SH_SHADER2].key)) { + char** shaderList = config.shaders.options[SH_SHADER2].values; + if (shaderList) { + LOG_info("minarch: updating shader 2 - %i\n",value); + int count = 0; + while (shaderList && shaderList[count]) count++; + if (value >= 0 && value < count) { + GFX_updateShader(1, shaderList[value], NULL, NULL,NULL,NULL); + i = SH_SHADER2; + } + } + } + if (exactMatch(key,config.shaders.options[SH_SHADER2_FILTER].key)) { + GFX_updateShader(1,NULL,NULL,&value,NULL,NULL); + i = SH_SHADER2_FILTER; + } + if (exactMatch(key,config.shaders.options[SH_SRCTYPE2].key)) { + GFX_updateShader(1,NULL,NULL,NULL,NULL,&value); + i = SH_SRCTYPE2; + } + if (exactMatch(key,config.shaders.options[SH_SCALETYPE2].key)) { + GFX_updateShader(1,NULL,NULL,NULL,&value,NULL); + i = SH_SCALETYPE2; + } + if (exactMatch(key,config.shaders.options[SH_UPSCALE2].key)) { + GFX_updateShader(1,NULL,&value,NULL,NULL,NULL); + i = SH_UPSCALE2; + } + if (exactMatch(key, config.shaders.options[SH_SHADER3].key)) { + char** shaderList = config.shaders.options[SH_SHADER3].values; + if (shaderList) { + LOG_info("minarch: updating shader 3 - %i\n",value); + int count = 0; + while (shaderList && shaderList[count]) count++; + if (value >= 0 && value < count) { + GFX_updateShader(2, shaderList[value], NULL, NULL,NULL,NULL); + i = SH_SHADER3; + } + } + } + if (exactMatch(key,config.shaders.options[SH_SHADER3_FILTER].key)) { + GFX_updateShader(2,NULL,NULL,&value,NULL,NULL); + i = SH_SHADER3_FILTER; + } + if (exactMatch(key,config.shaders.options[SH_SRCTYPE3].key)) { + GFX_updateShader(2,NULL,NULL,NULL,NULL,&value); + i = SH_SRCTYPE3; + } + if (exactMatch(key,config.shaders.options[SH_SCALETYPE3].key)) { + GFX_updateShader(2,NULL,NULL,NULL,&value,NULL); + i = SH_SCALETYPE3; + } + if (exactMatch(key,config.shaders.options[SH_UPSCALE3].key)) { + GFX_updateShader(2,NULL,&value,NULL,NULL,NULL); + i = SH_UPSCALE3; + } + + if (i==-1) return; + Option* option = &config.shaders.options[i]; + option->value = value; + shadersreload = 1; +} + +//////// + +void initShaders() { + for (int i=0; config.shaders.options[i].key; i++) { + if(i!=SH_SHADERS_PRESET) { + Option* option = &config.shaders.options[i]; + Config_syncShaders(option->key, option->value); + } + } + shadersreload = 0; +} + /////////////////////////////// static struct Special { int palette_updated; @@ -5253,8 +5301,12 @@ static int OptionCheats_openMenu(MenuList* list, int i) { static int OptionShaders_optionChanged(MenuList* list, int i) { MenuItem* item = &list->items[i]; Config_syncShaders(item->key, item->value); - if(i==SH_NROFSHADERS) - initShaders(); + + for (int i = 0; i < config.shaders.count; i++) { + MenuItem* item = &list->items[i]; + item->value = config.shaders.options[i].value; + + } return MENU_CALLBACK_NOP; } @@ -5267,9 +5319,9 @@ static MenuList ShaderOptions_menu = { static int OptionShaders_openMenu(MenuList* list, int i) { LOG_info("OptionShaders_openMenu\n"); - if (ShaderOptions_menu.items == NULL) { + int filecount; - char** filelist = list_files_in_folder(SHADERS_FOLDER, &filecount); + char** filelist = list_files_in_folder(SHADERS_FOLDER "/glsl", &filecount); // Check if folder read failed or no files found if (!filelist || filecount == 0) { @@ -5299,7 +5351,7 @@ static int OptionShaders_openMenu(MenuList* list, int i) { item->values = config.shaders.options[i].values; } } - } + if (ShaderOptions_menu.items[0].name) { Menu_options(&ShaderOptions_menu); @@ -6620,10 +6672,14 @@ int main(int argc , char* argv[]) { if (show_menu) { + Menu_loop(); has_pending_opt_change = config.core.changed; resetFPSCounter(); chooseSyncRef(); + // reload shaders if needed (dont want to always do it as it blacks the screen) + if(shadersreload) + initShaders(); // this is not needed // SND_resetAudio(core.sample_rate, core.fps); } diff --git a/workspace/macos/platform/platform.c b/workspace/macos/platform/platform.c index 78db1aea3..0e0ee123c 100644 --- a/workspace/macos/platform/platform.c +++ b/workspace/macos/platform/platform.c @@ -496,7 +496,7 @@ char* load_shader_source(const char* filename) { GLuint load_shader_from_file(GLenum type, const char* filename, const char* path) { char filepath[256]; - snprintf(filepath, sizeof(filepath), "%s/%s", path,filename); + snprintf(filepath, sizeof(filepath), "%s/glsl/%s", path,filename); char* source = load_shader_source(filepath); if (!source) return 0; diff --git a/workspace/tg5040/platform/platform.c b/workspace/tg5040/platform/platform.c index 2fd21c865..338169e7f 100644 --- a/workspace/tg5040/platform/platform.c +++ b/workspace/tg5040/platform/platform.c @@ -211,7 +211,7 @@ char* load_shader_source(const char* filename) { GLuint load_shader_from_file(GLenum type, const char* filename, const char* path) { char filepath[256]; - snprintf(filepath, sizeof(filepath), "%s/%s", path,filename); + snprintf(filepath, sizeof(filepath), "%s/glsl/%s", path,filename); char* source = load_shader_source(filepath); if (!source) return 0; @@ -735,14 +735,11 @@ SDL_Surface* PLAT_resizeVideo(int w, int h, int p) { void PLAT_setVideoScaleClip(int x, int y, int width, int height) { // buh } - void PLAT_setSharpness(int sharpness) { if(sharpness==1) { - LOG_info("finalScaleFilter set to GL_LINEAR\n"); finalScaleFilter=GL_LINEAR; - } + } else { - LOG_info("finalScaleFilter set to GL_NEAREST\n"); finalScaleFilter = GL_NEAREST; } reloadShaderTextures = 1;