feat: collect the epsxe shader packs

This commit is contained in:
Abdessamad Derraz committed 2026-08-11 19:21:00 +02:00
1 parent 4b8d7baac5
commit 2df67ba204
38 files changed
+3010 -3

No files matched your search

@@ -0,0 +1,5 @@
name=5xBR-v3.7c
version=1
license=GPLv2
copyright=Hyllian/Jararaca
filter_linear=0
@@ -0,0 +1,437 @@
/*
Hyllian's 5xBR v3.5a Shader
Copyright (C) 2011 Hyllian/Jararaca - sergiogdb@gmail.com
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoord;
vec4 _ret_0;
vec3 _TMP46;
vec3 _TMP48;
vec3 _TMP50;
vec3 _TMP52;
vec3 _TMP53;
vec3 _TMP51;
vec3 _TMP49;
vec3 _TMP47;
vec4 _TMP39;
vec4 _TMP38;
bvec4 _TMP37;
bvec4 _TMP36;
bvec4 _TMP35;
bvec4 _TMP34;
bvec4 _TMP33;
bvec4 _TMP32;
bvec4 _TMP31;
bvec4 _TMP30;
bvec4 _TMP29;
bvec4 _TMP28;
bvec4 _TMP27;
float _TMP60;
vec4 _TMP20;
vec4 _TMP19;
vec4 _TMP18;
vec4 _TMP17;
vec4 _TMP16;
vec4 _TMP15;
vec4 _TMP14;
vec4 _TMP13;
vec4 _TMP12;
vec4 _TMP11;
vec4 _TMP10;
vec4 _TMP9;
vec4 _TMP8;
vec4 _TMP7;
vec4 _TMP6;
vec4 _TMP5;
vec4 _TMP4;
vec4 _TMP3;
vec4 _TMP2;
vec4 _TMP1;
vec4 _TMP0;
uniform sampler2D Sample;
vec2 _x0074;
vec2 _c0076;
vec2 _c0078;
vec2 _c0080;
vec2 _c0082;
vec2 _c0086;
vec2 _c0088;
vec2 _c0090;
vec2 _c0092;
vec2 _c0094;
vec2 _c0096;
vec2 _c0098;
vec2 _c0100;
vec2 _c0102;
vec2 _c0104;
vec2 _c0106;
vec2 _c0108;
vec2 _c0110;
vec2 _c0112;
vec2 _c0114;
vec2 _c0116;
vec4 _r0118;
vec4 _r0128;
vec4 _r0138;
vec4 _r0148;
vec4 _r0158;
vec4 _r0168;
vec4 _TMP179;
vec4 _a0182;
vec4 _TMP185;
vec4 _a0188;
vec4 _TMP191;
vec4 _a0194;
vec4 _TMP197;
vec4 _a0200;
vec4 _TMP203;
vec4 _a0206;
vec4 _TMP209;
vec4 _a0212;
vec4 _TMP215;
vec4 _a0218;
vec4 _TMP221;
vec4 _a0224;
vec4 _TMP227;
vec4 _a0230;
vec4 _TMP233;
vec4 _a0236;
vec4 _TMP239;
vec4 _a0242;
vec4 _TMP245;
vec4 _a0248;
vec4 _TMP249;
vec4 _a0252;
vec4 _TMP253;
vec4 _a0256;
vec4 _TMP257;
vec4 _a0260;
vec4 _TMP261;
vec4 _a0264;
vec4 _TMP267;
vec4 _a0270;
vec4 _TMP271;
vec4 _a0274;
vec4 _TMP275;
vec4 _a0278;
vec4 _TMP279;
vec4 _a0282;
vec4 _TMP283;
vec4 _a0286;
vec4 _TMP287;
vec4 _a0290;
vec4 _TMP291;
vec4 _a0294;
vec4 _TMP295;
vec4 _a0298;
vec4 _TMP299;
vec4 _a0302;
vec4 _TMP303;
vec4 _a0306;
vec4 _TMP307;
vec4 _a0310;
void main()
{
bvec4 _edr;
bvec4 _edr_left;
bvec4 _edr_up;
bvec4 _px;
bvec4 _interp_restriction_lv1;
bvec4 _interp_restriction_lv2_left;
bvec4 _interp_restriction_lv2_up;
bvec4 _nc;
bvec4 _fx;
bvec4 _fx_left;
bvec4 _fx_up;
vec2 _fp;
vec3 _A2;
vec3 _B2;
vec3 _C;
vec3 _D;
vec3 _E;
vec3 _F;
vec3 _G;
vec3 _H;
vec3 _I;
vec3 _A11;
vec3 _C1;
vec3 _A0;
vec3 _G0;
vec3 _C4;
vec3 _I4;
vec3 _G5;
vec3 _I5;
vec3 _B11;
vec3 _D0;
vec3 _H5;
vec3 _F4;
vec4 _b1;
vec4 _c1;
vec4 _e1;
vec4 _i4;
vec4 _i5;
vec4 _h5;
_x0074 = v_texCoord.xy*vec2( 1.02400000E+003, 5.12000000E+002);
_fp = fract(_x0074);
_c0076 = (v_texCoord.xy - vec2( 9.76562500E-004, 0.00000000E+000)) - vec2( 0.00000000E+000, 1.95312500E-003);
_TMP0 = texture2D(Sample, _c0076);
_A2 = vec3(float(_TMP0.x), float(_TMP0.y), float(_TMP0.z));
_c0078 = v_texCoord.xy - vec2( 0.00000000E+000, 1.95312500E-003);
_TMP1 = texture2D(Sample, _c0078);
_B2 = vec3(float(_TMP1.x), float(_TMP1.y), float(_TMP1.z));
_c0080 = (v_texCoord.xy + vec2( 9.76562500E-004, 0.00000000E+000)) - vec2( 0.00000000E+000, 1.95312500E-003);
_TMP2 = texture2D(Sample, _c0080);
_C = vec3(float(_TMP2.x), float(_TMP2.y), float(_TMP2.z));
_c0082 = v_texCoord.xy - vec2( 9.76562500E-004, 0.00000000E+000);
_TMP3 = texture2D(Sample, _c0082);
_D = vec3(float(_TMP3.x), float(_TMP3.y), float(_TMP3.z));
_TMP4 = texture2D(Sample, v_texCoord.xy);
_E = vec3(float(_TMP4.x), float(_TMP4.y), float(_TMP4.z));
_c0086 = v_texCoord.xy + vec2( 9.76562500E-004, 0.00000000E+000);
_TMP5 = texture2D(Sample, _c0086);
_F = vec3(float(_TMP5.x), float(_TMP5.y), float(_TMP5.z));
_c0088 = (v_texCoord.xy - vec2( 9.76562500E-004, 0.00000000E+000)) + vec2( 0.00000000E+000, 1.95312500E-003);
_TMP6 = texture2D(Sample, _c0088);
_G = vec3(float(_TMP6.x), float(_TMP6.y), float(_TMP6.z));
_c0090 = v_texCoord.xy + vec2( 0.00000000E+000, 1.95312500E-003);
_TMP7 = texture2D(Sample, _c0090);
_H = vec3(float(_TMP7.x), float(_TMP7.y), float(_TMP7.z));
_c0092 = v_texCoord.xy + vec2( 9.76562500E-004, 0.00000000E+000) + vec2( 0.00000000E+000, 1.95312500E-003);
_TMP8 = texture2D(Sample, _c0092);
_I = vec3(float(_TMP8.x), float(_TMP8.y), float(_TMP8.z));
_c0094 = (v_texCoord.xy - vec2( 9.76562500E-004, 0.00000000E+000)) - vec2( 0.00000000E+000, 3.90625000E-003);
_TMP9 = texture2D(Sample, _c0094);
_A11 = vec3(float(_TMP9.x), float(_TMP9.y), float(_TMP9.z));
_c0096 = (v_texCoord.xy + vec2( 9.76562500E-004, 0.00000000E+000)) - vec2( 0.00000000E+000, 3.90625000E-003);
_TMP10 = texture2D(Sample, _c0096);
_C1 = vec3(float(_TMP10.x), float(_TMP10.y), float(_TMP10.z));
_c0098 = (v_texCoord.xy - vec2( 1.95312500E-003, 0.00000000E+000)) - vec2( 0.00000000E+000, 1.95312500E-003);
_TMP11 = texture2D(Sample, _c0098);
_A0 = vec3(float(_TMP11.x), float(_TMP11.y), float(_TMP11.z));
_c0100 = (v_texCoord.xy - vec2( 1.95312500E-003, 0.00000000E+000)) + vec2( 0.00000000E+000, 1.95312500E-003);
_TMP12 = texture2D(Sample, _c0100);
_G0 = vec3(float(_TMP12.x), float(_TMP12.y), float(_TMP12.z));
_c0102 = (v_texCoord.xy + vec2( 1.95312500E-003, 0.00000000E+000)) - vec2( 0.00000000E+000, 1.95312500E-003);
_TMP13 = texture2D(Sample, _c0102);
_C4 = vec3(float(_TMP13.x), float(_TMP13.y), float(_TMP13.z));
_c0104 = v_texCoord.xy + vec2( 1.95312500E-003, 0.00000000E+000) + vec2( 0.00000000E+000, 1.95312500E-003);
_TMP14 = texture2D(Sample, _c0104);
_I4 = vec3(float(_TMP14.x), float(_TMP14.y), float(_TMP14.z));
_c0106 = (v_texCoord.xy - vec2( 9.76562500E-004, 0.00000000E+000)) + vec2( 0.00000000E+000, 3.90625000E-003);
_TMP15 = texture2D(Sample, _c0106);
_G5 = vec3(float(_TMP15.x), float(_TMP15.y), float(_TMP15.z));
_c0108 = v_texCoord.xy + vec2( 9.76562500E-004, 0.00000000E+000) + vec2( 0.00000000E+000, 3.90625000E-003);
_TMP16 = texture2D(Sample, _c0108);
_I5 = vec3(float(_TMP16.x), float(_TMP16.y), float(_TMP16.z));
_c0110 = v_texCoord.xy - vec2( 0.00000000E+000, 3.90625000E-003);
_TMP17 = texture2D(Sample, _c0110);
_B11 = vec3(float(_TMP17.x), float(_TMP17.y), float(_TMP17.z));
_c0112 = v_texCoord.xy - vec2( 1.95312500E-003, 0.00000000E+000);
_TMP18 = texture2D(Sample, _c0112);
_D0 = vec3(float(_TMP18.x), float(_TMP18.y), float(_TMP18.z));
_c0114 = v_texCoord.xy + vec2( 0.00000000E+000, 3.90625000E-003);
_TMP19 = texture2D(Sample, _c0114);
_H5 = vec3(float(_TMP19.x), float(_TMP19.y), float(_TMP19.z));
_c0116 = v_texCoord.xy + vec2( 1.95312500E-003, 0.00000000E+000);
_TMP20 = texture2D(Sample, _c0116);
_F4 = vec3(float(_TMP20.x), float(_TMP20.y), float(_TMP20.z));
_TMP60 = dot(vec3(float(_B2.x), float(_B2.y), float(_B2.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0118.x = float(_TMP60);
_TMP60 = dot(vec3(float(_D.x), float(_D.y), float(_D.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0118.y = float(_TMP60);
_TMP60 = dot(vec3(float(_H.x), float(_H.y), float(_H.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0118.z = float(_TMP60);
_TMP60 = dot(vec3(float(_F.x), float(_F.y), float(_F.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0118.w = float(_TMP60);
_b1 = vec4(float(_r0118.x), float(_r0118.y), float(_r0118.z), float(_r0118.w));
_TMP60 = dot(vec3(float(_C.x), float(_C.y), float(_C.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0128.x = float(_TMP60);
_TMP60 = dot(vec3(float(_A2.x), float(_A2.y), float(_A2.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0128.y = float(_TMP60);
_TMP60 = dot(vec3(float(_G.x), float(_G.y), float(_G.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0128.z = float(_TMP60);
_TMP60 = dot(vec3(float(_I.x), float(_I.y), float(_I.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0128.w = float(_TMP60);
_c1 = vec4(float(_r0128.x), float(_r0128.y), float(_r0128.z), float(_r0128.w));
_TMP60 = dot(vec3(float(_E.x), float(_E.y), float(_E.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0138.x = float(_TMP60);
_TMP60 = dot(vec3(float(_E.x), float(_E.y), float(_E.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0138.y = float(_TMP60);
_TMP60 = dot(vec3(float(_E.x), float(_E.y), float(_E.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0138.z = float(_TMP60);
_TMP60 = dot(vec3(float(_E.x), float(_E.y), float(_E.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0138.w = float(_TMP60);
_e1 = vec4(float(_r0138.x), float(_r0138.y), float(_r0138.z), float(_r0138.w));
_TMP60 = dot(vec3(float(_I4.x), float(_I4.y), float(_I4.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0148.x = float(_TMP60);
_TMP60 = dot(vec3(float(_C1.x), float(_C1.y), float(_C1.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0148.y = float(_TMP60);
_TMP60 = dot(vec3(float(_A0.x), float(_A0.y), float(_A0.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0148.z = float(_TMP60);
_TMP60 = dot(vec3(float(_G5.x), float(_G5.y), float(_G5.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0148.w = float(_TMP60);
_i4 = vec4(float(_r0148.x), float(_r0148.y), float(_r0148.z), float(_r0148.w));
_TMP60 = dot(vec3(float(_I5.x), float(_I5.y), float(_I5.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0158.x = float(_TMP60);
_TMP60 = dot(vec3(float(_C4.x), float(_C4.y), float(_C4.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0158.y = float(_TMP60);
_TMP60 = dot(vec3(float(_A11.x), float(_A11.y), float(_A11.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0158.z = float(_TMP60);
_TMP60 = dot(vec3(float(_G0.x), float(_G0.y), float(_G0.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0158.w = float(_TMP60);
_i5 = vec4(float(_r0158.x), float(_r0158.y), float(_r0158.z), float(_r0158.w));
_TMP60 = dot(vec3(float(_H5.x), float(_H5.y), float(_H5.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0168.x = float(_TMP60);
_TMP60 = dot(vec3(float(_F4.x), float(_F4.y), float(_F4.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0168.y = float(_TMP60);
_TMP60 = dot(vec3(float(_B11.x), float(_B11.y), float(_B11.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0168.z = float(_TMP60);
_TMP60 = dot(vec3(float(_D0.x), float(_D0.y), float(_D0.z)), vec3( 1.43593750E+001, 2.81718750E+001, 5.47265625E+000));
_r0168.w = float(_TMP60);
_h5 = vec4(float(_r0168.x), float(_r0168.y), float(_r0168.z), float(_r0168.w));
_fx = bvec4((vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 1.00000000E+000, 1.00000000E+000, -1.00000000E+000, -1.00000000E+000)*_fp.x).x > 1.50000000E+000, (vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 1.00000000E+000, 1.00000000E+000, -1.00000000E+000, -1.00000000E+000)*_fp.x).y > 5.00000000E-001, (vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 1.00000000E+000, 1.00000000E+000, -1.00000000E+000, -1.00000000E+000)*_fp.x).z > -5.00000000E-001, (vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 1.00000000E+000, 1.00000000E+000, -1.00000000E+000, -1.00000000E+000)*_fp.x).w > 5.00000000E-001);
_fx_left = bvec4((vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 5.00000000E-001, 2.00000000E+000, -5.00000000E-001, -2.00000000E+000)*_fp.x).x > 1.00000000E+000, (vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 5.00000000E-001, 2.00000000E+000, -5.00000000E-001, -2.00000000E+000)*_fp.x).y > 1.00000000E+000, (vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 5.00000000E-001, 2.00000000E+000, -5.00000000E-001, -2.00000000E+000)*_fp.x).z > -5.00000000E-001, (vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 5.00000000E-001, 2.00000000E+000, -5.00000000E-001, -2.00000000E+000)*_fp.x).w > 0.00000000E+000);
_fx_up = bvec4((vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 2.00000000E+000, 5.00000000E-001, -2.00000000E+000, -5.00000000E-001)*_fp.x).x > 2.00000000E+000, (vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 2.00000000E+000, 5.00000000E-001, -2.00000000E+000, -5.00000000E-001)*_fp.x).y > 0.00000000E+000, (vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 2.00000000E+000, 5.00000000E-001, -2.00000000E+000, -5.00000000E-001)*_fp.x).z > -1.00000000E+000, (vec4( 1.00000000E+000, -1.00000000E+000, -1.00000000E+000, 1.00000000E+000)*_fp.y + vec4( 2.00000000E+000, 5.00000000E-001, -2.00000000E+000, -5.00000000E-001)*_fp.x).w > 5.00000000E-001);
_a0182 = _b1.wxyz - _b1;
_TMP179 = abs(_a0182);
_TMP27 = bvec4(_TMP179.x < 1.50000000E+001, _TMP179.y < 1.50000000E+001, _TMP179.z < 1.50000000E+001, _TMP179.w < 1.50000000E+001);
_a0188 = _b1.wxyz - _c1;
_TMP185 = abs(_a0188);
_TMP28 = bvec4(_TMP185.x < 1.50000000E+001, _TMP185.y < 1.50000000E+001, _TMP185.z < 1.50000000E+001, _TMP185.w < 1.50000000E+001);
_a0194 = _b1.zwxy - _b1.yzwx;
_TMP191 = abs(_a0194);
_TMP29 = bvec4(_TMP191.x < 1.50000000E+001, _TMP191.y < 1.50000000E+001, _TMP191.z < 1.50000000E+001, _TMP191.w < 1.50000000E+001);
_a0200 = _b1.zwxy - _c1.zwxy;
_TMP197 = abs(_a0200);
_TMP30 = bvec4(_TMP197.x < 1.50000000E+001, _TMP197.y < 1.50000000E+001, _TMP197.z < 1.50000000E+001, _TMP197.w < 1.50000000E+001);
_a0206 = _e1 - _c1.wxyz;
_TMP203 = abs(_a0206);
_TMP31 = bvec4(_TMP203.x < 1.50000000E+001, _TMP203.y < 1.50000000E+001, _TMP203.z < 1.50000000E+001, _TMP203.w < 1.50000000E+001);
_a0212 = _b1.wxyz - _h5.yzwx;
_TMP209 = abs(_a0212);
_TMP32 = bvec4(_TMP209.x < 1.50000000E+001, _TMP209.y < 1.50000000E+001, _TMP209.z < 1.50000000E+001, _TMP209.w < 1.50000000E+001);
_a0218 = _b1.wxyz - _i4;
_TMP215 = abs(_a0218);
_TMP33 = bvec4(_TMP215.x < 1.50000000E+001, _TMP215.y < 1.50000000E+001, _TMP215.z < 1.50000000E+001, _TMP215.w < 1.50000000E+001);
_a0224 = _b1.zwxy - _h5;
_TMP221 = abs(_a0224);
_TMP34 = bvec4(_TMP221.x < 1.50000000E+001, _TMP221.y < 1.50000000E+001, _TMP221.z < 1.50000000E+001, _TMP221.w < 1.50000000E+001);
_a0230 = _b1.zwxy - _i5;
_TMP227 = abs(_a0230);
_TMP35 = bvec4(_TMP227.x < 1.50000000E+001, _TMP227.y < 1.50000000E+001, _TMP227.z < 1.50000000E+001, _TMP227.w < 1.50000000E+001);
_a0236 = _e1 - _c1.zwxy;
_TMP233 = abs(_a0236);
_TMP36 = bvec4(_TMP233.x < 1.50000000E+001, _TMP233.y < 1.50000000E+001, _TMP233.z < 1.50000000E+001, _TMP233.w < 1.50000000E+001);
_a0242 = _e1 - _c1;
_TMP239 = abs(_a0242);
_TMP37 = bvec4(_TMP239.x < 1.50000000E+001, _TMP239.y < 1.50000000E+001, _TMP239.z < 1.50000000E+001, _TMP239.w < 1.50000000E+001);
_interp_restriction_lv1 = bvec4(_e1.x != _b1.w && _e1.x != _b1.z && (!_TMP27.x && !_TMP28.x || !_TMP29.x && !_TMP30.x || _TMP31.x && (!_TMP32.x && !_TMP33.x || !_TMP34.x && !_TMP35.x) || _TMP36.x || _TMP37.x), _e1.y != _b1.x && _e1.y != _b1.w && (!_TMP27.y && !_TMP28.y || !_TMP29.y && !_TMP30.y || _TMP31.y && (!_TMP32.y && !_TMP33.y || !_TMP34.y && !_TMP35.y) || _TMP36.y || _TMP37.y), _e1.z != _b1.y && _e1.z != _b1.x && (!_TMP27.z && !_TMP28.z || !_TMP29.z && !_TMP30.z || _TMP31.z && (!_TMP32.z && !_TMP33.z || !_TMP34.z && !_TMP35.z) || _TMP36.z || _TMP37.z), _e1.w != _b1.z && _e1.w != _b1.y && (!_TMP27.w && !_TMP28.w || !_TMP29.w && !_TMP30.w || _TMP31.w && (!_TMP32.w && !_TMP33.w || !_TMP34.w && !_TMP35.w) || _TMP36.w || _TMP37.w));
_interp_restriction_lv2_left = bvec4(_e1.x != _c1.z && _b1.y != _c1.z, _e1.y != _c1.w && _b1.z != _c1.w, _e1.z != _c1.x && _b1.w != _c1.x, _e1.w != _c1.y && _b1.x != _c1.y);
_interp_restriction_lv2_up = bvec4(_e1.x != _c1.x && _b1.x != _c1.x, _e1.y != _c1.y && _b1.y != _c1.y, _e1.z != _c1.z && _b1.z != _c1.z, _e1.w != _c1.w && _b1.w != _c1.w);
_a0248 = _e1 - _c1;
_TMP245 = abs(_a0248);
_a0252 = _e1 - _c1.zwxy;
_TMP249 = abs(_a0252);
_a0256 = _c1.wxyz - _h5;
_TMP253 = abs(_a0256);
_a0260 = _c1.wxyz - _h5.yzwx;
_TMP257 = abs(_a0260);
_a0264 = _b1.zwxy - _b1.wxyz;
_TMP261 = abs(_a0264);
_TMP38 = _TMP245 + _TMP249 + _TMP253 + _TMP257 + 4.00000000E+000*_TMP261;
_a0270 = _b1.zwxy - _b1.yzwx;
_TMP267 = abs(_a0270);
_a0274 = _b1.zwxy - _i5;
_TMP271 = abs(_a0274);
_a0278 = _b1.wxyz - _i4;
_TMP275 = abs(_a0278);
_a0282 = _b1.wxyz - _b1;
_TMP279 = abs(_a0282);
_a0286 = _e1 - _c1.wxyz;
_TMP283 = abs(_a0286);
_TMP39 = _TMP267 + _TMP271 + _TMP275 + _TMP279 + 4.00000000E+000*_TMP283;
_edr = bvec4(_TMP38.x < _TMP39.x && _interp_restriction_lv1.x, _TMP38.y < _TMP39.y && _interp_restriction_lv1.y, _TMP38.z < _TMP39.z && _interp_restriction_lv1.z, _TMP38.w < _TMP39.w && _interp_restriction_lv1.w);
_a0290 = _b1.wxyz - _c1.zwxy;
_TMP287 = abs(_a0290);
_a0294 = _b1.zwxy - _c1;
_TMP291 = abs(_a0294);
_edr_left = bvec4((2.00000000E+000*_TMP287).x <= _TMP291.x && _interp_restriction_lv2_left.x, (2.00000000E+000*_TMP287).y <= _TMP291.y && _interp_restriction_lv2_left.y, (2.00000000E+000*_TMP287).z <= _TMP291.z && _interp_restriction_lv2_left.z, (2.00000000E+000*_TMP287).w <= _TMP291.w && _interp_restriction_lv2_left.w);
_a0298 = _b1.wxyz - _c1.zwxy;
_TMP295 = abs(_a0298);
_a0302 = _b1.zwxy - _c1;
_TMP299 = abs(_a0302);
_edr_up = bvec4(_TMP295.x >= (2.00000000E+000*_TMP299).x && _interp_restriction_lv2_up.x, _TMP295.y >= (2.00000000E+000*_TMP299).y && _interp_restriction_lv2_up.y, _TMP295.z >= (2.00000000E+000*_TMP299).z && _interp_restriction_lv2_up.z, _TMP295.w >= (2.00000000E+000*_TMP299).w && _interp_restriction_lv2_up.w);
_nc = bvec4(_edr.x && (_fx.x || _edr_left.x && _fx_left.x || _edr_up.x && _fx_up.x), _edr.y && (_fx.y || _edr_left.y && _fx_left.y || _edr_up.y && _fx_up.y), _edr.z && (_fx.z || _edr_left.z && _fx_left.z || _edr_up.z && _fx_up.z), _edr.w && (_fx.w || _edr_left.w && _fx_left.w || _edr_up.w && _fx_up.w));
_a0306 = _e1 - _b1.wxyz;
_TMP303 = abs(_a0306);
_a0310 = _e1 - _b1.zwxy;
_TMP307 = abs(_a0310);
_px = bvec4(_TMP303.x <= _TMP307.x, _TMP303.y <= _TMP307.y, _TMP303.z <= _TMP307.z, _TMP303.w <= _TMP307.w);
if (_nc.x) { // if begin
if (_px.x) { // if begin
_TMP47 = _F;
} else {
_TMP47 = _H;
} // end if
_TMP46 = _TMP47;
} else {
if (_nc.y) { // if begin
if (_px.y) { // if begin
_TMP49 = _B2;
} else {
_TMP49 = _F;
} // end if
_TMP48 = _TMP49;
} else {
if (_nc.z) { // if begin
if (_px.z) { // if begin
_TMP51 = _D;
} else {
_TMP51 = _B2;
} // end if
_TMP50 = _TMP51;
} else {
if (_nc.w) { // if begin
if (_px.w) { // if begin
_TMP53 = _H;
} else {
_TMP53 = _D;
} // end if
_TMP52 = _TMP53;
} else {
_TMP52 = _E;
} // end if
_TMP50 = _TMP52;
} // end if
_TMP48 = _TMP50;
} // end if
_TMP46 = _TMP48;
} // end if
_ret_0 = vec4(_TMP46.x, _TMP46.y, _TMP46.z, 1.00000000E+000);
gl_FragColor = vec4(float(_ret_0.x), float(_ret_0.y), float(_ret_0.z), float(_ret_0.w));
return;
} // main end
@@ -0,0 +1,9 @@
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = a_position;
v_texCoord = a_texCoord;
}
@@ -0,0 +1,71 @@
/*
AA shader v2.o + Natural Vision
Copyright (C) 2006 guest(r) - guest.r@gmail.com
part of code by ShadX
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef GL_ES
precision mediump float;
#endif
uniform sampler2D Frame;
const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212,
0.587,-0.275,-0.523,
0.114,-0.321, 0.311);
const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0,
0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523,
0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149);
varying vec4 TexCoord[8];
const vec3 val00 = vec3( 1.2, 1.2, 1.2);
void main()
{
vec3 c00 = texture2D(Frame, TexCoord[5].xy).xyz;
vec3 c10 = texture2D(Frame, TexCoord[1].xy).xyz;
vec3 c20 = texture2D(Frame, TexCoord[2].zw).xyz;
vec3 c01 = texture2D(Frame, TexCoord[3].xy).xyz;
vec3 c11 = texture2D(Frame, TexCoord[0].xy).xyz;
vec3 c21 = texture2D(Frame, TexCoord[4].xy).xyz;
vec3 c02 = texture2D(Frame, TexCoord[1].zw).xyz;
vec3 c12 = texture2D(Frame, TexCoord[2].xy).xyz;
vec3 c22 = texture2D(Frame, TexCoord[6].xy).xyz;
vec3 dt = vec3(1.0,1.0,1.0);
float d1=dot(abs(c00-c22),dt)+0.0001;
float d2=dot(abs(c20-c02),dt)+0.0001;
float hl=dot(abs(c01-c21),dt)+0.0001;
float vl=dot(abs(c10-c12),dt)+0.0001;
float md = d1+d2; float mc = hl+vl;
hl*= md;vl*= md; d1*= mc;d2*= mc;
float ww = d1+d2+hl+vl;
c00 = RGBtoYIQ*((hl*(c10+c12)+vl*(c01+c21)+d1*(c20+c02)+d2*(c00+c22)+ww*c11)/(3.0*ww));
c00 = vec3(pow(c00.x,val00.x),c00.yz*val00.yz);
gl_FragColor.xyz= YIQtoRGB*c00;
}
@@ -0,0 +1,28 @@
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec4 TexCoord[8];
void main()
{
gl_Position = a_position;
//float x = (OGL2Size.x/2048.0)*OGL2Param.x;
//float y = (OGL2Size.y/1024.0)*OGL2Param.y;
float x = a_texCoord.x/1024.0;
float y = a_texCoord.y/512.0;
vec2 dg1 = vec2( x,y);
vec2 dg2 = vec2(-x,y);
vec2 dx = vec2(x,0.0);
vec2 dy = vec2(0.0,y);
TexCoord[0].xy = a_texCoord;
TexCoord[1].xy = TexCoord[0].xy - dy;
TexCoord[2].xy = TexCoord[0].xy + dy;
TexCoord[3].xy = TexCoord[0].xy - dx;
TexCoord[4].xy = TexCoord[0].xy + dx;
TexCoord[5].xy = TexCoord[0].xy - dg1;
TexCoord[6].xy = TexCoord[0].xy + dg1;
TexCoord[1].zw = TexCoord[0].xy - dg2;
TexCoord[2].zw = TexCoord[0].xy + dg2;
}
@@ -0,0 +1,221 @@
/*
AA shader v2.o + Natural Vision
Copyright (C) 2006 guest(r) - guest.r@gmail.com
part of code by ShadX
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#ifdef GL_ES
precision mediump float;
#endif
//#define BR1
#define BR2
//#define BR3
uniform sampler2D Frame;
const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212,
0.587,-0.275,-0.523,
0.114,-0.321, 0.311);
const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0,
0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523,
0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149);
varying vec4 TexCoord[8];
const vec3 val00 = vec3( 1.2, 1.2, 1.2);
void br3(in vec4 natural, out vec4 fragcolor) {
int LUT[33];
LUT[0] = 0;
LUT[1] = 2;
LUT[2] = 4;
LUT[3] = 6;
LUT[4] = 8;
LUT[5] = 10;
LUT[6] = 12;
LUT[7] = 14;
LUT[8] = 16;
LUT[9] = 17;
LUT[10] = 17;
LUT[11] = 18;
LUT[12] = 19;
LUT[13] = 19;
LUT[14] = 20;
LUT[15] = 21;
LUT[16] = 21;
LUT[17] = 22;
LUT[18] = 23;
LUT[19] = 23;
LUT[20] = 24;
LUT[21] = 25;
LUT[22] = 25;
LUT[23] = 26;
LUT[24] = 27;
LUT[25] = 27;
LUT[26] = 28;
LUT[27] = 29;
LUT[28] = 29;
LUT[29] = 30;
LUT[30] = 30;
LUT[31] = 31;
LUT[32] = 31;
vec4 rgb16 = natural * vec4(31.0, 31.0, 31.0, 1.0);
rgb16.r = float(LUT[int(rgb16.r)])+float(LUT[int(rgb16.r)+1]-LUT[int(rgb16.r)])*fract(rgb16.r);
rgb16.g = float(LUT[int(rgb16.g)])+float(LUT[int(rgb16.g)+1]-LUT[int(rgb16.g)])*fract(rgb16.g);
rgb16.b = float(LUT[int(rgb16.b)])+float(LUT[int(rgb16.b)+1]-LUT[int(rgb16.b)])*fract(rgb16.b);
fragcolor = rgb16 / vec4(31.0,31.0,31.0,1.0);
}
void br2(in vec4 natural, out vec4 fragcolor) {
int LUT[33];
LUT[0] = 0;
LUT[1] = 2;
LUT[2] = 4;
LUT[3] = 6;
LUT[4] = 8;
LUT[5] = 10;
LUT[6] = 11;
LUT[7] = 12;
LUT[8] = 13;
LUT[9] = 14;
LUT[10] = 15;
LUT[11] = 16;
LUT[12] = 17;
LUT[13] = 18;
LUT[14] = 19;
LUT[15] = 19;
LUT[16] = 20;
LUT[17] = 21;
LUT[18] = 22;
LUT[19] = 22;
LUT[20] = 23;
LUT[21] = 24;
LUT[22] = 25;
LUT[23] = 25;
LUT[24] = 26;
LUT[25] = 27;
LUT[26] = 28;
LUT[27] = 28;
LUT[28] = 29;
LUT[29] = 30;
LUT[30] = 30;
LUT[31] = 31;
LUT[32] = 31;
vec4 rgb16 = natural * vec4(31.0, 31.0, 31.0, 1.0);
rgb16.r = float(LUT[int(rgb16.r)])+float(LUT[int(rgb16.r)+1]-LUT[int(rgb16.r)])*fract(rgb16.r);
rgb16.g = float(LUT[int(rgb16.g)])+float(LUT[int(rgb16.g)+1]-LUT[int(rgb16.g)])*fract(rgb16.g);
rgb16.b = float(LUT[int(rgb16.b)])+float(LUT[int(rgb16.b)+1]-LUT[int(rgb16.b)])*fract(rgb16.b);
fragcolor = rgb16 / vec4(31.0,31.0,31.0,1.0);
}
void br1(in vec4 natural, out vec4 fragcolor) {
int LUT[33];
LUT[0] = 0;
LUT[1] = 2;
LUT[2] = 4;
LUT[3] = 5;
LUT[4] = 7;
LUT[5] = 8;
LUT[6] = 9;
LUT[7] = 10;
LUT[8] = 11;
LUT[9] = 12;
LUT[10] = 13;
LUT[11] = 14;
LUT[12] = 15;
LUT[13] = 16;
LUT[14] = 17;
LUT[15] = 17;
LUT[16] = 18;
LUT[17] = 19;
LUT[18] = 20;
LUT[19] = 21;
LUT[20] = 22;
LUT[21] = 23;
LUT[22] = 24;
LUT[23] = 24;
LUT[24] = 25;
LUT[25] = 26;
LUT[26] = 27;
LUT[27] = 28;
LUT[28] = 29;
LUT[29] = 30;
LUT[30] = 30;
LUT[31] = 31;
LUT[32] = 31;
vec4 rgb16 = natural * vec4(31.0, 31.0, 31.0, 1.0);
rgb16.r = float(LUT[int(rgb16.r)])+float(LUT[int(rgb16.r)+1]-LUT[int(rgb16.r)])*fract(rgb16.r);
rgb16.g = float(LUT[int(rgb16.g)])+float(LUT[int(rgb16.g)+1]-LUT[int(rgb16.g)])*fract(rgb16.g);
rgb16.b = float(LUT[int(rgb16.b)])+float(LUT[int(rgb16.b)+1]-LUT[int(rgb16.b)])*fract(rgb16.b);
fragcolor = rgb16 / vec4(31.0,31.0,31.0,1.0);
}
void main()
{
vec3 c00 = texture2D(Frame, TexCoord[5].xy).xyz;
vec3 c10 = texture2D(Frame, TexCoord[1].xy).xyz;
vec3 c20 = texture2D(Frame, TexCoord[2].zw).xyz;
vec3 c01 = texture2D(Frame, TexCoord[3].xy).xyz;
vec3 c11 = texture2D(Frame, TexCoord[0].xy).xyz;
vec3 c21 = texture2D(Frame, TexCoord[4].xy).xyz;
vec3 c02 = texture2D(Frame, TexCoord[1].zw).xyz;
vec3 c12 = texture2D(Frame, TexCoord[2].xy).xyz;
vec3 c22 = texture2D(Frame, TexCoord[6].xy).xyz;
vec3 dt = vec3(1.0,1.0,1.0);
float d1=dot(abs(c00-c22),dt)+0.0001;
float d2=dot(abs(c20-c02),dt)+0.0001;
float hl=dot(abs(c01-c21),dt)+0.0001;
float vl=dot(abs(c10-c12),dt)+0.0001;
float md = d1+d2; float mc = hl+vl;
hl*= md;vl*= md; d1*= mc;d2*= mc;
float ww = d1+d2+hl+vl;
c00 = RGBtoYIQ*((hl*(c10+c12)+vl*(c01+c21)+d1*(c20+c02)+d2*(c00+c22)+ww*c11)/(3.0*ww));
c00 = vec3(pow(c00.x,val00.x),c00.yz*val00.yz);
vec4 natural;
natural.xyz= YIQtoRGB*c00;
vec4 rgb32 = natural;
#ifdef BR1
br1(natural,rgb32);
#else
#ifdef BR2
br2(natural, rgb32);
#else
#ifdef BR3
br3(natural, rgb32);
#endif
#endif
#endif
gl_FragColor = rgb32;
}
@@ -0,0 +1,28 @@
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec4 TexCoord[8];
void main()
{
gl_Position = a_position;
//float x = (OGL2Size.x/2048.0)*OGL2Param.x;
//float y = (OGL2Size.y/1024.0)*OGL2Param.y;
float x = a_texCoord.x/1024.0;
float y = a_texCoord.y/512.0;
vec2 dg1 = vec2( x,y);
vec2 dg2 = vec2(-x,y);
vec2 dx = vec2(x,0.0);
vec2 dy = vec2(0.0,y);
TexCoord[0].xy = a_texCoord;
TexCoord[1].xy = TexCoord[0].xy - dy;
TexCoord[2].xy = TexCoord[0].xy + dy;
TexCoord[3].xy = TexCoord[0].xy - dx;
TexCoord[4].xy = TexCoord[0].xy + dx;
TexCoord[5].xy = TexCoord[0].xy - dg1;
TexCoord[6].xy = TexCoord[0].xy + dg1;
TexCoord[1].zw = TexCoord[0].xy - dg2;
TexCoord[2].zw = TexCoord[0].xy + dg2;
}
@@ -0,0 +1,4 @@
name=Brightness
version=1
license=BSD
copyright=ePSXe Team
@@ -0,0 +1,162 @@
#ifdef GL_ES
precision mediump float;
#endif
//#define BR1
#define BR2
//#define BR3
varying vec2 v_texCoord;
uniform sampler2D Frame;
void br3(in vec4 natural, out vec4 fragcolor) {
int LUT[33];
LUT[0] = 0;
LUT[1] = 2;
LUT[2] = 4;
LUT[3] = 6;
LUT[4] = 8;
LUT[5] = 10;
LUT[6] = 12;
LUT[7] = 14;
LUT[8] = 16;
LUT[9] = 17;
LUT[10] = 17;
LUT[11] = 18;
LUT[12] = 19;
LUT[13] = 19;
LUT[14] = 20;
LUT[15] = 21;
LUT[16] = 21;
LUT[17] = 22;
LUT[18] = 23;
LUT[19] = 23;
LUT[20] = 24;
LUT[21] = 25;
LUT[22] = 25;
LUT[23] = 26;
LUT[24] = 27;
LUT[25] = 27;
LUT[26] = 28;
LUT[27] = 29;
LUT[28] = 29;
LUT[29] = 30;
LUT[30] = 30;
LUT[31] = 31;
LUT[32] = 31;
vec4 rgb16 = natural * vec4(31.0, 31.0, 31.0, 1.0);
rgb16.r = float(LUT[int(rgb16.r)])+float(LUT[int(rgb16.r)+1]-LUT[int(rgb16.r)])*fract(rgb16.r);
rgb16.g = float(LUT[int(rgb16.g)])+float(LUT[int(rgb16.g)+1]-LUT[int(rgb16.g)])*fract(rgb16.g);
rgb16.b = float(LUT[int(rgb16.b)])+float(LUT[int(rgb16.b)+1]-LUT[int(rgb16.b)])*fract(rgb16.b);
fragcolor = rgb16 / vec4(31.0,31.0,31.0,1.0);
}
void br2(in vec4 natural, out vec4 fragcolor) {
int LUT[33];
LUT[0] = 0;
LUT[1] = 2;
LUT[2] = 4;
LUT[3] = 6;
LUT[4] = 8;
LUT[5] = 10;
LUT[6] = 11;
LUT[7] = 12;
LUT[8] = 13;
LUT[9] = 14;
LUT[10] = 15;
LUT[11] = 16;
LUT[12] = 17;
LUT[13] = 18;
LUT[14] = 19;
LUT[15] = 19;
LUT[16] = 20;
LUT[17] = 21;
LUT[18] = 22;
LUT[19] = 22;
LUT[20] = 23;
LUT[21] = 24;
LUT[22] = 25;
LUT[23] = 25;
LUT[24] = 26;
LUT[25] = 27;
LUT[26] = 28;
LUT[27] = 28;
LUT[28] = 29;
LUT[29] = 30;
LUT[30] = 30;
LUT[31] = 31;
LUT[32] = 31;
vec4 rgb16 = natural * vec4(31.0, 31.0, 31.0, 1.0);
rgb16.r = float(LUT[int(rgb16.r)])+float(LUT[int(rgb16.r)+1]-LUT[int(rgb16.r)])*fract(rgb16.r);
rgb16.g = float(LUT[int(rgb16.g)])+float(LUT[int(rgb16.g)+1]-LUT[int(rgb16.g)])*fract(rgb16.g);
rgb16.b = float(LUT[int(rgb16.b)])+float(LUT[int(rgb16.b)+1]-LUT[int(rgb16.b)])*fract(rgb16.b);
fragcolor = rgb16 / vec4(31.0,31.0,31.0,1.0);
}
void br1(in vec4 natural, out vec4 fragcolor) {
int LUT[33];
LUT[0] = 0;
LUT[1] = 2;
LUT[2] = 4;
LUT[3] = 5;
LUT[4] = 7;
LUT[5] = 8;
LUT[6] = 9;
LUT[7] = 10;
LUT[8] = 11;
LUT[9] = 12;
LUT[10] = 13;
LUT[11] = 14;
LUT[12] = 15;
LUT[13] = 16;
LUT[14] = 17;
LUT[15] = 17;
LUT[16] = 18;
LUT[17] = 19;
LUT[18] = 20;
LUT[19] = 21;
LUT[20] = 22;
LUT[21] = 23;
LUT[22] = 24;
LUT[23] = 24;
LUT[24] = 25;
LUT[25] = 26;
LUT[26] = 27;
LUT[27] = 28;
LUT[28] = 29;
LUT[29] = 30;
LUT[30] = 30;
LUT[31] = 31;
LUT[32] = 31;
vec4 rgb16 = natural * vec4(31.0, 31.0, 31.0, 1.0);
rgb16.r = float(LUT[int(rgb16.r)])+float(LUT[int(rgb16.r)+1]-LUT[int(rgb16.r)])*fract(rgb16.r);
rgb16.g = float(LUT[int(rgb16.g)])+float(LUT[int(rgb16.g)+1]-LUT[int(rgb16.g)])*fract(rgb16.g);
rgb16.b = float(LUT[int(rgb16.b)])+float(LUT[int(rgb16.b)+1]-LUT[int(rgb16.b)])*fract(rgb16.b);
fragcolor = rgb16 / vec4(31.0,31.0,31.0,1.0);
}
void main()
{
vec4 natural = texture2D(Frame, v_texCoord);
vec4 rgb32 = natural;
#ifdef BR1
br1(natural,rgb32);
#else
#ifdef BR2
br2(natural, rgb32);
#else
#ifdef BR3
br3(natural, rgb32);
#endif
#endif
#endif
gl_FragColor = rgb32;
}
@@ -0,0 +1,9 @@
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = a_position;
v_texCoord = a_texCoord;
}
@@ -0,0 +1,4 @@
name=CRT Hyllian 3D
version=1
license=Public Domain
copyright=Hyllian
@@ -0,0 +1,301 @@
/*
Hyllian's CRT Shader
Copyright (C) 2011-2015 Hyllian - sergiogdb@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#version 100
#ifdef GL_ES
precision mediump float;
#endif
// Uncomment to enable anti-ringing to horizontal filter.
//#define ANTI_RINGING
// Comment next line if you don't desire the phosphor effect.
//#define PHOSPHOR
// Uncomment to enable adjustment of red and green saturation.
//#define RED_GREEN_CONTROL
#define InputGamma 2.4
#define OutputGamma 2.2
#define RED_BOOST 1.0
#define GREEN_BOOST 1.0
#define SCANLINES_STRENGTH 0.72
#define BEAM_MIN_WIDTH 0.86
#define BEAM_MAX_WIDTH 1.0
#define COLOR_BOOST 1.5
#define CRT_TV_BLUE_TINT 1.0
#define GAMMA_IN(color) pow(color, vec3(InputGamma, InputGamma, InputGamma))
#define GAMMA_OUT(color) pow(color, vec3(1.0 / OutputGamma, 1.0 / OutputGamma, 1.0 / OutputGamma))
const vec3 dtt = vec3(65536,255,1);
// Horizontal cubic filter.
// Some known filters use these values:
// B = 0.0, C = 0.0 => Hermite cubic filter.
// B = 1.0, C = 0.0 => Cubic B-Spline filter.
// B = 0.0, C = 0.5 => Catmull-Rom Spline filter. This is the default used in this shader.
// B = C = 1.0/3.0 => Mitchell-Netravali cubic filter.
// B = 0.3782, C = 0.3109 => Robidoux filter.
// B = 0.2620, C = 0.3690 => Robidoux Sharp filter.
// B = 0.36, C = 0.28 => My best config for ringing elimination in pixel art (Hyllian).
// For more info, see: http://www.imagemagick.org/Usage/img_diagrams/cubic_survey.gif
// Change these params to configure the horizontal filter.
const float B = 0.0;
const float C = 0.5;
/*
const mat4 invX = mat4( (-B - 6.0*C)/6.0, (3.0*B + 12.0*C)/6.0, (-3.0*B - 6.0*C)/6.0, B/6.0,
(12.0 - 9.0*B - 6.0*C)/6.0, (-18.0 + 12.0*B + 6.0*C)/6.0, 0.0, (6.0 - 2.0*B)/6.0,
-(12.0 - 9.0*B - 6.0*C)/6.0, (18.0 - 15.0*B - 12.0*C)/6.0, (3.0*B + 6.0*C)/6.0, B/6.0,
(B + 6.0*C)/6.0, -C, 0.0, 0.0);
*/
const mat4 invX = mat4( (-B - 6.0*C)/6.0, (12.0 - 9.0*B - 6.0*C)/6.0, -(12.0 - 9.0*B - 6.0*C)/6.0, (B + 6.0*C)/6.0,
(3.0*B + 12.0*C)/6.0, (-18.0 + 12.0*B + 6.0*C)/6.0, (18.0 - 15.0*B - 12.0*C)/6.0, -C,
(-3.0*B - 6.0*C)/6.0, 0.0, (3.0*B + 6.0*C)/6.0, 0.0,
B/6.0, (6.0 - 2.0*B)/6.0, B/6.0, 0.0);
/*
const static float4x4 invX = float4x4( (-B - 6.0*C)/6.0, (3.0*B + 12.0*C)/6.0, (-3.0*B - 6.0*C)/6.0, B/6.0,
(12.0 - 9.0*B - 6.0*C)/6.0, (-18.0 + 12.0*B + 6.0*C)/6.0, 0.0, (6.0 - 2.0*B)/6.0,
-(12.0 - 9.0*B - 6.0*C)/6.0, (18.0 - 15.0*B - 12.0*C)/6.0, (3.0*B + 6.0*C)/6.0, B/6.0,
(B + 6.0*C)/6.0, -C, 0.0, 0.0);
*/
const float halfpi = 1.5707963267948966192313216916398;
const float pi = 3.1415926535897932384626433832795;
const float JINC2_WINDOW_SINC = 0.42;
const float JINC2_SINC = 0.92;
const float wa = JINC2_WINDOW_SINC*pi;
const float wb = JINC2_SINC*pi;
const float JINC2_AR_STRENGTH = 0.8;
/*
const vec2 OGLSize = vec2( 4096.0, 2048.0 );
const vec2 OGLInvSize = vec2( 1.0/4096.0, 1.0/2048.0 );
const vec2 dx = vec2( 1.0/4096.0, 0.0 );
const vec2 dy = vec2( 0.0, 1.0/2048.0 );
*/
/*
const vec2 OGLSize = vec2( 1024.0, 512.0);
const vec2 OGLInvSize = vec2( 0.0009765625, 0.001953125);
const vec2 dx = vec2( 0.0009765625, 0.0);
const vec2 dy = vec2( 0.0, 0.001953125 );
*/
//uniform vec4 OGL2InvSize;
//uniform vec4 OGL2Size;
varying vec2 v_texCoord;
float reduce(vec3 A)
{
return dot(A, dtt);
}
// Calculates the distance between two points
float d(vec2 pt1, vec2 pt2)
{
vec2 v = pt2 - pt1;
return sqrt(dot(v,v));
}
vec3 min4(vec3 a, vec3 b, vec3 c, vec3 d)
{
return min(a, min(b, min(c, d)));
}
vec3 max4(vec3 a, vec3 b, vec3 c, vec3 d)
{
return max(a, max(b, max(c, d)));
}
vec4 resampler(vec4 x)
{
vec4 res;
res = (x==vec4(0.0, 0.0, 0.0, 0.0)) ? vec4(wa*wb) : sin(x*wa)*sin(x*wb)/(x*x);
return res;
}
uniform sampler2D Sample;
void main()
{
vec3 color, E;
vec2 OGL2Size = vec2(1024, 512);
vec2 OGL2InvSize = 1.0/OGL2Size;
vec2 dx = vec2(OGL2InvSize.x,0.0);
vec2 dy = vec2(0.0, OGL2InvSize.y);
vec2 pix_coord = v_texCoord.xy*OGL2Size+vec2(-0.5,0.5);
vec2 tex = (floor(v_texCoord.xy*OGL2Size) + vec2(0.5, 0.5))/OGL2Size;
vec2 tc = (floor(pix_coord)+vec2(0.5,0.5))/OGL2Size;
vec2 fp = fract(pix_coord);
vec4 c00 = vec4(GAMMA_IN(texture2D(Sample, tc - dx - dy).xyz),1.0);
vec4 c01 = vec4(GAMMA_IN(texture2D(Sample, tc - dy).xyz),1.0);
vec4 c02 = vec4(GAMMA_IN(texture2D(Sample, tc + dx - dy).xyz),1.0);
vec4 c03 = vec4(GAMMA_IN(texture2D(Sample, tc + 2.0*dx - dy).xyz),1.0);
vec4 c10 = vec4(GAMMA_IN(texture2D(Sample, tc - dx).xyz),1.0);
vec4 c11 = vec4(GAMMA_IN(texture2D(Sample, tc ).xyz),1.0);
vec4 c12 = vec4(GAMMA_IN(texture2D(Sample, tc + dx).xyz),1.0);
vec4 c13 = vec4(GAMMA_IN(texture2D(Sample, tc + 2.0*dx).xyz),1.0);
color = E = GAMMA_IN(texture2D(Sample, v_texCoord.xy).xyz);
vec3 F0 = texture2D(Sample, tex +dx+0.25*dx +0.25*dy).xyz;
vec3 F1 = texture2D(Sample, tex +dx+0.25*dx -0.25*dy).xyz;
vec3 F2 = texture2D(Sample, tex +dx-0.25*dx -0.25*dy).xyz;
vec3 F3 = texture2D(Sample, tex +dx-0.25*dx +0.25*dy).xyz;
vec3 H0 = texture2D(Sample, tex +0.25*dx +0.25*dy+dy).xyz;
vec3 H1 = texture2D(Sample, tex +0.25*dx -0.25*dy+dy).xyz;
vec3 H2 = texture2D(Sample, tex -0.25*dx -0.25*dy+dy).xyz;
vec3 H3 = texture2D(Sample, tex -0.25*dx +0.25*dy+dy).xyz;
float f0 = reduce(F0);
float f1 = reduce(F1);
float f2 = reduce(F2);
float f3 = reduce(F3);
float h0 = reduce(H0);
float h1 = reduce(H1);
float h2 = reduce(H2);
float h3 = reduce(H3);
float block_3d = (float(f0==f1)*float(f1==f2)*float(f2==f3)*float(h0==h1)*float(h1==h2)*float(h2==h3));
#ifdef ANTI_RINGING
// Get min/max samples
vec4 min_sample = min(min(c01,c11), min(c02,c12));
vec4 max_sample = max(max(c01,c11), max(c02,c12));
// vec4 min_sample = min(min(c01,c11), min(c02,c12)) + (c10-c11)*(c12-c13);
// vec4 max_sample = max(max(c01,c11), max(c02,c12)) - (c10-c11)*(c12-c13);
#endif
;
mat4 color_matrix0 = mat4(c00, c01, c02, c03);
mat4 color_matrix1 = mat4(c10, c11, c12, c13);
vec4 lobes = vec4(fp.x*fp.x*fp.x, fp.x*fp.x, fp.x, 1.0);
vec4 invX_Px = invX * lobes;
vec4 color0x = color_matrix0 * invX_Px;
vec4 color1x = color_matrix1 * invX_Px;
vec3 color0 = color0x.xyz;
vec3 color1 = color1x.xyz;
/*
vec4 invX_Px = vec4(dot(invX[0], poli), dot(invX[1], poli), dot(invX[2], poli), dot(invX[3], poli));
vec3 color0 = vec3(dot(color_matrix0[0], invX_Px), dot(color_matrix0[1], invX_Px), dot(color_matrix0[2], invX_Px));
vec3 color1 = vec3(dot(color_matrix1[0], invX_Px), dot(color_matrix1[1], invX_Px), dot(color_matrix1[2], invX_Px));
*/
/*
float4x3 color_matrix0 = float4x3(c00, c01, c02, c03);
float4x3 color_matrix1 = float4x3(c10, c11, c12, c13);
float4 invX_Px = mul(invX, float4(fp.x*fp.x*fp.x, fp.x*fp.x, fp.x, 1.0));
float3 color0 = mul(invX_Px, color_matrix0);
float3 color1 = mul(invX_Px, color_matrix1);
*/
#ifdef ANTI_RINGING
// Anti-ringing
color0 = clamp(color0, min_sample, max_sample);
color1 = clamp(color1, min_sample, max_sample);
#endif
float pos0 = fp.y;
float pos1 = 1.0 - fp.y;
vec3 lum0 = mix(vec3(BEAM_MIN_WIDTH), vec3(BEAM_MAX_WIDTH), color0);
vec3 lum1 = mix(vec3(BEAM_MIN_WIDTH), vec3(BEAM_MAX_WIDTH), color1);
vec3 d0 = clamp(pos0/(lum0+0.0000001), 0.0, 1.0);
vec3 d1 = clamp(pos1/(lum1+0.0000001), 0.0, 1.0);
d0 = exp(-10.0*SCANLINES_STRENGTH*d0*d0);
d1 = exp(-10.0*SCANLINES_STRENGTH*d1*d1);
color = clamp(color0*d0+color1*d1, 0.0, 1.0);
color *= COLOR_BOOST;
#ifdef RED_GREEN_CONTROL
color.rgb *= vec3(RED_BOOST, GREEN_BOOST, CRT_TV_BLUE_TINT);
#else
color.b *= CRT_TV_BLUE_TINT;
#endif
#ifdef PHOSPHOR
float mod_factor = VAR.texCoord.x * IN.output_size.x * IN.texture_size.x / IN.video_size.x;
vec3 dotMaskWeights = mix(
vec3(1.0, 0.7, 1.0),
vec3(0.7, 1.0, 0.7),
floor(fmod(mod_factor, 2.0))
);
color.rgb *= dotMaskWeights;
#endif
if (block_3d!=0.0) color = E;
//color = block_3d ? color : E;
color = GAMMA_OUT(color);
// final sum and weight normalization
gl_FragColor.xyz = color;
}
@@ -0,0 +1,15 @@
#ifdef GL_ES
precision mediump float;
#endif
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = a_position;
v_texCoord = a_texCoord;
}
@@ -0,0 +1,5 @@
name=CRT Hyllian
version=1
license=Free
copyright=Hyllian
filter_linear=0
@@ -0,0 +1,161 @@
#ifdef GL_ES
precision mediump float;
#endif
#define PHOSPHOR 0.0
#define InputGamma 2.4
#define OutputGamma 2.2
#define SHARPNESS 1.0
#define COLOR_BOOST 1.5
#define RED_BOOST 1.0
#define GREEN_BOOST 1.0
#define BLUE_BOOST 1.0
#define SCANLINES_STRENGTH 0.72
#define BEAM_MIN_WIDTH 0.86
#define BEAM_MAX_WIDTH 1.0
#define CRT_ANTI_RINGING 1.0
/*
Hyllian's CRT Shader
Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
#define GAMMA_IN(color) pow(color, vec3(InputGamma, InputGamma, InputGamma))
#define GAMMA_OUT(color) pow(color, vec3(1.0 / OutputGamma, 1.0 / OutputGamma, 1.0 / OutputGamma))
// Horizontal cubic filter.
// Some known filters use these values:
// B = 0.0, C = 0.0 => Hermite cubic filter.
// B = 1.0, C = 0.0 => Cubic B-Spline filter.
// B = 0.0, C = 0.5 => Catmull-Rom Spline filter. This is the default used in this shader.
// B = C = 1.0/3.0 => Mitchell-Netravali cubic filter.
// B = 0.3782, C = 0.3109 => Robidoux filter.
// B = 0.2620, C = 0.3690 => Robidoux Sharp filter.
// B = 0.36, C = 0.28 => My best config for ringing elimination in pixel art (Hyllian).
// For more info, see: http://www.imagemagick.org/Usage/img_diagrams/cubic_survey.gif
// Change these params to configure the horizontal filter.
const float B = 0.0;
const float C = 0.5;
const mat4 invX = mat4( (-B - 6.0*C)/6.0, (12.0 - 9.0*B - 6.0*C)/6.0, -(12.0 - 9.0*B - 6.0*C)/6.0, (B + 6.0*C)/6.0,
(3.0*B + 12.0*C)/6.0, (-18.0 + 12.0*B + 6.0*C)/6.0, (18.0 - 15.0*B - 12.0*C)/6.0, -C,
(-3.0*B - 6.0*C)/6.0, 0.0, (3.0*B + 6.0*C)/6.0, 0.0,
B/6.0, (6.0 - 2.0*B)/6.0, B/6.0, 0.0);
struct inputdata
{
vec2 video_size;
vec2 texture_size;
vec2 output_size;
float frame_count;
float frame_direction;
float frame_rotation;
};
varying vec2 v_texCoord;
uniform sampler2D Sample;
uniform inputdata IN;
void main()
{
vec2 TextureSize = vec2(SHARPNESS*IN.texture_size.x, IN.texture_size.y);
// vec2 TextureSize = vec2(SHARPNESS*1024.0, 512.0);
vec3 color;
vec2 dx = vec2(1.0/TextureSize.x, 0.0);
vec2 dy = vec2(0.0, 1.0/TextureSize.y);
vec2 pix_coord = v_texCoord*TextureSize+vec2(-0.5,0.5);
vec2 tc = (floor(pix_coord)+vec2(0.5,0.5))/TextureSize;
vec2 fp = fract(pix_coord);
vec4 c00 = vec4(GAMMA_IN(texture2D(Sample, tc - dx - dy).xyz),1.0);
vec4 c01 = vec4(GAMMA_IN(texture2D(Sample, tc - dy).xyz),1.0);
vec4 c02 = vec4(GAMMA_IN(texture2D(Sample, tc + dx - dy).xyz),1.0);
vec4 c03 = vec4(GAMMA_IN(texture2D(Sample, tc + 2.0*dx - dy).xyz),1.0);
vec4 c10 = vec4(GAMMA_IN(texture2D(Sample, tc - dx).xyz),1.0);
vec4 c11 = vec4(GAMMA_IN(texture2D(Sample, tc ).xyz),1.0);
vec4 c12 = vec4(GAMMA_IN(texture2D(Sample, tc + dx).xyz),1.0);
vec4 c13 = vec4(GAMMA_IN(texture2D(Sample, tc + 2.0*dx).xyz),1.0);
// Get min/max samples
vec4 min_sample = min(min(c01,c11), min(c02,c12));
vec4 max_sample = max(max(c01,c11), max(c02,c12));
mat4 color_matrix0 = mat4(c00, c01, c02, c03);
mat4 color_matrix1 = mat4(c10, c11, c12, c13);
vec4 lobes = vec4(fp.x*fp.x*fp.x, fp.x*fp.x, fp.x, 1.0);
vec4 invX_Px = invX * lobes;
vec4 color0 = color_matrix0 * invX_Px;
vec4 color1 = color_matrix1 * invX_Px;
// Anti-ringing
vec4 aux = color0;
color0 = clamp(color0, min_sample, max_sample);
color0 = mix(aux, color0, CRT_ANTI_RINGING);
aux = color1;
color1 = clamp(color1, min_sample, max_sample);
color1 = mix(aux, color1, CRT_ANTI_RINGING);
float pos0 = fp.y;
float pos1 = 1.0 - fp.y;
vec3 color0x = color0.rgb;
vec3 color1x = color1.rgb;
vec3 lum0 = mix(vec3(BEAM_MIN_WIDTH), vec3(BEAM_MAX_WIDTH), color0x);
vec3 lum1 = mix(vec3(BEAM_MIN_WIDTH), vec3(BEAM_MAX_WIDTH), color1x);
vec3 d0 = clamp(pos0/(lum0+0.0000001), 0.0, 1.0);
vec3 d1 = clamp(pos1/(lum1+0.0000001), 0.0, 1.0);
d0 = exp(-10.0*SCANLINES_STRENGTH*d0*d0);
d1 = exp(-10.0*SCANLINES_STRENGTH*d1*d1);
color = clamp(color0x*d0+color1x*d1, 0.0, 1.0);
color *= COLOR_BOOST*vec3(RED_BOOST, GREEN_BOOST, BLUE_BOOST);
float mod_factor = v_texCoord.x * IN.output_size.x * IN.texture_size.x / IN.video_size.x;
vec3 dotMaskWeights = mix(
vec3(1.0, 0.7, 1.0),
vec3(0.7, 1.0, 0.7),
floor(mod(mod_factor, 2.0))
);
color.rgb *= mix(vec3(1.0,1.0,1.0), dotMaskWeights, PHOSPHOR);
color = GAMMA_OUT(color);
gl_FragColor = vec4(color, 1.0);
}
@@ -0,0 +1,15 @@
#ifdef GL_ES
precision mediump float;
#endif
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = a_position;
v_texCoord = a_texCoord;
}
@@ -0,0 +1,4 @@
name=CRT Lottes
version=1
license=Public Domain
copyright=Lottes
@@ -0,0 +1,160 @@
//
// PUBLIC DOMAIN CRT STYLED SCAN-LINE SHADER
//
// by Timothy Lottes
//
// This is more along the style of a really good CGA arcade monitor.
// With RGB inputs instead of NTSC.
// The shadow mask example has the mask rotated 90 degrees for less chromatic aberration.
//
// Left it unoptimized to show the theory behind the algorithm.
//
// It is an example what I personally would want as a display option for pixel art games.
// Please take and use, change, or whatever.
//
#ifdef GL_ES
precision mediump float;
#endif
#define hardScan -8.0
#define hardPix -3.0
#define warpX 0.031
#define warpY 0.041
#define maskDark 0.5
#define maskLight 1.5
#define scaleInLinearGamma 1
#define shadowMask 1.0
#define brightboost 1.0
struct inputdata
{
vec2 video_size;
vec2 texture_size;
vec2 output_size;
float frame_count;
float frame_direction;
float frame_rotation;
};
uniform sampler2D Sample;
varying vec2 v_texCoord;
uniform inputdata IN;
#define warp vec2(warpX,warpY)
//------------------------------------------------------------------------
// sRGB to Linear.
// Assuing using sRGB typed textures this should not be needed.
float ToLinear1(float c)
{
if (scaleInLinearGamma==0) return c;
return(c<=0.04045)?c/12.92:pow((c+0.055)/1.055,2.4);
}
vec3 ToLinear(vec3 c)
{
if (scaleInLinearGamma==0) return c;
return vec3(ToLinear1(c.r),ToLinear1(c.g),ToLinear1(c.b));
}
// Linear to sRGB.
// Assuing using sRGB typed textures this should not be needed.
float ToSrgb1(float c)
{
if (scaleInLinearGamma==0) return c;
return(c<0.0031308?c*12.92:1.055*pow(c,0.41666)-0.055);
}
vec3 ToSrgb(vec3 c)
{
if (scaleInLinearGamma==0) return c;
return vec3(ToSrgb1(c.r),ToSrgb1(c.g),ToSrgb1(c.b));
}
// Nearest emulated sample given floating point position and texel offset.
// Also zero's off screen.
vec3 Fetch(vec2 pos,vec2 off){
pos=(floor(pos*IN.texture_size.xy+off)+vec2(0.5,0.5))/IN.texture_size.xy;
return ToLinear(brightboost * texture2D(Sample,pos.xy).rgb);
}
// Distance in emulated pixels to nearest texel.
vec2 Dist(vec2 pos){pos=pos*IN.texture_size.xy;return -((pos-floor(pos))-vec2(0.5));}
// 1D Gaussian.
float Gaus(float pos,float scale){return exp2(scale*pos*pos);}
// 3-tap Gaussian filter along horz line.
vec3 Horz3(vec2 pos,float off){
vec3 b=Fetch(pos,vec2(-1.0,off));
vec3 c=Fetch(pos,vec2( 0.0,off));
vec3 d=Fetch(pos,vec2( 1.0,off));
float dst=Dist(pos).x;
// Convert distance to weight.
float scale=hardPix;
float wb=Gaus(dst-1.0,scale);
float wc=Gaus(dst+0.0,scale);
float wd=Gaus(dst+1.0,scale);
// Return filtered sample.
return (b*wb+c*wc+d*wd)/(wb+wc+wd);}
// 5-tap Gaussian filter along horz line.
vec3 Horz5(vec2 pos,float off){
vec3 a=Fetch(pos,vec2(-2.0,off));
vec3 b=Fetch(pos,vec2(-1.0,off));
vec3 c=Fetch(pos,vec2( 0.0,off));
vec3 d=Fetch(pos,vec2( 1.0,off));
vec3 e=Fetch(pos,vec2( 2.0,off));
float dst=Dist(pos).x;
// Convert distance to weight.
float scale=hardPix;
float wa=Gaus(dst-2.0,scale);
float wb=Gaus(dst-1.0,scale);
float wc=Gaus(dst+0.0,scale);
float wd=Gaus(dst+1.0,scale);
float we=Gaus(dst+2.0,scale);
// Return filtered sample.
return (a*wa+b*wb+c*wc+d*wd+e*we)/(wa+wb+wc+wd+we);}
// Return scanline weight.
float Scan(vec2 pos,float off){
float dst=Dist(pos).y;
return Gaus(dst+off,hardScan);}
// Allow nearest three lines to effect pixel.
vec3 Tri(vec2 pos){
vec3 a=Horz3(pos,-1.0);
vec3 b=Horz5(pos, 0.0);
vec3 c=Horz3(pos, 1.0);
float wa=Scan(pos,-1.0);
float wb=Scan(pos, 0.0);
float wc=Scan(pos, 1.0);
return a*wa+b*wb+c*wc;}
// Distortion of scanlines, and end of screen alpha.
vec2 Warp(vec2 pos){
pos=pos*2.0-1.0;
pos*=vec2(1.0+(pos.y*pos.y)*warp.x,1.0+(pos.x*pos.x)*warp.y);
return pos*0.5+0.5;}
// Shadow mask.
vec3 Mask(vec2 pos){
pos.x+=pos.y*3.0;
vec3 mask=vec3(maskDark,maskDark,maskDark);
pos.x=fract(pos.x/6.0);
if(pos.x<0.333)mask.r=maskLight;
else if(pos.x<0.666)mask.g=maskLight;
else mask.b=maskLight;
return mask;}
void main()
{
vec2 pos=Warp(v_texCoord.xy*(IN.texture_size.xy/IN.video_size.xy))*(IN.video_size.xy/IN.texture_size.xy);
vec3 outColor = Tri(pos);
if(shadowMask != 0.0)
outColor.rgb*=Mask(floor(v_texCoord.xy*(IN.texture_size.xy/IN.video_size.xy)*IN.output_size.xy)+vec2(0.5,0.5));
gl_FragColor = vec4(ToSrgb(outColor.rgb),1.0);
}
@@ -0,0 +1,9 @@
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = a_position;
v_texCoord = a_texCoord;
}
@@ -0,0 +1,43 @@
// Cartoon shader II
// by guest(r)
// license: GNU-GPL
#ifdef GL_ES
precision mediump float;
#endif
const float th = 0.15; // outlines sensitivity, recommended from 0.00...0.50
const float bb = 1.50; // outlines strength, recommended from 0.50...4.00
const float pp = 1.55; // outlines blackening, recommended from 0.25...2.00
const float cl = 7.00; // color levels, recommended form 2.00...10.0
uniform sampler2D Sample;
varying vec4 TexCoord[8];
void main()
{
vec3 uy = texture2D(Sample, TexCoord[1].xy).xyz;
vec3 lx = texture2D(Sample, TexCoord[4].xy).xyz;
vec3 rx = texture2D(Sample, TexCoord[5].xy).xyz;
vec3 dy = texture2D(Sample, TexCoord[2].xy).xyz;
vec3 ct = texture2D(Sample, TexCoord[0].xy).xyz;
vec3 dt = vec3(1.0,1.0,1.0);
float d1 = 2.5*dot(abs(lx-rx),dt)/(dot(lx+rx,dt)+0.50);
float d2 = 2.5*dot(abs(uy-dy),dt)/(dot(uy+dy,dt)+0.50);
float d = d1 + d2;
float l = cl*length(ct)/1.73;
float p = floor(l);
float v = fract(l);
float t = 0.33;
if (p==0.0) t = 0.6;
v = 0.6*(max(v-1.0+t,0.0))/t;
v = 1.73*(p+v)/cl + 0.05;
gl_FragColor.xyz =(1.12-bb*pow(max(d-th,0.0),pp))*v*normalize(ct);
}
@@ -0,0 +1,31 @@
#ifdef GL_ES
precision mediump float;
#endif
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec4 TexCoord[8];
void main()
{
gl_Position = a_position;
//float x = (OGL2Size.x/2048.0)*OGL2Param.x;
//float y = (OGL2Size.y/1024.0)*OGL2Param.y;
float x = a_texCoord.x/1024.0;
float y = a_texCoord.y/512.0;
vec2 dg1 = vec2( x,y);
vec2 dg2 = vec2(-x,y);
vec2 dx = vec2(x,0.0);
vec2 dy = vec2(0.0,y);
TexCoord[0].xy = a_texCoord;
TexCoord[1].xy = TexCoord[0].xy;
TexCoord[2].xy = TexCoord[0].xy;
TexCoord[4].xy = TexCoord[0].xy;
TexCoord[5].xy = TexCoord[0].xy;
TexCoord[1].y -=y;
TexCoord[2].y +=y;
TexCoord[4].x -=x;
TexCoord[5].x +=x;
}
@@ -0,0 +1,74 @@
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
uniform sampler2D Frame;
uniform vec2 texcoordOffset;
varying vec2 v_texCoord;
const mat3 RGBtoYIQ = mat3(0.299, 0.596, 0.212,
0.587,-0.275,-0.523,
0.114,-0.321, 0.311);
const mat3 YIQtoRGB = mat3(1.0, 1.0, 1.0,
0.95568806036115671171,-0.27158179694405859326,-1.1081773266826619523,
0.61985809445637075388,-0.64687381613840131330, 1.7050645599191817149);
const vec3 val00 = vec3( 1.2, 1.2, 1.2);
void main() {
// The parameters are hardcoded for now, but could be
// made into uniforms to control fromt he program.
float FXAA_SPAN_MAX = 8.0;
float FXAA_REDUCE_MUL = 1.0/8.0;
float FXAA_REDUCE_MIN = (1.0/128.0);
vec3 rgbNW = texture2D(Frame, v_texCoord.xy + (vec2(-1.0, -1.0) * texcoordOffset)).xyz;
vec3 rgbNE = texture2D(Frame, v_texCoord.xy + (vec2(+1.0, -1.0) * texcoordOffset)).xyz;
vec3 rgbSW = texture2D(Frame, v_texCoord.xy + (vec2(-1.0, +1.0) * texcoordOffset)).xyz;
vec3 rgbSE = texture2D(Frame, v_texCoord.xy + (vec2(+1.0, +1.0) * texcoordOffset)).xyz;
vec3 rgbM = texture2D(Frame, v_texCoord.xy).xyz;
vec3 luma = vec3(0.299, 0.587, 0.114);
float lumaNW = dot(rgbNW, luma);
float lumaNE = dot(rgbNE, luma);
float lumaSW = dot(rgbSW, luma);
float lumaSE = dot(rgbSE, luma);
float lumaM = dot(rgbM, luma);
float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));
float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));
vec2 dir;
dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));
dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));
float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) * (0.25 * FXAA_REDUCE_MUL), FXAA_REDUCE_MIN);
float rcpDirMin = 1.0/(min(abs(dir.x), abs(dir.y)) + dirReduce);
dir = min(vec2(FXAA_SPAN_MAX, FXAA_SPAN_MAX),
max(vec2(-FXAA_SPAN_MAX, -FXAA_SPAN_MAX), dir * rcpDirMin)) * texcoordOffset;
vec3 rgbA = (1.0/2.0) * (
texture2D(Frame, v_texCoord.xy + dir * (1.0/3.0 - 0.5)).xyz +
texture2D(Frame, v_texCoord.xy + dir * (2.0/3.0 - 0.5)).xyz);
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
texture2D(Frame, v_texCoord.xy + dir * (0.0/3.0 - 0.5)).xyz +
texture2D(Frame, v_texCoord.xy + dir * (3.0/3.0 - 0.5)).xyz);
float lumaB = dot(rgbB, luma);
if((lumaB < lumaMin) || (lumaB > lumaMax))
{
rgbM = RGBtoYIQ*rgbA;
rgbM = vec3(pow(rgbM.x,val00.x),rgbM.yz*val00.yz);
gl_FragColor.xyz=YIQtoRGB*rgbM;
} else {
rgbM = RGBtoYIQ*rgbB;
rgbM = vec3(pow(rgbM.x,val00.x),rgbM.yz*val00.yz);
gl_FragColor.xyz=YIQtoRGB*rgbM;
}
gl_FragColor.a = 1.0;
}
@@ -0,0 +1,11 @@
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = a_position;
v_texCoord = a_texCoord;
}
@@ -0,0 +1,14 @@
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoord;
uniform sampler2D Frame;
void main()
{
vec4 fragColor = texture2D(Frame, v_texCoord);
float FragColor = dot(fragColor, vec4( 0.299, 0.587, 0.114, 0.0 ));
gl_FragColor = vec4(FragColor);
}
@@ -0,0 +1,9 @@
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec2 v_texCoord;
void main()
{
gl_Position = a_position;
v_texCoord = a_texCoord;
}
+64
View File
@@ -0,0 +1,64 @@
!!ARBfp1.0
PARAM val00 = 1.2;
PARAM RGBtoY = { 0.299, 0.587, 0.114, 0};
PARAM RGBtoI = { 0.596,-0.275,-0.321, 0};
PARAM RGBtoQ = { 0.212,-0.523, 0.311, 0};
PARAM YIQtoR = { 1, 0.95568806036115671171, 0.61985809445637075388, 0};
PARAM YIQtoG = { 1,-0.27158179694405859326,-0.64687381613840131330, 0};
PARAM YIQtoB = { 1,-1.10817732668266195230, 1.70506455991918171490, 0};
TEMP c0, c1;
TEX c0, fragment.texcoord[0], texture[0], 2D;
TEX c1, fragment.texcoord[0].zyzw, texture[0], 2D;
MAD c0, c1, 0.25, c0;
TEX c1, fragment.texcoord[0].xwzw, texture[0], 2D;
MAD c0, c1, 0.25, c0;
TEX c1, fragment.texcoord[0].zwzw, texture[0], 2D;
MAD c0, c1, 0.125, c0;
TEX c1, fragment.texcoord[1], texture[0], 2D;
ADD c0, c1, c0;
TEX c1, fragment.texcoord[1].zyzw, texture[0], 2D;
MAD c0, c1, 0.25, c0;
TEX c1, fragment.texcoord[1].xwzw, texture[0], 2D;
MAD c0, c1, 0.25, c0;
TEX c1, fragment.texcoord[1].zwzw, texture[0], 2D;
MAD c0, c1, 0.125, c0;
TEX c1, fragment.texcoord[2], texture[0], 2D;
ADD c0, c1, c0;
TEX c1, fragment.texcoord[2].zyzw, texture[0], 2D;
MAD c0, c1, 0.25, c0;
TEX c1, fragment.texcoord[2].xwzw, texture[0], 2D;
MAD c0, c1, 0.25, c0;
TEX c1, fragment.texcoord[2].zwzw, texture[0], 2D;
MAD c0, c1, 0.125, c0;␍
TEX c1, fragment.texcoord[3], texture[0], 2D;
ADD c0, c1, c0;
TEX c1, fragment.texcoord[3].zyzw, texture[0], 2D;
MAD c0, c1, 0.25, c0;
TEX c1, fragment.texcoord[3].xwzw, texture[0], 2D;
MAD c0, c1, 0.25, c0;
TEX c1, fragment.texcoord[3].zwzw, texture[0], 2D;
MAD c0, c1, 0.125, c0;
MUL c0, c0, 0.153846153846;
DP3 c1.x, c0, RGBtoY;
DP3 c1.y, c0, RGBtoI;
DP3 c1.z, c0, RGBtoQ;
POW c1.x, c1.x, val00.x;
MUL c1.yz, c1, val00;
DP3 c0.x, c1, YIQtoR;
DP3 c0.y, c1, YIQtoG;
DP3 c0.z, c1, YIQtoB;
MOV result.color, c0;
END
+35
View File
@@ -0,0 +1,35 @@
// ColoredStorybook shader
// by guest(r)
// License: GNU-GPL
uniform sampler2D OGL2Texture;
uniform sampler2D OGL2TMU1;
void main()
{
vec3 paper = texture2D(OGL2TMU1, gl_TexCoord[6].zw).xyz;
vec3 c00 = texture2D(OGL2Texture, gl_TexCoord[5].xy).xyz;
vec3 c10 = texture2D(OGL2Texture, gl_TexCoord[1].xy).xyz;
vec3 c20 = texture2D(OGL2Texture, gl_TexCoord[2].zw).xyz;
vec3 c01 = texture2D(OGL2Texture, gl_TexCoord[3].xy).xyz;
vec3 c11 = texture2D(OGL2Texture, gl_TexCoord[0].xy).xyz;
vec3 c21 = texture2D(OGL2Texture, gl_TexCoord[4].xy).xyz;
vec3 c02 = texture2D(OGL2Texture, gl_TexCoord[1].zw).xyz;
vec3 c12 = texture2D(OGL2Texture, gl_TexCoord[2].xy).xyz;
vec3 c22 = texture2D(OGL2Texture, gl_TexCoord[6].xy).xyz;
vec3 dt = vec3(1.0,1.0,1.0);
c11 = 0.25*(c11+0.5*(c10+c01+c12+c21)+0.25*(c02+c20+c00+c22));
float d1=dot(abs(c00-c22),dt);
float d2=dot(abs(c20-c02),dt);
float hl=dot(abs(c01-c21),dt);
float vl=dot(abs(c10-c12),dt);
float d = 0.60*(d1+d2+hl+vl)/(dot(c11,dt)+0.5);
d = 0.5*pow(d,0.5) + d;
c11 = (1.0-0.6*d)*c11;
gl_FragColor.xyz = mix(paper, c11, pow(max(min(d,1.1)-0.1,0.0),0.5));
}
+26
View File
@@ -0,0 +1,26 @@
// by guest(r) - guest.r@gmail.com
// license: GNU-GPL
uniform vec4 OGL2Param;
uniform vec4 OGL2Size;
void main()
{
float x = (OGL2Size.x/2048.0)*OGL2Param.x;
float y = (OGL2Size.y/1024.0)*OGL2Param.y;
vec2 dg1 = vec2( x,y);
vec2 dg2 = vec2(-x,y);
vec2 dx = vec2(x,0.0);
vec2 dy = vec2(0.0,y);
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_TexCoord[6].zw= gl_MultiTexCoord1.xy;
gl_TexCoord[1].xy = gl_TexCoord[0].xy - dy;
gl_TexCoord[2].xy = gl_TexCoord[0].xy + dy;
gl_TexCoord[3].xy = gl_TexCoord[0].xy - dx;
gl_TexCoord[4].xy = gl_TexCoord[0].xy + dx;
gl_TexCoord[5].xy = gl_TexCoord[0].xy - dg1;
gl_TexCoord[6].xy = gl_TexCoord[0].xy + dg1;
gl_TexCoord[1].zw = gl_TexCoord[0].xy - dg2;
gl_TexCoord[2].zw = gl_TexCoord[0].xy + dg2;
}
+12
View File
@@ -0,0 +1,12 @@
!!ARBvp1.0
OPTION ARB_position_invariant;
PARAM offset = program.env[1];
MAD result.texcoord[ 0 ], offset.xyxy, {-0.5,-0.5,-1.5,-1.5}, vertex.texcoord[0].xyxy;
MAD result.texcoord[ 1 ], offset.xyxy, { 0.5,-0.5, 1.5,-1.5}, vertex.texcoord[0].xyxy;
MAD result.texcoord[ 2 ], offset.xyxy, {-0.5, 0.5,-1.5, 1.5}, vertex.texcoord[0].xyxy;
MAD result.texcoord[ 3 ], offset.xyxy, { 0.5, 0.5, 1.5, 1.5}, vertex.texcoord[0].xyxy;
END
@@ -0,0 +1 @@
delete me
+1
View File
@@ -0,0 +1 @@
erase me
@@ -0,0 +1,5 @@
name=Super Eagle
version=1
license=GPLv2
copyright=Unknown
filter_linear=0
@@ -0,0 +1,147 @@
/* COMPATIBILITY
- HLSL compilers
- Cg compilers
*/
#ifdef GL_ES
precision mediump float;
precision mediump int;
#endif
const vec3 dtt = vec3(65536,255,1);
float reduce(vec3 color)
{
return dot(color, dtt);
}
struct inputdata
{
vec2 video_size;
vec2 texture_size;
vec2 output_size;
float frame_count;
float frame_direction;
float frame_rotation;
};
uniform sampler2D Sample;
uniform inputdata IN;
varying vec4 TexCoord[8];
varying vec2 v_texCoord;
/* GET_RESULT function */
/* Copyright (c) 1999-2001 by Derek Liauw Kie Fa */
/* License: GNU-GPL */
int GET_RESULT(float A, float B, float C, float D)
{
int x = 0; int y = 0; int r = 0;
if (A == C) x+=1; else if (B == C) y+=1;
if (A == D) x+=1; else if (B == D) y+=1;
if (x <= 1) r+=1;
if (y <= 1) r-=1;
return r;
}
void main()
{
vec2 fp = fract(v_texCoord*IN.texture_size);
// Reading the texels
vec3 C0 = texture2D(Sample,TexCoord[0].xy).xyz;
vec3 C1 = texture2D(Sample,TexCoord[0].zw).xyz;
vec3 C2 = texture2D(Sample,TexCoord[1].xy).xyz;
vec3 D3 = texture2D(Sample,TexCoord[1].zw).xyz;
vec3 C3 = texture2D(Sample,TexCoord[2].xy).xyz;
vec3 C4 = texture2D(Sample,v_texCoord).xyz;
vec3 C5 = texture2D(Sample,TexCoord[2].zw).xyz;
vec3 D4 = texture2D(Sample,TexCoord[3].xy).xyz;
vec3 C6 = texture2D(Sample,TexCoord[3].zw).xyz;
vec3 C7 = texture2D(Sample,TexCoord[4].xy).xyz;
vec3 C8 = texture2D(Sample,TexCoord[4].zw).xyz;
vec3 D5 = texture2D(Sample,TexCoord[5].xy).xyz;
vec3 D0 = texture2D(Sample,TexCoord[5].zw).xyz;
vec3 D1 = texture2D(Sample,TexCoord[6].xy).xyz;
vec3 D2 = texture2D(Sample,TexCoord[6].zw).xyz;
vec3 D6 = texture2D(Sample,TexCoord[7].xy).xyz;
vec3 p00,p10,p01,p11;
// reducing vec3 to float
float c0 = reduce(C0);float c1 = reduce(C1);
float c2 = reduce(C2);float c3 = reduce(C3);
float c4 = reduce(C4);float c5 = reduce(C5);
float c6 = reduce(C6);float c7 = reduce(C7);
float c8 = reduce(C8);float d0 = reduce(D0);
float d1 = reduce(D1);float d2 = reduce(D2);
float d3 = reduce(D3);float d4 = reduce(D4);
float d5 = reduce(D5);float d6 = reduce(D6);
/* SuperEagle code */
/* Copied from the Dosbox source code */
/* Copyright (C) 2002-2007 The DOSBox Team */
/* License: GNU-GPL */
/* Adapted by guest(r) on 16.4.2007 */
if (c4 != c8) {
if (c7 == c5) {
p01 = p10 = C7;
if ((c6 == c7) || (c5 == c2)) {
p00 = 0.25*(3.0*C7+C4);
} else {
p00 = 0.5*(C4+C5);
}
if ((c5 == d4) || (c7 == d1)) {
p11 = 0.25*(3.0*C7+C8);
} else {
p11 = 0.5*(C7+C8);
}
} else {
p11 = 0.125*(6.0*C8+C7+C5);
p00 = 0.125*(6.0*C4+C7+C5);
p10 = 0.125*(6.0*C7+C4+C8);
p01 = 0.125*(6.0*C5+C4+C8);
}
} else {
if (c7 != c5) {
p11 = p00 = C4;
if ((c1 == c4) || (c8 == d5)) {
p01 = 0.25*(3.0*C4+C5);
} else {
p01 = 0.5*(C4+C5);
}
if ((c8 == d2) || (c3 == c4)) {
p10 = 0.25*(3.0*C4+C7);
} else {
p10 = 0.5*(C7+C8);
}
} else {
int r = 0;
r += GET_RESULT(c5,c4,c6,d1);
r += GET_RESULT(c5,c4,c3,c1);
r += GET_RESULT(c5,c4,d2,d5);
r += GET_RESULT(c5,c4,c2,d4);
if (r > 0) {
p01 = p10 = C7;
p00 = p11 = 0.5*(C4+C5);
} else if (r < 0) {
p11 = p00 = C4;
p01 = p10 = 0.5*(C4+C5);
} else {
p11 = p00 = C4;
p01 = p10 = C7;
}
}
}
// Distributing the four products
p10 = (fp.x < 0.50) ? (fp.y < 0.50 ? p00 : p10) : (fp.y < 0.50 ? p01: p11);
// OUTPUT
gl_FragColor = vec4(p10, 1);
}
@@ -0,0 +1,44 @@
struct inputdata
{
vec2 video_size;
vec2 texture_size;
vec2 output_size;
float frame_count;
float frame_direction;
float frame_rotation;
};
attribute vec4 a_position;
attribute vec2 a_texCoord;
varying vec4 TexCoord[8];
varying vec2 v_texCoord;
uniform inputdata IN;
void main()
{
gl_Position = a_position;
vec2 ps = vec2(1.0/IN.texture_size.x, 1.0/IN.texture_size.y);
float dx = ps.x;
float dy = ps.y;
v_texCoord = a_texCoord;
TexCoord[0].xy = a_texCoord + vec2(-dx,-dy);
TexCoord[0].zw = a_texCoord + vec2(-dx, 0);
TexCoord[1].xy = a_texCoord + vec2(+dx,-dy);
TexCoord[1].zw = a_texCoord + vec2(+dx+dx,-dy);
TexCoord[2].xy = a_texCoord + vec2(-dx, 0);
TexCoord[2].zw = a_texCoord + vec2(+dx, 0);
TexCoord[3].xy = a_texCoord + vec2(+dx+dx, 0);
TexCoord[3].zw = a_texCoord + vec2(-dx,+dy);
TexCoord[4].xy = a_texCoord + vec2( 0,+dy);
TexCoord[4].zw = a_texCoord + vec2(+dx,+dy);
TexCoord[5].xy = a_texCoord + vec2(+dx+dx,+dy);
TexCoord[5].zw = a_texCoord + vec2(-dx,+dy+dy);
TexCoord[6].xy = a_texCoord + vec2( 0,+dy+dy);
TexCoord[6].zw = a_texCoord + vec2(+dx,+dy+dy);
TexCoord[7].xy = a_texCoord + vec2(+dx+dx,+dy+dy);
}
@@ -0,0 +1,5 @@
name=xBR-LV2-3D
version=1
license=Free
copyright=Hyllian
filter_linear=0
@@ -0,0 +1,266 @@
/*
Hyllian's xBR-lv2-3D Shader
Copyright (C) 2011-2016 Hyllian - sergiogdb@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
Incorporates some of the ideas from SABR shader. Thanks to Joshua Street.
*/
#ifdef GL_ES
precision mediump float;
#endif
#define XBR_RES 2.0
#define TEX_SIZEX (1024.0*XBR_RES)
#define TEX_SIZEY (512.0*XBR_RES)
// Uncomment just one of the three params below to choose the corner detection
//#define CORNER_A
//#define CORNER_B
#define CORNER_C
//#define CORNER_D
#ifndef CORNER_A
#define SMOOTH_TIPS
#endif
#define XBR_SCALE 3.0
#define XBR_Y_WEIGHT 48.0
#define XBR_EQ_THRESHOLD 15.0
#define XBR_LV2_COEFFICIENT 2.0
#define lv2_cf XBR_LV2_COEFFICIENT
const float coef = 2.0;
const vec3 rgbw = vec3(14.352, 28.176, 5.472);
const vec4 eq_threshold = vec4(15.0, 15.0, 15.0, 15.0);
const vec4 delta = vec4(1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE, 1.0/XBR_SCALE);
const vec4 delta_l = vec4(0.5/XBR_SCALE, 1.0/XBR_SCALE, 0.5/XBR_SCALE, 1.0/XBR_SCALE);
const vec4 delta_u = delta_l.yxwz;
const vec2 OGLSize = vec2( 1024.0, 512.0);
const vec2 OGLInvSize = 1.0/OGLSize;
const vec2 dx = vec2( XBR_RES/TEX_SIZEX, 0.0);
const vec2 dy = vec2( 0.0, XBR_RES/TEX_SIZEY);
const vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 Bo = vec4( 1.0, 1.0, -1.0,-1.0 );
const vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
const vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 Bx = vec4( 0.5, 2.0, -0.5,-2.0 );
const vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
const vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
const vec4 By = vec4( 2.0, 0.5, -2.0,-0.5 );
const vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
const vec4 Ci = vec4(0.25, 0.25, 0.25, 0.25);
// Difference between vector components.
vec4 df(vec4 A, vec4 B)
{
return vec4(abs(A-B));
}
// Compare two vectors and return their components are different.
vec4 diff(vec4 A, vec4 B)
{
return vec4(notEqual(A, B));
}
// Determine if two vector components are equal based on a threshold.
vec4 eq(vec4 A, vec4 B)
{
return (step(df(A, B), vec4(XBR_EQ_THRESHOLD)));
}
// Determine if two vector components are NOT equal based on a threshold.
vec4 neq(vec4 A, vec4 B)
{
return (vec4(1.0, 1.0, 1.0, 1.0) - eq(A, B));
}
// Weighted distance.
vec4 wd(vec4 a, vec4 b, vec4 c, vec4 d, vec4 e, vec4 f, vec4 g, vec4 h)
{
return (df(a,b) + df(a,c) + df(d,e) + df(d,f) + 4.0*df(g,h));
}
float c_df(vec3 c1, vec3 c2)
{
vec3 df = abs(c1 - c2);
return df.r + df.g + df.b;
}
uniform sampler2D Sample;
varying vec4 TexCoord[8];
void main()
{
vec4 edri, edr, edr_l, edr_u, px; // px = pixel, edr = edge detection rule
vec4 irlv0, irlv1, irlv2l, irlv2u, block_3d;
vec4 fx, fx_l, fx_u; // inequations of straight lines.
vec2 fp = fract(TexCoord[0].xy*OGLSize);
vec2 TexCoord_0 = TexCoord[0].xy;
vec2 tex = (floor(TexCoord_0*OGLSize) + vec2(0.5, 0.5))/OGLSize;
vec3 A1 = texture2D(Sample, TexCoord[1].xw ).xyz;
vec3 B1 = texture2D(Sample, TexCoord[1].yw ).xyz;
vec3 C1 = texture2D(Sample, TexCoord[1].zw ).xyz;
vec3 A = texture2D(Sample, TexCoord[2].xw ).xyz;
vec3 B = texture2D(Sample, TexCoord[2].yw ).xyz;
vec3 C = texture2D(Sample, TexCoord[2].zw ).xyz;
vec3 D = texture2D(Sample, TexCoord[3].xw ).xyz;
vec3 E = texture2D(Sample, TexCoord[3].yw ).xyz;
vec3 F = texture2D(Sample, TexCoord[3].zw ).xyz;
vec3 G = texture2D(Sample, TexCoord[4].xw ).xyz;
vec3 H = texture2D(Sample, TexCoord[4].yw ).xyz;
vec3 I = texture2D(Sample, TexCoord[4].zw ).xyz;
vec3 G5 = texture2D(Sample, TexCoord[5].xw ).xyz;
vec3 H5 = texture2D(Sample, TexCoord[5].yw ).xyz;
vec3 I5 = texture2D(Sample, TexCoord[5].zw ).xyz;
vec3 A0 = texture2D(Sample, TexCoord[6].xy ).xyz;
vec3 D0 = texture2D(Sample, TexCoord[6].xz ).xyz;
vec3 G0 = texture2D(Sample, TexCoord[6].xw ).xyz;
vec3 C4 = texture2D(Sample, TexCoord[7].xy ).xyz;
vec3 F4 = texture2D(Sample, TexCoord[7].xz ).xyz;
vec3 I4 = texture2D(Sample, TexCoord[7].xw ).xyz;
vec3 E6 = texture2D(Sample, tex +0.25*dx +0.25*dy).xyz;
vec3 E7 = texture2D(Sample, tex +0.25*dx -0.25*dy).xyz;
vec3 E8 = texture2D(Sample, tex -0.25*dx -0.25*dy).xyz;
vec3 E9 = texture2D(Sample, tex -0.25*dx +0.25*dy).xyz;
vec3 F6 = texture2D(Sample, tex +dx+0.25*dx +0.25*dy).xyz;
vec3 F7 = texture2D(Sample, tex +dx+0.25*dx -0.25*dy).xyz;
vec3 F8 = texture2D(Sample, tex +dx-0.25*dx -0.25*dy).xyz;
vec3 F9 = texture2D(Sample, tex +dx-0.25*dx +0.25*dy).xyz;
vec3 B6 = texture2D(Sample, tex +0.25*dx +0.25*dy-dy).xyz;
vec3 B7 = texture2D(Sample, tex +0.25*dx -0.25*dy-dy).xyz;
vec3 B8 = texture2D(Sample, tex -0.25*dx -0.25*dy-dy).xyz;
vec3 B9 = texture2D(Sample, tex -0.25*dx +0.25*dy-dy).xyz;
vec3 D6 = texture2D(Sample, tex -dx+0.25*dx +0.25*dy).xyz;
vec3 D7 = texture2D(Sample, tex -dx+0.25*dx -0.25*dy).xyz;
vec3 D8 = texture2D(Sample, tex -dx-0.25*dx -0.25*dy).xyz;
vec3 D9 = texture2D(Sample, tex -dx-0.25*dx +0.25*dy).xyz;
vec3 H6 = texture2D(Sample, tex +0.25*dx +0.25*dy+dy).xyz;
vec3 H7 = texture2D(Sample, tex +0.25*dx -0.25*dy+dy).xyz;
vec3 H8 = texture2D(Sample, tex -0.25*dx -0.25*dy+dy).xyz;
vec3 H9 = texture2D(Sample, tex -0.25*dx +0.25*dy+dy).xyz;
vec4 b = vec4(dot(B ,rgbw), dot(D ,rgbw), dot(H ,rgbw), dot(F ,rgbw));
vec4 c = vec4(dot(C ,rgbw), dot(A ,rgbw), dot(G ,rgbw), dot(I ,rgbw));
vec4 d = b.yzwx;
vec4 e = vec4(dot(E,rgbw));
vec4 f = b.wxyz;
vec4 g = c.zwxy;
vec4 h = b.zwxy;
vec4 i = c.wxyz;
vec4 i4 = vec4(dot(I4,rgbw), dot(C1,rgbw), dot(A0,rgbw), dot(G5,rgbw));
vec4 i5 = vec4(dot(I5,rgbw), dot(C4,rgbw), dot(A1,rgbw), dot(G0,rgbw));
vec4 h5 = vec4(dot(H5,rgbw), dot(F4,rgbw), dot(B1,rgbw), dot(D0,rgbw));
vec4 f4 = h5.yzwx;
vec4 f0 = vec4(dot(F6,rgbw), dot(B6,rgbw), dot(D6,rgbw), dot(H6,rgbw));
vec4 f1 = vec4(dot(F7,rgbw), dot(B7,rgbw), dot(D7,rgbw), dot(H7,rgbw));
vec4 f2 = vec4(dot(F8,rgbw), dot(B8,rgbw), dot(D8,rgbw), dot(H8,rgbw));
vec4 f3 = vec4(dot(F9,rgbw), dot(B9,rgbw), dot(D9,rgbw), dot(H9,rgbw));
vec4 h0 = f0.wxyz;
vec4 h1 = f1.wxyz;
vec4 h2 = f2.wxyz;
vec4 h3 = f3.wxyz;
vec4 e0 = vec4(dot(E6,rgbw), dot(E7,rgbw), dot(E8,rgbw), dot(E9,rgbw));
// These inequations define the line below which interpolation occurs.
fx = (Ao*fp.y+Bo*fp.x);
fx_l = (Ax*fp.y+Bx*fp.x);
fx_u = (Ay*fp.y+By*fp.x);
block_3d = vec4(equal(f0,f1))*vec4(equal(f1,f2))*vec4(equal(f2,f3))*vec4(equal(h0,h1))*vec4(equal(h1,h2))*vec4(equal(h2,h3));
irlv1 = irlv0 = block_3d * diff(e,f) * diff(e,h);
#ifdef CORNER_B
irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) );
#endif
#ifdef CORNER_D
vec4 c1 = i4.yzwx;
vec4 g0 = i5.wxyz;
irlv1 = (irlv0 * ( neq(f,b) * neq(h,d) + eq(e,i) * neq(f,i4) * neq(h,i5) + eq(e,g) + eq(e,c) ) * (diff(f,f4) * diff(f,i) + diff(h,h5) * diff(h,i) + diff(h,g) + diff(f,c) + eq(b,c1) * eq(d,g0)));
#endif
#ifdef CORNER_C
irlv1 = (irlv0 * ( neq(f,b) * neq(f,c) + neq(h,d) * neq(h,g) + eq(e,i) * (neq(f,f4) * neq(f,i4) + neq(h,h5) * neq(h,i5)) + eq(e,g) + eq(e,c)) );
#endif
irlv2l = diff(e,g) * diff(d,g);
irlv2u = diff(e,c) * diff(b,c);
vec4 fx45i = clamp((fx + delta -Co - Ci)/(2.0*delta ), 0.0, 1.0);
vec4 fx45 = clamp((fx + delta -Co )/(2.0*delta ), 0.0, 1.0);
vec4 fx30 = clamp((fx_l + delta_l -Cx )/(2.0*delta_l), 0.0, 1.0);
vec4 fx60 = clamp((fx_u + delta_u -Cy )/(2.0*delta_u), 0.0, 1.0);
vec4 wd1 = wd( e, c, g, i, h5, f4, h, f);
vec4 wd2 = wd( h, d, i5, f, i4, b, e, i);
edri = step(wd1, wd2) * irlv0;
edr = step(wd1 + vec4(0.1, 0.1, 0.1, 0.1), wd2) * step(vec4(0.5, 0.5, 0.5, 0.5), irlv1);
edr_l = step( lv2_cf*df(f,g), df(h,c) ) * irlv2l * edr;
edr_u = step( lv2_cf*df(h,c), df(f,g) ) * irlv2u * edr;
fx45 = edr * fx45;
fx30 = edr_l * fx30;
fx60 = edr_u * fx60;
fx45i = edri * fx45i;
px = step(df(e,f), df(e,h));
#ifdef SMOOTH_TIPS
vec4 maximos = max(max(fx30, fx60), max(fx45, fx45i));
#endif
#ifndef SMOOTH_TIPS
vec4 maximos = max(max(fx30, fx60), fx45);
#endif
vec3 res1 = E;
res1 = mix(res1, mix(H, F, px.x), maximos.x);
res1 = mix(res1, mix(B, D, px.z), maximos.z);
vec3 res2 = E;
res2 = mix(res2, mix(F, B, px.y), maximos.y);
res2 = mix(res2, mix(D, H, px.w), maximos.w);
vec3 res = mix(res1, res2, step(c_df(E, res1), c_df(E, res2)));
gl_FragColor.xyz = res;
}
@@ -0,0 +1,32 @@
struct inputdata
{
vec2 video_size;
vec2 texture_size;
vec2 output_size;
float frame_count;
float frame_direction;
float frame_rotation;
};
attribute vec4 a_position;
attribute vec2 a_texCoord;
uniform inputdata IN;
varying vec4 TexCoord[8];
void main()
{
const vec2 OGLSize = vec2( 1024.0, 512.0);
vec2 OGLInvSize = 1.0/OGLSize;
float dx = OGLInvSize.x;
float dy = OGLInvSize.y;
gl_Position = a_position;
TexCoord[0].xy = a_texCoord;
TexCoord[1] = TexCoord[0].xxxy + vec4( -dx, 0, dx,-2.0*dy); // A1 B1 C1
TexCoord[2] = TexCoord[0].xxxy + vec4( -dx, 0, dx, -dy); // A B C
TexCoord[3] = TexCoord[0].xxxy + vec4( -dx, 0, dx, 0); // D E F
TexCoord[4] = TexCoord[0].xxxy + vec4( -dx, 0, dx, dy); // G H I
TexCoord[5] = TexCoord[0].xxxy + vec4( -dx, 0, dx, 2.0*dy); // G5 H5 I5
TexCoord[6] = TexCoord[0].xyyy + vec4(-2.0*dx,-dy, 0, dy); // A0 D0 G0
TexCoord[7] = TexCoord[0].xyyy + vec4( 2.0*dx,-dy, 0, dy); // C4 F4 I4
}
+542 -3
View File
@@ -1,8 +1,8 @@
{
"schema_version": 1,
"generated_at": "2026-08-11T17:14:33Z",
"total_files": 8655,
"total_size": 11147355425,
"generated_at": "2026-08-11T17:20:13Z",
"total_files": 8685,
"total_size": 11147432390,
"files": {
"520d3d1b5897800af47f92efd2444a26b7a7dead": {
"path": "bios/3DO Company/3DO/3do_arcade_saot.bin",
@@ -49917,6 +49917,306 @@
"crc32": "69dc25d7",
"adler32": "9f4b472e"
},
"5f589f6b1845927141dac09f6c2b050624ef2d03": {
"path": "bios/Other/epsxe/shaders/5xBR-v3.7c/gpuCore.ini",
"name": "gpuCore.ini",
"size": 83,
"sha1": "5f589f6b1845927141dac09f6c2b050624ef2d03",
"md5": "ff44a27f0cf1148cfa87ba17545180cc",
"sha256": "d1ef814cb6314357d43089f67a6808df563577604b598da7fc4697cfbe08df50",
"crc32": "dc249b13",
"adler32": "ae4c1d07"
},
"a5c69c5c3fde3f6fd5cce8e79efa3ef96a6add01": {
"path": "bios/Other/epsxe/shaders/5xBR-v3.7c/gpuCore.slf",
"name": "gpuCore.slf",
"size": 20868,
"sha1": "a5c69c5c3fde3f6fd5cce8e79efa3ef96a6add01",
"md5": "49ac87eb7a9260da61f836bde9c46c0e",
"sha256": "0a7a10c278ec13ae37192d15484bacc646bca67e2aae64fab39cd78dda1547cc",
"crc32": "e24efa44",
"adler32": "121066ae"
},
"073a34b093054d217029f7314a2b8142e1dac6b7": {
"path": "bios/Other/epsxe/shaders/5xBR-v3.7c/gpuCore.slv",
"name": "gpuCore.slv",
"size": 153,
"sha1": "073a34b093054d217029f7314a2b8142e1dac6b7",
"md5": "2479682ae26ccb07b37835db0f65fa63",
"sha256": "92f06e873b6ca0affd4029ba646c58ae60a47471f7123047c08b2fe3ad45fc41",
"crc32": "e454f02d",
"adler32": "6f9e34f1"
},
"54644d6ec012bcbf9030b369a2fb4dfbedfa511f": {
"path": "bios/Other/epsxe/shaders/AA_Shader_v2.0_w_Natural_Vision/gpuCore.slf",
"name": "gpuCore.slf",
"size": 2360,
"sha1": "54644d6ec012bcbf9030b369a2fb4dfbedfa511f",
"md5": "9ec7c9b77a9cbb2181ab7d6ec904b1e0",
"sha256": "70b69879b7583ee3bbcfdddc106a59e5ed66581914bfa2ad1f82285654c5f2a0",
"crc32": "a509c794",
"adler32": "088e9c68"
},
"dcd9f24f47443ec8421e48fef7e37fd8a52c4782": {
"path": "bios/Other/epsxe/shaders/AA_Shader_v2.0_w_Natural_Vision/gpuCore.slv",
"name": "gpuCore.slv",
"size": 762,
"sha1": "dcd9f24f47443ec8421e48fef7e37fd8a52c4782",
"md5": "c1896b87729b76ba2a4a289125466e82",
"sha256": "23ecd34d71b69e2d41b71ca66220792310c26e6799db9351e26cdae287a2f406",
"crc32": "6b725715",
"adler32": "3841e51f"
},
"10de0e6e7f616b67f7aced4fa51a55af9d9fb046": {
"path": "bios/Other/epsxe/shaders/AA_Shader_v2.0_w_Natural_Vision_Brightness/gpuCore.slf",
"name": "gpuCore.slf",
"size": 5295,
"sha1": "10de0e6e7f616b67f7aced4fa51a55af9d9fb046",
"md5": "3a1874705e39880bc5556261d6e71744",
"sha256": "56f2d9af2060f2f0fd6c2acdccbe57f77a0609a2cfb3f2e324b3c3a4fe704e49",
"crc32": "04e29286",
"adler32": "d692ac82"
},
"c966a738bffbe6f5017684318b26f66899e620f4": {
"path": "bios/Other/epsxe/shaders/Brightness/gpuCore.ini",
"name": "gpuCore.ini",
"size": 59,
"sha1": "c966a738bffbe6f5017684318b26f66899e620f4",
"md5": "b037a7f8e506108db89a9111766e897e",
"sha256": "06fac91ea6fe36e3e41780da7d631a575893c9dfb56f1369dc639a97c2fc9270",
"crc32": "579d5d7c",
"adler32": "8c74150f"
},
"036e58e46d7264e2d6b08f48bde8b2d83361a661": {
"path": "bios/Other/epsxe/shaders/Brightness/gpuCore.slf",
"name": "gpuCore.slf",
"size": 3089,
"sha1": "036e58e46d7264e2d6b08f48bde8b2d83361a661",
"md5": "1b37c6b0835d045c86a062267c843e2f",
"sha256": "a184f3e62cf87caa00d1e9c044587cb5244567369a5edab5c1dbec43edba3ff3",
"crc32": "5ebc2ad4",
"adler32": "42784330"
},
"687540a168728baf3babaf2dedf74b5f1d2f56b4": {
"path": "bios/Other/epsxe/shaders/CRT-Hyllian/gpuCore.ini",
"name": "gpuCore.ini",
"size": 74,
"sha1": "687540a168728baf3babaf2dedf74b5f1d2f56b4",
"md5": "f91347f046724ad7d0d4f4315a8378a1",
"sha256": "32db4e009959b5606e3d3153d9cd4c0e1a84312bf07848b595eaec0190ea6b9b",
"crc32": "b01d11f1",
"adler32": "e68d1ab5"
},
"f0e3d77db14b4dd11aa7cc71613097600d3e5da3": {
"path": "bios/Other/epsxe/shaders/CRT-Hyllian/gpuCore.slf",
"name": "gpuCore.slf",
"size": 6021,
"sha1": "f0e3d77db14b4dd11aa7cc71613097600d3e5da3",
"md5": "b3ec1b57cf72c14f0e945cd054d44d11",
"sha256": "8b39bd12aae661165fc35eb2627c1ea4d7cc26fef179fe2e772abb412bf94e5b",
"crc32": "e0c2acb6",
"adler32": "5da07f7b"
},
"cda44c87be8b01c7ba23e2ad09a516d1747dee9b": {
"path": "bios/Other/epsxe/shaders/CRT-Hyllian/gpuCore.slv",
"name": "gpuCore.slv",
"size": 201,
"sha1": "cda44c87be8b01c7ba23e2ad09a516d1747dee9b",
"md5": "1184808df8031b080289ccdb5b17ba6b",
"sha256": "9f63333b425c697048c6804d7f30f9a653570143eb897758c7c9fb9d3d8e119c",
"crc32": "41169e0a",
"adler32": "98f8446f"
},
"56ad43fc57833eefb116af581c9ad034c53778ee": {
"path": "bios/Other/epsxe/shaders/CRT-Hyllian-3D/gpuCore.ini",
"name": "gpuCore.ini",
"size": 70,
"sha1": "56ad43fc57833eefb116af581c9ad034c53778ee",
"md5": "b6b4e84b236221b2ece84dc5c1e4f154",
"sha256": "939ac6a08f181b926ed074f83342ff4043ec7237267652ff163650f23852de61",
"crc32": "7d4623fc",
"adler32": "5ea218ca"
},
"a582843e7dac4735392fe82fdf3e6fef88f7ff66": {
"path": "bios/Other/epsxe/shaders/CRT-Hyllian-3D/gpuCore.slf",
"name": "gpuCore.slf",
"size": 10438,
"sha1": "a582843e7dac4735392fe82fdf3e6fef88f7ff66",
"md5": "72ac4fd9b61c086d9836486c2f750be2",
"sha256": "32e45e1a9cd471bdcf7c0f1b77a425cdda265726e58e2c5a703c27bb343a52ec",
"crc32": "9c4acf63",
"adler32": "c192c0f0"
},
"0f6b69ace5bcd59ba3641bb4d833e120e93eb8dd": {
"path": "bios/Other/epsxe/shaders/CRT-Lottes/gpuCore.ini",
"name": "gpuCore.ini",
"size": 65,
"sha1": "0f6b69ace5bcd59ba3641bb4d833e120e93eb8dd",
"md5": "f58606c167af7d2b961a06bab8632bd0",
"sha256": "bb046bc18f6e1e78713e5d6f5a5c58a5b4969fe1488f41df6ef9ee0c1f82dcaf",
"crc32": "9aea70ac",
"adler32": "ff951787"
},
"c06f5745e3ecc0b33e802877b46352d8304b81bc": {
"path": "bios/Other/epsxe/shaders/CRT-Lottes/gpuCore.slf",
"name": "gpuCore.slf",
"size": 4400,
"sha1": "c06f5745e3ecc0b33e802877b46352d8304b81bc",
"md5": "c6fc241947fcc671b0ed1fc2dd3baa99",
"sha256": "db1955fb12093a469f62f30ae4995663436707149a0bd0212494840b2f52c383",
"crc32": "1979f565",
"adler32": "55c27219"
},
"501c31d7614583f6b1f25eb57f67d35343e6dff8": {
"path": "bios/Other/epsxe/shaders/Cartoon_shader_II/gpuCore.slf",
"name": "gpuCore.slf",
"size": 1171,
"sha1": "501c31d7614583f6b1f25eb57f67d35343e6dff8",
"md5": "e97109bf49fd31e3f60e2081baf73f5f",
"sha256": "adc966ee2b7e1d61515f49890ddd67cebf6335fe0e8cfb6f6fc6fa2a69a9db11",
"crc32": "dbade009",
"adler32": "96ba5c12"
},
"339af29d54a62a8d6ddea059d01a1c71dceb741f": {
"path": "bios/Other/epsxe/shaders/Cartoon_shader_II/gpuCore.slv",
"name": "gpuCore.slv",
"size": 707,
"sha1": "339af29d54a62a8d6ddea059d01a1c71dceb741f",
"md5": "c0406730f8e7e0048ab29df2b55aea8b",
"sha256": "8205995b3aea42b98adbe8ad99e28a5edfdbc711e74a5e33da045bfa1da4428c",
"crc32": "e7e004f8",
"adler32": "1838d52f"
},
"b7165607add6023abb9291e3ae80053865ab4a15": {
"path": "bios/Other/epsxe/shaders/FXAA_natural_vision/gpuCore.slf",
"name": "gpuCore.slf",
"size": 2763,
"sha1": "b7165607add6023abb9291e3ae80053865ab4a15",
"md5": "d9e9b284f38ac79e8e52ed8673a704b0",
"sha256": "a175f11b2188b4001c51bb548763d92a052211fb7b84cc82e2f492956d9623ec",
"crc32": "bdca044b",
"adler32": "79dd02db"
},
"d0d06fca34ac14d021175be133af413bdbecdf9c": {
"path": "bios/Other/epsxe/shaders/FXAA_natural_vision/gpuCore.slv",
"name": "gpuCore.slv",
"size": 155,
"sha1": "d0d06fca34ac14d021175be133af413bdbecdf9c",
"md5": "31c8eac7f0eff22599ec31852a151865",
"sha256": "7160ce15161d0a36f8dc5168b8368a0fc8e2238d40635a3c7be8cccfa884746f",
"crc32": "872429df",
"adler32": "d0fc3505"
},
"efa8ae5ed06eba9d4020ff81dc612bf934261803": {
"path": "bios/Other/epsxe/shaders/Grayscale/gpuCore.slf",
"name": "gpuCore.slf",
"size": 261,
"sha1": "efa8ae5ed06eba9d4020ff81dc612bf934261803",
"md5": "0d10522eadd5aea406edc29da9d5a6ee",
"sha256": "5e4bfe61cbf89579716b32559d8b92ac733623a414dd0c405894a36ab9457a0f",
"crc32": "81621cda",
"adler32": "123e5384"
},
"f69915f13de626f3c35bc67c8069720a9a0ea853": {
"path": "bios/Other/epsxe/shaders/gpuPeteOGL2.slf",
"name": "gpuPeteOGL2.slf",
"size": 1136,
"sha1": "f69915f13de626f3c35bc67c8069720a9a0ea853",
"md5": "cc93bcc8c516e0196f2652b8d9b9eeb5",
"sha256": "46cd5cf17654fb5730f1f557a4f864b1cc4d89031906ed5848b21468a5fb5c74",
"crc32": "65ba738e",
"adler32": "cfee53b5"
},
"fbb4cd76cee5ce70539da8cd24df370bfac1b8a2": {
"path": "bios/Other/epsxe/shaders/gpuPeteOGL2.slv",
"name": "gpuPeteOGL2.slv",
"size": 806,
"sha1": "fbb4cd76cee5ce70539da8cd24df370bfac1b8a2",
"md5": "a4b16b09d8bce6714a919325ffc9a43f",
"sha256": "c113ff0790ba6454089035036f448c261dc4742a3c28bc42f756beddaa8ff3fb",
"crc32": "ed4adc00",
"adler32": "da5cfeff"
},
"61f09b64c64964cacfec0833f04968a08f7da464": {
"path": "bios/Other/epsxe/shaders/gpucore/delete.me",
"name": "delete.me",
"size": 10,
"sha1": "61f09b64c64964cacfec0833f04968a08f7da464",
"md5": "2e7d76c347da6740e153d154b9064f33",
"sha256": "e33dbd20d732ad6d5c1f8228c36213c9385547f29b4746940bdaccfd52852a21",
"crc32": "aabbe87a",
"adler32": "14ee0370"
},
"a36992809f946cba845dbe4a8cdc4ee79e413bc0": {
"path": "bios/Other/epsxe/shaders/ogl2/erase.me",
"name": "erase.me",
"size": 9,
"sha1": "a36992809f946cba845dbe4a8cdc4ee79e413bc0",
"md5": "9bc925ed58fe4063cb885b9f8752dcb5",
"sha256": "efe376ead6f70831db442679dcbd211a1d34065617f9cfae75bee791765088ff",
"crc32": "f74f071a",
"adler32": "1113030d"
},
"339d7581e1a70f8fb287e5a572f6388f5bc00534": {
"path": "bios/Other/epsxe/shaders/super-eagle/gpuCore.ini",
"name": "gpuCore.ini",
"size": 75,
"sha1": "339d7581e1a70f8fb287e5a572f6388f5bc00534",
"md5": "342787edcff4c9bca0725377030b739a",
"sha256": "86c90b07233a952df257ca1eb6b54539bca5d4320d649c8088ad0f41085dcc63",
"crc32": "afc20232",
"adler32": "06c41b10"
},
"b757316e1cd39bad4e5045480350b7e44903efc8": {
"path": "bios/Other/epsxe/shaders/super-eagle/gpuCore.slf",
"name": "gpuCore.slf",
"size": 3977,
"sha1": "b757316e1cd39bad4e5045480350b7e44903efc8",
"md5": "63346f9c4d4c71f6d592988e024d810d",
"sha256": "3ee27e57524c2cbad894d6c8c2508b8459eee236555ed1272dcb83e1f390f7f6",
"crc32": "e23a78d7",
"adler32": "369f0225"
},
"ab6dc8c5ba131d3cc827063081b3bd29f650ba90": {
"path": "bios/Other/epsxe/shaders/super-eagle/gpuCore.slv",
"name": "gpuCore.slv",
"size": 1214,
"sha1": "ab6dc8c5ba131d3cc827063081b3bd29f650ba90",
"md5": "5f4bd62ead81e179f200d8c61e223d31",
"sha256": "8868a3c4d98538d0869537c4f6c1b27cd14cad06978e3acbef695c0ececd79e4",
"crc32": "a27ddd49",
"adler32": "f7b47df6"
},
"a9b9ed5fab307250a69a12ebce4bc44786b8b453": {
"path": "bios/Other/epsxe/shaders/xBR-LV2-3D/gpuCore.ini",
"name": "gpuCore.ini",
"size": 73,
"sha1": "a9b9ed5fab307250a69a12ebce4bc44786b8b453",
"md5": "fda0237b2046adf21d66b7fb5ac441ae",
"sha256": "db84ab7b4cc327c1ac4513a982e8b2c39bd5ddf64f15d70178f6a94ffdcdef48",
"crc32": "eff8698a",
"adler32": "9c92198c"
},
"90943fbcd3c23104fcdf7aed70df1e7752f39271": {
"path": "bios/Other/epsxe/shaders/xBR-LV2-3D/gpuCore.slf",
"name": "gpuCore.slf",
"size": 9708,
"sha1": "90943fbcd3c23104fcdf7aed70df1e7752f39271",
"md5": "ec51495fc1c0606a9e2f57bca6602f5a",
"sha256": "a9d7bfddd60c805878707f115e753e494e27ffaa879190dc045ef2eeb120f647",
"crc32": "4a2a86d7",
"adler32": "6966ce2c"
},
"7eea41770e156b05ddde4195954b5a468f163cdd": {
"path": "bios/Other/epsxe/shaders/xBR-LV2-3D/gpuCore.slv",
"name": "gpuCore.slv",
"size": 962,
"sha1": "7eea41770e156b05ddde4195954b5a468f163cdd",
"md5": "ac7ab73a8c909c61551b2c82f906921e",
"sha256": "89e80f1cb14de9a185ed46f9f4777649d0d8f19a4ac3d2cfe5157f427188f2fd",
"crc32": "50c5f498",
"adler32": "d9b822e7"
},
"84d422b53547271e3a07342704a05ef481db3f99": {
"path": "bios/Other/fbneo/136032.101.e3",
"name": "136032.101.e3",
@@ -96302,6 +96602,36 @@
"8fbeeb5c09477bcaf614087003df61a4": "808b7b46bfb033c7fe4d94d0dbf5a271de30dedc",
"b0bdec53b1c50873ba45539565f1327c": "a848aad1840c7d85bfcdd552521a7181b00331cc",
"ec6b58f723279afe732b7f9660acf27d": "9b2704655a893ff1675d28df4bd9ffc9e15d3dd5",
"ff44a27f0cf1148cfa87ba17545180cc": "5f589f6b1845927141dac09f6c2b050624ef2d03",
"49ac87eb7a9260da61f836bde9c46c0e": "a5c69c5c3fde3f6fd5cce8e79efa3ef96a6add01",
"2479682ae26ccb07b37835db0f65fa63": "073a34b093054d217029f7314a2b8142e1dac6b7",
"9ec7c9b77a9cbb2181ab7d6ec904b1e0": "54644d6ec012bcbf9030b369a2fb4dfbedfa511f",
"c1896b87729b76ba2a4a289125466e82": "dcd9f24f47443ec8421e48fef7e37fd8a52c4782",
"3a1874705e39880bc5556261d6e71744": "10de0e6e7f616b67f7aced4fa51a55af9d9fb046",
"b037a7f8e506108db89a9111766e897e": "c966a738bffbe6f5017684318b26f66899e620f4",
"1b37c6b0835d045c86a062267c843e2f": "036e58e46d7264e2d6b08f48bde8b2d83361a661",
"f91347f046724ad7d0d4f4315a8378a1": "687540a168728baf3babaf2dedf74b5f1d2f56b4",
"b3ec1b57cf72c14f0e945cd054d44d11": "f0e3d77db14b4dd11aa7cc71613097600d3e5da3",
"1184808df8031b080289ccdb5b17ba6b": "cda44c87be8b01c7ba23e2ad09a516d1747dee9b",
"b6b4e84b236221b2ece84dc5c1e4f154": "56ad43fc57833eefb116af581c9ad034c53778ee",
"72ac4fd9b61c086d9836486c2f750be2": "a582843e7dac4735392fe82fdf3e6fef88f7ff66",
"f58606c167af7d2b961a06bab8632bd0": "0f6b69ace5bcd59ba3641bb4d833e120e93eb8dd",
"c6fc241947fcc671b0ed1fc2dd3baa99": "c06f5745e3ecc0b33e802877b46352d8304b81bc",
"e97109bf49fd31e3f60e2081baf73f5f": "501c31d7614583f6b1f25eb57f67d35343e6dff8",
"c0406730f8e7e0048ab29df2b55aea8b": "339af29d54a62a8d6ddea059d01a1c71dceb741f",
"d9e9b284f38ac79e8e52ed8673a704b0": "b7165607add6023abb9291e3ae80053865ab4a15",
"31c8eac7f0eff22599ec31852a151865": "d0d06fca34ac14d021175be133af413bdbecdf9c",
"0d10522eadd5aea406edc29da9d5a6ee": "efa8ae5ed06eba9d4020ff81dc612bf934261803",
"cc93bcc8c516e0196f2652b8d9b9eeb5": "f69915f13de626f3c35bc67c8069720a9a0ea853",
"a4b16b09d8bce6714a919325ffc9a43f": "fbb4cd76cee5ce70539da8cd24df370bfac1b8a2",
"2e7d76c347da6740e153d154b9064f33": "61f09b64c64964cacfec0833f04968a08f7da464",
"9bc925ed58fe4063cb885b9f8752dcb5": "a36992809f946cba845dbe4a8cdc4ee79e413bc0",
"342787edcff4c9bca0725377030b739a": "339d7581e1a70f8fb287e5a572f6388f5bc00534",
"63346f9c4d4c71f6d592988e024d810d": "b757316e1cd39bad4e5045480350b7e44903efc8",
"5f4bd62ead81e179f200d8c61e223d31": "ab6dc8c5ba131d3cc827063081b3bd29f650ba90",
"fda0237b2046adf21d66b7fb5ac441ae": "a9b9ed5fab307250a69a12ebce4bc44786b8b453",
"ec51495fc1c0606a9e2f57bca6602f5a": "90943fbcd3c23104fcdf7aed70df1e7752f39271",
"ac7ab73a8c909c61551b2c82f906921e": "7eea41770e156b05ddde4195954b5a468f163cdd",
"dc1aa189468255e644e44b99ad7da49c": "84d422b53547271e3a07342704a05ef481db3f99",
"fc90330915e7c494898615eb58689d68": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
"c4abdbe2a64c2ef06b6b659f32ea883f": "0a42a4816c89447b16e1f3245409591efea98a4a",
@@ -113628,6 +113958,50 @@
"games.db": [
"0e2ee74d1f9ebc3a6faf9dbaebbacc2ff053f4df"
],
"gpuCore.ini": [
"5f589f6b1845927141dac09f6c2b050624ef2d03",
"c966a738bffbe6f5017684318b26f66899e620f4",
"687540a168728baf3babaf2dedf74b5f1d2f56b4",
"56ad43fc57833eefb116af581c9ad034c53778ee",
"0f6b69ace5bcd59ba3641bb4d833e120e93eb8dd",
"339d7581e1a70f8fb287e5a572f6388f5bc00534",
"a9b9ed5fab307250a69a12ebce4bc44786b8b453"
],
"gpuCore.slf": [
"a5c69c5c3fde3f6fd5cce8e79efa3ef96a6add01",
"54644d6ec012bcbf9030b369a2fb4dfbedfa511f",
"10de0e6e7f616b67f7aced4fa51a55af9d9fb046",
"036e58e46d7264e2d6b08f48bde8b2d83361a661",
"f0e3d77db14b4dd11aa7cc71613097600d3e5da3",
"a582843e7dac4735392fe82fdf3e6fef88f7ff66",
"c06f5745e3ecc0b33e802877b46352d8304b81bc",
"501c31d7614583f6b1f25eb57f67d35343e6dff8",
"b7165607add6023abb9291e3ae80053865ab4a15",
"efa8ae5ed06eba9d4020ff81dc612bf934261803",
"b757316e1cd39bad4e5045480350b7e44903efc8",
"90943fbcd3c23104fcdf7aed70df1e7752f39271"
],
"gpuCore.slv": [
"073a34b093054d217029f7314a2b8142e1dac6b7",
"dcd9f24f47443ec8421e48fef7e37fd8a52c4782",
"cda44c87be8b01c7ba23e2ad09a516d1747dee9b",
"339af29d54a62a8d6ddea059d01a1c71dceb741f",
"d0d06fca34ac14d021175be133af413bdbecdf9c",
"ab6dc8c5ba131d3cc827063081b3bd29f650ba90",
"7eea41770e156b05ddde4195954b5a468f163cdd"
],
"gpuPeteOGL2.slf": [
"f69915f13de626f3c35bc67c8069720a9a0ea853"
],
"gpuPeteOGL2.slv": [
"fbb4cd76cee5ce70539da8cd24df370bfac1b8a2"
],
"delete.me": [
"61f09b64c64964cacfec0833f04968a08f7da464"
],
"erase.me": [
"a36992809f946cba845dbe4a8cdc4ee79e413bc0"
],
"136032.101.e3": [
"84d422b53547271e3a07342704a05ef481db3f99"
],
@@ -132838,6 +133212,36 @@
"51cef730": "808b7b46bfb033c7fe4d94d0dbf5a271de30dedc",
"50fb46e4": "a848aad1840c7d85bfcdd552521a7181b00331cc",
"69dc25d7": "9b2704655a893ff1675d28df4bd9ffc9e15d3dd5",
"dc249b13": "5f589f6b1845927141dac09f6c2b050624ef2d03",
"e24efa44": "a5c69c5c3fde3f6fd5cce8e79efa3ef96a6add01",
"e454f02d": "073a34b093054d217029f7314a2b8142e1dac6b7",
"a509c794": "54644d6ec012bcbf9030b369a2fb4dfbedfa511f",
"6b725715": "dcd9f24f47443ec8421e48fef7e37fd8a52c4782",
"04e29286": "10de0e6e7f616b67f7aced4fa51a55af9d9fb046",
"579d5d7c": "c966a738bffbe6f5017684318b26f66899e620f4",
"5ebc2ad4": "036e58e46d7264e2d6b08f48bde8b2d83361a661",
"b01d11f1": "687540a168728baf3babaf2dedf74b5f1d2f56b4",
"e0c2acb6": "f0e3d77db14b4dd11aa7cc71613097600d3e5da3",
"41169e0a": "cda44c87be8b01c7ba23e2ad09a516d1747dee9b",
"7d4623fc": "56ad43fc57833eefb116af581c9ad034c53778ee",
"9c4acf63": "a582843e7dac4735392fe82fdf3e6fef88f7ff66",
"9aea70ac": "0f6b69ace5bcd59ba3641bb4d833e120e93eb8dd",
"1979f565": "c06f5745e3ecc0b33e802877b46352d8304b81bc",
"dbade009": "501c31d7614583f6b1f25eb57f67d35343e6dff8",
"e7e004f8": "339af29d54a62a8d6ddea059d01a1c71dceb741f",
"bdca044b": "b7165607add6023abb9291e3ae80053865ab4a15",
"872429df": "d0d06fca34ac14d021175be133af413bdbecdf9c",
"81621cda": "efa8ae5ed06eba9d4020ff81dc612bf934261803",
"65ba738e": "f69915f13de626f3c35bc67c8069720a9a0ea853",
"ed4adc00": "fbb4cd76cee5ce70539da8cd24df370bfac1b8a2",
"aabbe87a": "61f09b64c64964cacfec0833f04968a08f7da464",
"f74f071a": "a36992809f946cba845dbe4a8cdc4ee79e413bc0",
"afc20232": "339d7581e1a70f8fb287e5a572f6388f5bc00534",
"e23a78d7": "b757316e1cd39bad4e5045480350b7e44903efc8",
"a27ddd49": "ab6dc8c5ba131d3cc827063081b3bd29f650ba90",
"eff8698a": "a9b9ed5fab307250a69a12ebce4bc44786b8b453",
"4a2a86d7": "90943fbcd3c23104fcdf7aed70df1e7752f39271",
"50c5f498": "7eea41770e156b05ddde4195954b5a468f163cdd",
"7e84972a": "84d422b53547271e3a07342704a05ef481db3f99",
"ebf1e0ae": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
"92d6a0b4": "0a42a4816c89447b16e1f3245409591efea98a4a",
@@ -141495,6 +141899,36 @@
"2e6883d4304c5de25c464a9fd97fcd2f642d8d2af2db9c2b13882e67f0f35b93": "808b7b46bfb033c7fe4d94d0dbf5a271de30dedc",
"2db47ffca9510468e37717266838576f96dccd9ed6b7f00c0a721c9868338b19": "a848aad1840c7d85bfcdd552521a7181b00331cc",
"27ab08e76e08fa8a1023b076f3e6c23bc6841732658942f30cea634394f40729": "9b2704655a893ff1675d28df4bd9ffc9e15d3dd5",
"d1ef814cb6314357d43089f67a6808df563577604b598da7fc4697cfbe08df50": "5f589f6b1845927141dac09f6c2b050624ef2d03",
"0a7a10c278ec13ae37192d15484bacc646bca67e2aae64fab39cd78dda1547cc": "a5c69c5c3fde3f6fd5cce8e79efa3ef96a6add01",
"92f06e873b6ca0affd4029ba646c58ae60a47471f7123047c08b2fe3ad45fc41": "073a34b093054d217029f7314a2b8142e1dac6b7",
"70b69879b7583ee3bbcfdddc106a59e5ed66581914bfa2ad1f82285654c5f2a0": "54644d6ec012bcbf9030b369a2fb4dfbedfa511f",
"23ecd34d71b69e2d41b71ca66220792310c26e6799db9351e26cdae287a2f406": "dcd9f24f47443ec8421e48fef7e37fd8a52c4782",
"56f2d9af2060f2f0fd6c2acdccbe57f77a0609a2cfb3f2e324b3c3a4fe704e49": "10de0e6e7f616b67f7aced4fa51a55af9d9fb046",
"06fac91ea6fe36e3e41780da7d631a575893c9dfb56f1369dc639a97c2fc9270": "c966a738bffbe6f5017684318b26f66899e620f4",
"a184f3e62cf87caa00d1e9c044587cb5244567369a5edab5c1dbec43edba3ff3": "036e58e46d7264e2d6b08f48bde8b2d83361a661",
"32db4e009959b5606e3d3153d9cd4c0e1a84312bf07848b595eaec0190ea6b9b": "687540a168728baf3babaf2dedf74b5f1d2f56b4",
"8b39bd12aae661165fc35eb2627c1ea4d7cc26fef179fe2e772abb412bf94e5b": "f0e3d77db14b4dd11aa7cc71613097600d3e5da3",
"9f63333b425c697048c6804d7f30f9a653570143eb897758c7c9fb9d3d8e119c": "cda44c87be8b01c7ba23e2ad09a516d1747dee9b",
"939ac6a08f181b926ed074f83342ff4043ec7237267652ff163650f23852de61": "56ad43fc57833eefb116af581c9ad034c53778ee",
"32e45e1a9cd471bdcf7c0f1b77a425cdda265726e58e2c5a703c27bb343a52ec": "a582843e7dac4735392fe82fdf3e6fef88f7ff66",
"bb046bc18f6e1e78713e5d6f5a5c58a5b4969fe1488f41df6ef9ee0c1f82dcaf": "0f6b69ace5bcd59ba3641bb4d833e120e93eb8dd",
"db1955fb12093a469f62f30ae4995663436707149a0bd0212494840b2f52c383": "c06f5745e3ecc0b33e802877b46352d8304b81bc",
"adc966ee2b7e1d61515f49890ddd67cebf6335fe0e8cfb6f6fc6fa2a69a9db11": "501c31d7614583f6b1f25eb57f67d35343e6dff8",
"8205995b3aea42b98adbe8ad99e28a5edfdbc711e74a5e33da045bfa1da4428c": "339af29d54a62a8d6ddea059d01a1c71dceb741f",
"a175f11b2188b4001c51bb548763d92a052211fb7b84cc82e2f492956d9623ec": "b7165607add6023abb9291e3ae80053865ab4a15",
"7160ce15161d0a36f8dc5168b8368a0fc8e2238d40635a3c7be8cccfa884746f": "d0d06fca34ac14d021175be133af413bdbecdf9c",
"5e4bfe61cbf89579716b32559d8b92ac733623a414dd0c405894a36ab9457a0f": "efa8ae5ed06eba9d4020ff81dc612bf934261803",
"46cd5cf17654fb5730f1f557a4f864b1cc4d89031906ed5848b21468a5fb5c74": "f69915f13de626f3c35bc67c8069720a9a0ea853",
"c113ff0790ba6454089035036f448c261dc4742a3c28bc42f756beddaa8ff3fb": "fbb4cd76cee5ce70539da8cd24df370bfac1b8a2",
"e33dbd20d732ad6d5c1f8228c36213c9385547f29b4746940bdaccfd52852a21": "61f09b64c64964cacfec0833f04968a08f7da464",
"efe376ead6f70831db442679dcbd211a1d34065617f9cfae75bee791765088ff": "a36992809f946cba845dbe4a8cdc4ee79e413bc0",
"86c90b07233a952df257ca1eb6b54539bca5d4320d649c8088ad0f41085dcc63": "339d7581e1a70f8fb287e5a572f6388f5bc00534",
"3ee27e57524c2cbad894d6c8c2508b8459eee236555ed1272dcb83e1f390f7f6": "b757316e1cd39bad4e5045480350b7e44903efc8",
"8868a3c4d98538d0869537c4f6c1b27cd14cad06978e3acbef695c0ececd79e4": "ab6dc8c5ba131d3cc827063081b3bd29f650ba90",
"db84ab7b4cc327c1ac4513a982e8b2c39bd5ddf64f15d70178f6a94ffdcdef48": "a9b9ed5fab307250a69a12ebce4bc44786b8b453",
"a9d7bfddd60c805878707f115e753e494e27ffaa879190dc045ef2eeb120f647": "90943fbcd3c23104fcdf7aed70df1e7752f39271",
"89e80f1cb14de9a185ed46f9f4777649d0d8f19a4ac3d2cfe5157f427188f2fd": "7eea41770e156b05ddde4195954b5a468f163cdd",
"d7626affff7dfc0a8782e0894770258ea572d0f2d9859690efbc8ce018cb36bc": "84d422b53547271e3a07342704a05ef481db3f99",
"81fb611f7dc9d531720836f31e5aff1cc5466013d0afb7ab7f947cb5b7520504": "2d327e78832edd67ca3909c25b8c8c839637a1ed",
"c770a3ae305c3420292516dbd86373f67798983c74754d2cc988de6ddf6ec51f": "0a42a4816c89447b16e1f3245409591efea98a4a",
@@ -151561,6 +151995,96 @@
"resources/shaders/vulkan/shadeboost.glsl": [
"9b2704655a893ff1675d28df4bd9ffc9e15d3dd5"
],
"shaders/5xBR-v3.7c/gpuCore.ini": [
"5f589f6b1845927141dac09f6c2b050624ef2d03"
],
"shaders/5xBR-v3.7c/gpuCore.slf": [
"a5c69c5c3fde3f6fd5cce8e79efa3ef96a6add01"
],
"shaders/5xBR-v3.7c/gpuCore.slv": [
"073a34b093054d217029f7314a2b8142e1dac6b7"
],
"shaders/AA_Shader_v2.0_w_Natural_Vision/gpuCore.slf": [
"54644d6ec012bcbf9030b369a2fb4dfbedfa511f"
],
"shaders/AA_Shader_v2.0_w_Natural_Vision/gpuCore.slv": [
"dcd9f24f47443ec8421e48fef7e37fd8a52c4782"
],
"shaders/AA_Shader_v2.0_w_Natural_Vision_Brightness/gpuCore.slf": [
"10de0e6e7f616b67f7aced4fa51a55af9d9fb046"
],
"shaders/Brightness/gpuCore.ini": [
"c966a738bffbe6f5017684318b26f66899e620f4"
],
"shaders/Brightness/gpuCore.slf": [
"036e58e46d7264e2d6b08f48bde8b2d83361a661"
],
"shaders/CRT-Hyllian/gpuCore.ini": [
"687540a168728baf3babaf2dedf74b5f1d2f56b4"
],
"shaders/CRT-Hyllian/gpuCore.slf": [
"f0e3d77db14b4dd11aa7cc71613097600d3e5da3"
],
"shaders/CRT-Hyllian/gpuCore.slv": [
"cda44c87be8b01c7ba23e2ad09a516d1747dee9b"
],
"shaders/CRT-Hyllian-3D/gpuCore.ini": [
"56ad43fc57833eefb116af581c9ad034c53778ee"
],
"shaders/CRT-Hyllian-3D/gpuCore.slf": [
"a582843e7dac4735392fe82fdf3e6fef88f7ff66"
],
"shaders/CRT-Lottes/gpuCore.ini": [
"0f6b69ace5bcd59ba3641bb4d833e120e93eb8dd"
],
"shaders/CRT-Lottes/gpuCore.slf": [
"c06f5745e3ecc0b33e802877b46352d8304b81bc"
],
"shaders/Cartoon_shader_II/gpuCore.slf": [
"501c31d7614583f6b1f25eb57f67d35343e6dff8"
],
"shaders/Cartoon_shader_II/gpuCore.slv": [
"339af29d54a62a8d6ddea059d01a1c71dceb741f"
],
"shaders/FXAA_natural_vision/gpuCore.slf": [
"b7165607add6023abb9291e3ae80053865ab4a15"
],
"shaders/FXAA_natural_vision/gpuCore.slv": [
"d0d06fca34ac14d021175be133af413bdbecdf9c"
],
"shaders/Grayscale/gpuCore.slf": [
"efa8ae5ed06eba9d4020ff81dc612bf934261803"
],
"shaders/gpuPeteOGL2.slf": [
"f69915f13de626f3c35bc67c8069720a9a0ea853"
],
"shaders/gpuPeteOGL2.slv": [
"fbb4cd76cee5ce70539da8cd24df370bfac1b8a2"
],
"shaders/gpucore/delete.me": [
"61f09b64c64964cacfec0833f04968a08f7da464"
],
"shaders/ogl2/erase.me": [
"a36992809f946cba845dbe4a8cdc4ee79e413bc0"
],
"shaders/super-eagle/gpuCore.ini": [
"339d7581e1a70f8fb287e5a572f6388f5bc00534"
],
"shaders/super-eagle/gpuCore.slf": [
"b757316e1cd39bad4e5045480350b7e44903efc8"
],
"shaders/super-eagle/gpuCore.slv": [
"ab6dc8c5ba131d3cc827063081b3bd29f650ba90"
],
"shaders/xBR-LV2-3D/gpuCore.ini": [
"a9b9ed5fab307250a69a12ebce4bc44786b8b453"
],
"shaders/xBR-LV2-3D/gpuCore.slf": [
"90943fbcd3c23104fcdf7aed70df1e7752f39271"
],
"shaders/xBR-LV2-3D/gpuCore.slv": [
"7eea41770e156b05ddde4195954b5a468f163cdd"
],
"Feeds/fpLatestTables.xml": [
"bd9de21def48b65b5382c403971a9062928b9345"
],
@@ -160979,6 +161503,21 @@
"resources/shaders/vulkan/cas.glsl": [
"005cecf1a5e20b05407d55d0aad22cf81ad66c31"
],
"shaders/AA_Shader_v2.0_w_Natural_Vision_Brightness/gpuCore.slv": [
"dcd9f24f47443ec8421e48fef7e37fd8a52c4782"
],
"shaders/Brightness/gpuCore.slv": [
"073a34b093054d217029f7314a2b8142e1dac6b7"
],
"shaders/CRT-Lottes/gpuCore.slv": [
"073a34b093054d217029f7314a2b8142e1dac6b7"
],
"shaders/Grayscale/gpuCore.slv": [
"073a34b093054d217029f7314a2b8142e1dac6b7"
],
"shaders/CRT-Hyllian-3D/gpuCore.slv": [
"cda44c87be8b01c7ba23e2ad09a516d1747dee9b"
],
"DefaultSounds/20pSlide.wav": [
"f92d854f017d154c9ae0a2351629876515ba48d7"
],