From fd68241afc1ffc15c623ef12aac7bbb06720c9b9 Mon Sep 17 00:00:00 2001 From: rsn8887 Date: Fri, 18 Aug 2017 15:43:50 -0500 Subject: [PATCH] Add files via upload --- .../2x-prescale-sharp-bilinear.glslp | 7 + .../shaders/sharp-bilinear-simple.glsl | 126 ++++++++++++++++++ Copy_To_RetroPie/shaders/stock.glsl | 111 +++++++++++++++ Copy_To_RetroPie/sharp-bilinear-simple.glslp | 4 + 4 files changed, 248 insertions(+) create mode 100644 Copy_To_RetroPie/2x-prescale-sharp-bilinear.glslp create mode 100644 Copy_To_RetroPie/shaders/sharp-bilinear-simple.glsl create mode 100644 Copy_To_RetroPie/shaders/stock.glsl create mode 100644 Copy_To_RetroPie/sharp-bilinear-simple.glslp diff --git a/Copy_To_RetroPie/2x-prescale-sharp-bilinear.glslp b/Copy_To_RetroPie/2x-prescale-sharp-bilinear.glslp new file mode 100644 index 0000000..54a3b71 --- /dev/null +++ b/Copy_To_RetroPie/2x-prescale-sharp-bilinear.glslp @@ -0,0 +1,7 @@ +shaders = 2 +shader0 = shaders/stock.glsl +filter_linear0 = false +scale_type0 = source +scale0 = 2.0 +shader1 = shaders/stock.glsl +filter_linear1 = true \ No newline at end of file diff --git a/Copy_To_RetroPie/shaders/sharp-bilinear-simple.glsl b/Copy_To_RetroPie/shaders/sharp-bilinear-simple.glsl new file mode 100644 index 0000000..1d4c945 --- /dev/null +++ b/Copy_To_RetroPie/shaders/sharp-bilinear-simple.glsl @@ -0,0 +1,126 @@ +/* + Author: rsn8887 (based on TheMaister) + License: Public domain + + This is an integer prescale filter that should be combined + with a bilinear hardware filtering (GL_BILINEAR filter or some such) to achieve + a smooth scaling result with minimum blur. This is good for pixelgraphics + that are scaled by non-integer factors. + + The prescale factor and texel coordinates are precalculated + in the vertex shader for speed. +*/ + +#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 int FrameDirection; +uniform 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) + +out VertexData +{ + vec2 texel; + vec2 prescale; +} precalcOut; + +void main() +{ + gl_Position = MVPMatrix * VertexCoord; + COL0 = COLOR; + TEX0.xy = TexCoord.xy; + precalcOut.texel = vTexCoord * SourceSize.xy; + precalcOut.prescale = max(floor(outsize.xy / InputSize.xy), vec2(1.0, 1.0)); +} + +#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 int FrameDirection; +uniform 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 texture(c, d) COMPAT_TEXTURE(c, d) +#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize +#define outsize vec4(OutputSize, 1.0 / OutputSize) + +in VertexData +{ + vec2 texel; + vec2 prescale; +} precalcIn; + + +void main() +{ + vec2 texel_floored = floor(precalcIn.texel); + vec2 s = fract(precalcIn.texel); + vec2 region_range = 0.5 - 0.5 / precalcIn.prescale; + + // Figure out where in the texel to sample to get correct pre-scaled bilinear. + // Uses the hardware bilinear interpolator to avoid having to sample 4 times manually. + + vec2 center_dist = s - 0.5; + vec2 f = (center_dist - clamp(center_dist, -region_range, region_range)) * precalcIn.prescale + 0.5; + + vec2 mod_texel = texel_floored + f; + + FragColor = vec4(texture(Source, mod_texel / SourceSize.xy).rgb, 1.0); +} +#endif diff --git a/Copy_To_RetroPie/shaders/stock.glsl b/Copy_To_RetroPie/shaders/stock.glsl new file mode 100644 index 0000000..9e636f3 --- /dev/null +++ b/Copy_To_RetroPie/shaders/stock.glsl @@ -0,0 +1,111 @@ +// GLSL shader autogenerated by cg2glsl.py. +#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_VARYING float _frame_rotation; +COMPAT_VARYING vec4 _color1; +struct output_dummy { + vec4 _color1; +}; +struct input_dummy { + vec2 _video_size; + vec2 _texture_size; + vec2 _output_dummy_size; + float _frame_count; + float _frame_direction; + float _frame_rotation; +}; +vec4 _oPosition1; +vec4 _r0005; +COMPAT_ATTRIBUTE vec4 VertexCoord; +COMPAT_ATTRIBUTE vec4 COLOR; +COMPAT_ATTRIBUTE vec4 TexCoord; +COMPAT_VARYING vec4 COL0; +COMPAT_VARYING vec4 TEX0; + +uniform mat4 MVPMatrix; +uniform int FrameDirection; +uniform int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; +void main() +{ + vec4 _oColor; + vec2 _otexCoord; + _r0005 = VertexCoord.x*MVPMatrix[0]; + _r0005 = _r0005 + VertexCoord.y*MVPMatrix[1]; + _r0005 = _r0005 + VertexCoord.z*MVPMatrix[2]; + _r0005 = _r0005 + VertexCoord.w*MVPMatrix[3]; + _oPosition1 = _r0005; + _oColor = COLOR; + _otexCoord = TexCoord.xy; + gl_Position = _r0005; + 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 +COMPAT_VARYING float _frame_rotation; +COMPAT_VARYING vec4 _color; +struct output_dummy { + vec4 _color; +}; +struct input_dummy { + vec2 _video_size; + vec2 _texture_size; + vec2 _output_dummy_size; + float _frame_count; + float _frame_direction; + float _frame_rotation; +}; +uniform sampler2D Texture; +COMPAT_VARYING vec4 TEX0; + +uniform int FrameDirection; +uniform int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; +void main() +{ + output_dummy _OUT; + _OUT._color = COMPAT_TEXTURE(Texture, TEX0.xy); + FragColor = _OUT._color; + return; +} +#endif diff --git a/Copy_To_RetroPie/sharp-bilinear-simple.glslp b/Copy_To_RetroPie/sharp-bilinear-simple.glslp new file mode 100644 index 0000000..37be32e --- /dev/null +++ b/Copy_To_RetroPie/sharp-bilinear-simple.glslp @@ -0,0 +1,4 @@ +shaders = 1 + +shader0 = shaders/sharp-bilinear-simple.glsl +filter_linear0 = true \ No newline at end of file