mirror of
https://github.com/Abdess/retroarch_system.git
synced 2026-10-10 21:43:23 -05:00
feat: collect the fpse, epsxe and mastergear assets
This commit is contained in:
1 parent
de1b4c4e6a
commit
3efe87f42b
50 files changed
+3951
-21
No files matched your search
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,77 @@
|
||||
// 4xGLSL HqFilter shader, Modified to use in PPSSPP. Grabbed from:
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
// by guest(r) (guest.r@gmail.com)
|
||||
// License: GNU-GPL
|
||||
|
||||
// Shader notes: looks better with sprite games
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D uTex;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
const float mx = 0.325; // start smoothing factor
|
||||
const float k = -0.250; // smoothing decrease factor
|
||||
const float max_w = 0.25; // max. smoothing weigth
|
||||
const float min_w =-0.05; // min smoothing/sharpening weigth
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c = texture2D(uTex, v_texcoord0.xy).xyz;
|
||||
vec3 i1 = texture2D(uTex, v_texcoord1.xy).xyz;
|
||||
vec3 i2 = texture2D(uTex, v_texcoord2.xy).xyz;
|
||||
vec3 i3 = texture2D(uTex, v_texcoord3.xy).xyz;
|
||||
vec3 i4 = texture2D(uTex, v_texcoord4.xy).xyz;
|
||||
vec3 o1 = texture2D(uTex, v_texcoord5.xy).xyz;
|
||||
vec3 o3 = texture2D(uTex, v_texcoord6.xy).xyz;
|
||||
vec3 o2 = texture2D(uTex, v_texcoord5.zw).xyz;
|
||||
vec3 o4 = texture2D(uTex, v_texcoord6.zw).xyz;
|
||||
|
||||
vec3 dt = vec3(1.0,1.0,1.0);
|
||||
|
||||
float ko1=dot(abs(o1-c),dt);
|
||||
float ko2=dot(abs(o2-c),dt);
|
||||
float ko3=dot(abs(o3-c),dt);
|
||||
float ko4=dot(abs(o4-c),dt);
|
||||
|
||||
float sd1 = dot(abs(i1-i3),dt);
|
||||
float sd2 = dot(abs(i2-i4),dt);
|
||||
|
||||
float w1 = step(ko1,ko3)*sd2;
|
||||
float w2 = step(ko2,ko4)*sd1;
|
||||
float w3 = step(ko3,ko1)*sd2;
|
||||
float w4 = step(ko4,ko2)*sd1;
|
||||
|
||||
c = (w1*o1+w2*o2+w3*o3+w4*o4+0.1*c)/(w1+w2+w3+w4+0.1);
|
||||
|
||||
float lc = c.r+c.g+c.b+0.2;
|
||||
|
||||
w1 = (i1.r+i1.g+i1.b+lc)*0.2;
|
||||
w1 = clamp(k*dot(abs(c-i1),dt)/w1+mx,min_w,max_w);
|
||||
|
||||
w2 = (i2.r+i2.g+i2.b+lc)*0.2;
|
||||
w2 = clamp(k*dot(abs(c-i2),dt)/w2+mx,min_w,max_w);
|
||||
|
||||
w3 = (i3.r+i3.g+i3.b+lc)*0.2;
|
||||
w3 = clamp(k*dot(abs(c-i3),dt)/w3+mx,min_w,max_w);
|
||||
|
||||
w4 = (i4.r+i4.g+i4.b+lc)*0.2;
|
||||
w4 = clamp(k*dot(abs(c-i4),dt)/w4+mx,min_w,max_w);
|
||||
|
||||
gl_FragColor.rgb = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec4 aVertex;
|
||||
attribute vec2 aTexCoord;
|
||||
|
||||
uniform highp float outX;
|
||||
uniform highp float outY;
|
||||
|
||||
uniform highp float resX;
|
||||
uniform highp float resY;
|
||||
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
void main()
|
||||
{
|
||||
float x = outX*((resX/outX)/2.0);
|
||||
float y = outX*((resY/outY)/2.0);
|
||||
vec2 dg1 = vec2( x,y);
|
||||
vec2 dg2 = vec2(-x,y);
|
||||
vec2 sd1 = dg1*0.5;
|
||||
vec2 sd2 = dg2*0.5;
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);;
|
||||
v_texcoord0=aTexCoord.xyxy;
|
||||
v_texcoord1.xy = v_texcoord0.xy - sd1;
|
||||
v_texcoord2.xy = v_texcoord0.xy - sd2;
|
||||
v_texcoord3.xy = v_texcoord0.xy + sd1;
|
||||
v_texcoord4.xy = v_texcoord0.xy + sd2;
|
||||
v_texcoord5.xy = v_texcoord0.xy - dg1;
|
||||
v_texcoord6.xy = v_texcoord0.xy + dg1;
|
||||
v_texcoord5.zw = v_texcoord0.xy - dg2;
|
||||
v_texcoord6.zw = v_texcoord0.xy + dg2;
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
precision highp float;
|
||||
precision highp int;
|
||||
uniform sampler2D uTex;
|
||||
uniform highp float resX;
|
||||
uniform highp float resY;
|
||||
varying vec4 v_texture_coordinate;
|
||||
varying vec4 v_texture_coordinate_1;
|
||||
varying vec4 v_texture_coordinate_2;
|
||||
varying vec4 v_texture_coordinate_3;
|
||||
varying vec4 v_texture_coordinate_4;
|
||||
varying vec4 v_texture_coordinate_5;
|
||||
varying vec4 v_texture_coordinate_6;
|
||||
varying vec4 v_texture_coordinate_7;
|
||||
|
||||
const float coef = 2.0;
|
||||
const float threshold = 10.0;
|
||||
const float y_weight = 48.0;
|
||||
const float u_weight = 7.0;
|
||||
const float v_weight = 6.0;
|
||||
|
||||
const mat3 yuv = mat3(0.299, 0.587, 0.114, -0.169, -0.331, 0.499, 0.499, -0.418, -0.0813);
|
||||
const mat3 yuv_weighted = mat3(y_weight * yuv[0], u_weight * yuv[1], v_weight * yuv[2]);
|
||||
|
||||
vec4 RGBtoYUV(vec3 v0, vec3 v1, vec3 v2, vec3 v3) {
|
||||
float a = yuv_weighted[0].x * v0.x + yuv_weighted[0].y * v0.y + yuv_weighted[0].z * v0.z;
|
||||
float b = yuv_weighted[0].x * v1.x + yuv_weighted[0].y * v1.y + yuv_weighted[0].z * v1.z;
|
||||
float c = yuv_weighted[0].x * v2.x + yuv_weighted[0].y * v2.y + yuv_weighted[0].z * v2.z;
|
||||
float d = yuv_weighted[0].x * v3.x + yuv_weighted[0].y * v3.y + yuv_weighted[0].z * v3.z;
|
||||
|
||||
return vec4(a, b, c, d);
|
||||
}
|
||||
|
||||
bvec4 _and_(bvec4 A, bvec4 B) {
|
||||
return bvec4(A.x && B.x, A.y && B.y, A.z && B.z, A.w && B.w);
|
||||
}
|
||||
|
||||
bvec4 _or_(bvec4 A, bvec4 B) {
|
||||
return bvec4(A.x || B.x, A.y || B.y, A.z || B.z, A.w || B.w);
|
||||
}
|
||||
|
||||
vec4 df(vec4 A, vec4 B) {
|
||||
return vec4(abs(A - B));
|
||||
}
|
||||
|
||||
bvec4 close(vec4 A, vec4 B) {
|
||||
return (lessThan(df(A, B), vec4(10.0, 10.0, 10.0, 10.0)));
|
||||
}
|
||||
bvec4 eq2(vec4 A, vec4 B)
|
||||
{
|
||||
return (lessThan(df(A, B), vec4(2.0, 2.0, 2.0, 2.0)));
|
||||
}
|
||||
|
||||
float c_df(vec3 c1, vec3 c2) {
|
||||
vec3 df = abs(c1 - c2);
|
||||
return df.r + df.g + df.b;
|
||||
}
|
||||
|
||||
vec4 weighted_distance(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));
|
||||
}
|
||||
|
||||
|
||||
void main() {
|
||||
vec2 fp = fract(v_texture_coordinate.xy * vec2(resX, resY));
|
||||
|
||||
vec3 A1 = texture2D(uTex, v_texture_coordinate_1.xw).rgb;
|
||||
vec3 B1 = texture2D(uTex, v_texture_coordinate_1.yw).rgb;
|
||||
vec3 C1 = texture2D(uTex, v_texture_coordinate_1.zw).rgb;
|
||||
|
||||
vec3 A = texture2D(uTex, v_texture_coordinate_2.xw).rgb;
|
||||
vec3 B = texture2D(uTex, v_texture_coordinate_2.yw).rgb;
|
||||
vec3 C = texture2D(uTex, v_texture_coordinate_2.zw).rgb;
|
||||
|
||||
vec3 D = texture2D(uTex, v_texture_coordinate_3.xw).rgb;
|
||||
vec3 E = texture2D(uTex, v_texture_coordinate_3.yw).rgb;
|
||||
vec3 F = texture2D(uTex, v_texture_coordinate_3.zw).rgb;
|
||||
|
||||
vec3 G = texture2D(uTex, v_texture_coordinate_4.xw).rgb;
|
||||
vec3 H = texture2D(uTex, v_texture_coordinate_4.yw).rgb;
|
||||
vec3 I = texture2D(uTex, v_texture_coordinate_4.zw).rgb;
|
||||
|
||||
vec3 G5 = texture2D(uTex, v_texture_coordinate_5.xw).rgb;
|
||||
vec3 H5 = texture2D(uTex, v_texture_coordinate_5.yw).rgb;
|
||||
vec3 I5 = texture2D(uTex, v_texture_coordinate_5.zw).rgb;
|
||||
|
||||
vec3 A0 = texture2D(uTex, v_texture_coordinate_6.xy).rgb;
|
||||
vec3 D0 = texture2D(uTex, v_texture_coordinate_6.xz).rgb;
|
||||
vec3 G0 = texture2D(uTex, v_texture_coordinate_6.xw).rgb;
|
||||
|
||||
vec3 C4 = texture2D(uTex, v_texture_coordinate_7.xy).rgb;
|
||||
vec3 F4 = texture2D(uTex, v_texture_coordinate_7.xz).rgb;
|
||||
vec3 I4 = texture2D(uTex, v_texture_coordinate_7.xw).rgb;
|
||||
|
||||
vec4 b = RGBtoYUV(B, D, H, F);
|
||||
vec4 c = RGBtoYUV(C, A, G, I);
|
||||
vec4 e = RGBtoYUV(E, E, E, E);
|
||||
vec4 d = b.yzwx;
|
||||
vec4 f = b.wxyz;
|
||||
vec4 g = c.zwxy;
|
||||
vec4 h = b.zwxy;
|
||||
vec4 i = c.wxyz;
|
||||
|
||||
vec4 i4 = RGBtoYUV(I4, C1, A0, G5);
|
||||
vec4 i5 = RGBtoYUV(I5, C4, A1, G0);
|
||||
vec4 h5 = RGBtoYUV(H5, F4, B1, D0);
|
||||
vec4 f4 = h5.yzwx;
|
||||
|
||||
vec4 c1 = i4.yzwx;
|
||||
vec4 g0 = i5.wxyz;
|
||||
vec4 b1 = h5.zwxy;
|
||||
vec4 d0 = h5.wxyz;
|
||||
|
||||
vec4 Ao = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
vec4 Bo = vec4( 1.0, 1.0, -1.0, -1.0 );
|
||||
vec4 Co = vec4( 1.5, 0.5, -0.5, 0.5 );
|
||||
vec4 Ax = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
vec4 Bx = vec4( 0.5, 2.0, -0.5, -2.0 );
|
||||
vec4 Cx = vec4( 1.0, 1.0, -0.5, 0.0 );
|
||||
vec4 Ay = vec4( 1.0, -1.0, -1.0, 1.0 );
|
||||
vec4 By = vec4( 2.0, 0.5, -2.0, -0.5 );
|
||||
vec4 Cy = vec4( 2.0, 0.0, -1.0, 0.5 );
|
||||
|
||||
vec4 Az = vec4( 6.0, -2.0, -6.0, 2.0 );
|
||||
vec4 Bz = vec4( 2.0, 6.0, -2.0, -6.0 );
|
||||
vec4 Cz = vec4( 5.0, 3.0, -3.0, -1.0 );
|
||||
vec4 Aw = vec4( 2.0, -6.0, -2.0, 6.0 );
|
||||
vec4 Bw = vec4( 6.0, 2.0, -6.0,-2.0 );
|
||||
vec4 Cw = vec4( 5.0, -1.0, -3.0, 3.0 );
|
||||
|
||||
// These inequations define the line below which interpolation occurs
|
||||
bvec4 fx = greaterThan(Ao * fp.y + Bo * fp.x, Co);
|
||||
bvec4 fx_left = greaterThan(Ax * fp.y + Bx * fp.x, Cx);
|
||||
bvec4 fx_up = greaterThan(Ay * fp.y + By * fp.x, Cy);
|
||||
bvec4 fx3_left = greaterThan(Az * fp.y + Bz * fp.x, Cz);
|
||||
bvec4 fx3_up = greaterThan(Aw * fp.y + Bw * fp.x, Cw);
|
||||
|
||||
// bvec4 t1 = _and_( notEqual(e, f), notEqual(e, h) );
|
||||
// bvec4 t2 = _and_( not(close(f, b)), not(close(h, d)));
|
||||
// bvec4 t3 = _and_( not(close(f, i4)), not(close(h, i5)));
|
||||
// bvec4 t4 = _or_( close(e, g), close(e, c) );
|
||||
// bvec4 t5 = _and_( close(e, i), _or_(t3, t4) );
|
||||
// bvec4 t6 = _and_( notEqual(f, f4), notEqual(f, i));
|
||||
// bvec4 t7 = _and_( notEqual(h, h5), notEqual(h, i));
|
||||
// bvec4 t8 = _or_( notEqual(h, g), notEqual(f, c));
|
||||
// bvec4 t9 = _and_( close(b, c1), close(d, g0));
|
||||
// bvec4 t10 = _or_(t2, t5);
|
||||
// bvec4 t11 = _or_(_or_(t6, t7), _or_(t8, t9));
|
||||
// bvec4 interp_restriction_lv1 = _and_(t1, _and_(t10, t11));
|
||||
|
||||
bvec4 t1 = _and_( notEqual(e, f), notEqual(e, h) );
|
||||
bvec4 t2 = _and_( not(close(f, b)), not(close(h, d)) );
|
||||
bvec4 t3 = _and_( not(close(h, i4)), not(close(h, i5)) );
|
||||
bvec4 t4 = _and_( notEqual(f, f4), notEqual(f, i) );
|
||||
bvec4 t5 = _and_( notEqual(h, h5), notEqual(h, i) );
|
||||
bvec4 t6 = _and_( close(e, i), _or_(t4, t5) );
|
||||
bvec4 t7 = _or_( close(e, g), close(e, c) );
|
||||
bvec4 t8 = _and_( close(b, c1), close(d, g0));
|
||||
bvec4 t9 = _or_( notEqual(h, g), notEqual(f, c));
|
||||
bvec4 interp_restriction_lv1 = _and_( t1, _or_(_or_(_or_( _or_( _or_(t2, t3), t6 ), t7 ), t8), t9 ));
|
||||
|
||||
bvec4 interp_restriction_lv2_left = _and_( notEqual(e, g), notEqual(d, g) );
|
||||
bvec4 interp_restriction_lv2_up = _and_( notEqual(e, c), notEqual(b, c) );
|
||||
bvec4 interp_restriction_lv3_left = _and_( eq2(g,g0), not(eq2(d0,g0)) );
|
||||
bvec4 interp_restriction_lv3_up = _and_( eq2(c,c1), not(eq2(b1,c1)) );
|
||||
|
||||
bvec4 edr = _and_( lessThan(weighted_distance(e, c, g, i, h5, f4, h, f),
|
||||
weighted_distance(h, d, i5, f, i4, b, e, i)), interp_restriction_lv1 );
|
||||
bvec4 edr_left = _and_( lessThanEqual(coef * df(f, g), df(h, c)), interp_restriction_lv2_left );
|
||||
bvec4 edr_up = _and_( greaterThanEqual(df(f, g), coef * df(h, c)), interp_restriction_lv2_up );
|
||||
bvec4 edr3_left = interp_restriction_lv3_left;
|
||||
bvec4 edr3_up = interp_restriction_lv3_up;
|
||||
|
||||
|
||||
|
||||
bvec4 t13 = _or_(fx_left, _and_(edr3_left, fx3_left));
|
||||
bvec4 t14 = _or_(fx_up, _and_(edr3_up, fx3_up));
|
||||
bvec4 nc = _and_(edr, _or_(fx, _or_(_and_(edr_left, t13), _and_(edr_up, t14))));
|
||||
|
||||
bvec4 px = lessThanEqual(df(e, f), df(e, h));
|
||||
|
||||
vec3 res1 = nc.x ? px.x ? F : H : nc.y ? px.y ? B : F : nc.z ? px.z ? D : B : nc.w ? px.w ? H : D : E;
|
||||
vec3 res2 = nc.w ? px.w ? H : D : nc.z ? px.z ? D : B : nc.y ? px.y ? B : F : nc.x ? px.x ? F : H : E;
|
||||
|
||||
vec3 res = mix(res1, res2, step(c_df(E, res1), c_df(E, res2)));
|
||||
|
||||
gl_FragColor.xyz = res;
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
attribute vec2 aVertex;
|
||||
attribute vec2 aTexCoord;
|
||||
uniform highp float outX;
|
||||
uniform highp float outY;
|
||||
varying vec4 v_texture_coordinate;
|
||||
varying vec4 v_texture_coordinate_1;
|
||||
varying vec4 v_texture_coordinate_2;
|
||||
varying vec4 v_texture_coordinate_3;
|
||||
varying vec4 v_texture_coordinate_4;
|
||||
varying vec4 v_texture_coordinate_5;
|
||||
varying vec4 v_texture_coordinate_6;
|
||||
varying vec4 v_texture_coordinate_7;
|
||||
void main() {
|
||||
float dx = 1.0 / outX;
|
||||
float dy = 1.0 / outY;
|
||||
|
||||
// A1 B1 C1
|
||||
// A0 A B C C4
|
||||
// D0 D E F F4
|
||||
// G0 G H I I4
|
||||
// G5 H5 I5
|
||||
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
v_texture_coordinate = aTexCoord.xyxy;
|
||||
v_texture_coordinate_1 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, -2.0*dy); // A1 B1 C1
|
||||
v_texture_coordinate_2 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, -dy); // A B C
|
||||
v_texture_coordinate_3 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, 0.0); // D E F
|
||||
v_texture_coordinate_4 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, dy); // G H I
|
||||
v_texture_coordinate_5 = aTexCoord.xxxy + vec4(-dx, 0.0, dx, 2.0*dy); // G5 H5 I5
|
||||
v_texture_coordinate_6 = aTexCoord.xyyy + vec4(-2.0*dx, -dy, 0.0,dy); // A0 D0 G0
|
||||
v_texture_coordinate_7 = aTexCoord.xyyy + vec4( 2.0*dx, -dy, 0.0,dy); // C4 F4 I4
|
||||
}
|
||||
@@ -0,0 +1,138 @@
|
||||
/*
|
||||
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;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
uniform sampler2D uTex;
|
||||
uniform highp float resX;
|
||||
uniform highp float resY;
|
||||
uniform highp float outX;
|
||||
uniform highp float outY;
|
||||
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
const float coef = 2.0;
|
||||
const vec3 rgbw = vec3(16.163, 23.351, 8.4772);
|
||||
|
||||
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 );
|
||||
|
||||
|
||||
vec4 df(vec4 A, vec4 B) {
|
||||
return abs(A-B);
|
||||
}
|
||||
|
||||
vec4 weighted_distance(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));
|
||||
}
|
||||
|
||||
|
||||
void main(){
|
||||
|
||||
bool upscale = (1.0/outX) > (1.6 * (1.0/resX));
|
||||
vec3 res = texture2D(uTex, v_texcoord0.xy).xyz;
|
||||
|
||||
// Let's skip the whole scaling if output size smaller than 1.6x of input size
|
||||
if (upscale) {
|
||||
|
||||
bvec4 edr, edr_left, edr_up, px; // px = pixel, edr = edge detection rule
|
||||
bvec4 interp_restriction_lv1, interp_restriction_lv2_left, interp_restriction_lv2_up;
|
||||
bvec4 nc; // new_color
|
||||
bvec4 fx, fx_left, fx_up; // inequations of straight lines.
|
||||
|
||||
vec2 pS = 1.0 / (vec2(1.0/outX,1.0/outY));
|
||||
vec2 fp = fract(v_texcoord0.xy*pS.xy);
|
||||
vec2 TexCoord_0 = v_texcoord0.xy-fp*vec2(1.0/resX,1.0/resY);
|
||||
vec2 dx = vec2(1.0/outX,0.0);
|
||||
vec2 dy = vec2(0.0,1.0/outY);
|
||||
vec2 y2 = dy + dy; vec2 x2 = dx + dx;
|
||||
|
||||
|
||||
vec3 A = texture2D(uTex, TexCoord_0 -dx -dy ).xyz;
|
||||
vec3 B = texture2D(uTex, TexCoord_0 -dy ).xyz;
|
||||
vec3 C = texture2D(uTex, TexCoord_0 +dx -dy ).xyz;
|
||||
vec3 D = texture2D(uTex, TexCoord_0 -dx ).xyz;
|
||||
vec3 E = texture2D(uTex, TexCoord_0 ).xyz;
|
||||
vec3 F = texture2D(uTex, TexCoord_0 +dx ).xyz;
|
||||
vec3 G = texture2D(uTex, TexCoord_0 -dx +dy ).xyz;
|
||||
vec3 H = texture2D(uTex, TexCoord_0 +dy ).xyz;
|
||||
vec3 I = texture2D(uTex, TexCoord_0 +dx +dy ).xyz;
|
||||
vec3 A1 = texture2D(uTex, TexCoord_0 -dx -y2).xyz;
|
||||
vec3 C1 = texture2D(uTex, TexCoord_0 +dx -y2).xyz;
|
||||
vec3 A0 = texture2D(uTex, TexCoord_0 -x2 -dy).xyz;
|
||||
vec3 G0 = texture2D(uTex, TexCoord_0 -x2 +dy).xyz;
|
||||
vec3 C4 = texture2D(uTex, TexCoord_0 +x2 -dy).xyz;
|
||||
vec3 I4 = texture2D(uTex, TexCoord_0 +x2 +dy).xyz;
|
||||
vec3 G5 = texture2D(uTex, TexCoord_0 -dx +y2).xyz;
|
||||
vec3 I5 = texture2D(uTex, TexCoord_0 +dx +y2).xyz;
|
||||
vec3 B1 = texture2D(uTex, TexCoord_0 -y2).xyz;
|
||||
vec3 D0 = texture2D(uTex, TexCoord_0 -x2 ).xyz;
|
||||
vec3 H5 = texture2D(uTex, TexCoord_0 +y2).xyz;
|
||||
vec3 F4 = texture2D(uTex, TexCoord_0 +x2 ).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 = vec4(b.y, b.z, b.w, b.x);
|
||||
vec4 e = vec4(dot(E,rgbw));
|
||||
vec4 f = vec4(b.w, b.x, b.y, b.z);
|
||||
vec4 g = vec4(c.z, c.w, c.x, c.y);
|
||||
vec4 h = vec4(b.z, b.w, b.x, b.y);
|
||||
vec4 i = vec4(c.w, c.x, c.y, c.z);
|
||||
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 = vec4(h5.y, h5.z, h5.w, h5.x);
|
||||
|
||||
// These inequations define the line below which interpolation occurs.
|
||||
fx = greaterThan(Ao*fp.y+Bo*fp.x,Co);
|
||||
fx_left = greaterThan(Ax*fp.y+Bx*fp.x,Cx);
|
||||
fx_up = greaterThan(Ay*fp.y+By*fp.x,Cy);
|
||||
|
||||
interp_restriction_lv1 = bvec4(vec4(notEqual(e,f))*vec4(notEqual(e,h)));
|
||||
interp_restriction_lv2_left = bvec4(vec4(notEqual(e,g))*vec4(notEqual(d,g)));
|
||||
interp_restriction_lv2_up = bvec4(vec4(notEqual(e,c))*vec4(notEqual(b,c)));
|
||||
|
||||
edr = bvec4(vec4(lessThan(weighted_distance( e, c, g, i, h5, f4, h, f), weighted_distance( h, d, i5, f, i4, b, e, i)))*vec4(interp_restriction_lv1));
|
||||
edr_left = bvec4(vec4(lessThanEqual(coef*df(f,g),df(h,c)))*vec4(interp_restriction_lv2_left));
|
||||
edr_up = bvec4(vec4(greaterThanEqual(df(f,g),coef*df(h,c)))*vec4(interp_restriction_lv2_up));
|
||||
|
||||
nc.x = ( edr.x && (fx.x || edr_left.x && fx_left.x || edr_up.x && fx_up.x) );
|
||||
nc.y = ( edr.y && (fx.y || edr_left.y && fx_left.y || edr_up.y && fx_up.y) );
|
||||
nc.z = ( edr.z && (fx.z || edr_left.z && fx_left.z || edr_up.z && fx_up.z) );
|
||||
nc.w = ( edr.w && (fx.w || edr_left.w && fx_left.w || edr_up.w && fx_up.w) );
|
||||
|
||||
px = lessThanEqual(df(e,f),df(e,h));
|
||||
|
||||
res = nc.x ? px.x ? F : H : nc.y ? px.y ? B : F : nc.z ? px.z ? D : B : nc.w ? px.w ? H : D : E;
|
||||
}
|
||||
gl_FragColor.rgb = res;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
/*
|
||||
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;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
attribute vec2 aVertex;
|
||||
attribute vec2 aTexCoord;
|
||||
|
||||
|
||||
|
||||
varying vec2 v_texcoord0;
|
||||
|
||||
void main() {
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
v_texcoord0 = aTexCoord;
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
// AA-Color shader, Modified to use in PPSSPP. Grabbed from:
|
||||
// http://forums.ngemu.com/showthread.php?t=76098
|
||||
|
||||
// by guest(r) (guest.r@gmail.com)
|
||||
// license: GNU-GPL
|
||||
|
||||
// Color variables
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
const vec3 c_ch = vec3(1.0,1.0,1.0); // rgb color channel intensity
|
||||
const float a = 1.20 ; // saturation
|
||||
const float b = 1.00 ; // brightness
|
||||
const float c = 1.25 ; // contrast
|
||||
|
||||
// you can use contrast1,contrast2...contrast4 (or contrast0 for speedup)
|
||||
|
||||
float contrast0(float x)
|
||||
{ return x; }
|
||||
|
||||
float contrast1(float x)
|
||||
{ x = x*1.1547-1.0;
|
||||
return sign(x)*pow(abs(x),1.0/c)*0.86 + 0.86;}
|
||||
|
||||
float contrast2(float x)
|
||||
{ return normalize(vec2(pow(x,c),pow(0.86,c))).x*1.72;}
|
||||
|
||||
float contrast3(float x)
|
||||
{ return 1.73*pow(0.57735*x,c); }
|
||||
|
||||
float contrast4(float x)
|
||||
{ return clamp(0.866 + c*(x-0.866),0.05, 1.73); }
|
||||
|
||||
uniform sampler2D uTex;
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 c10 = texture2D(uTex, v_texcoord1.xy).xyz;
|
||||
vec3 c01 = texture2D(uTex, v_texcoord4.xy).xyz;
|
||||
vec3 c11 = texture2D(uTex, v_texcoord0.xy).xyz;
|
||||
vec3 c21 = texture2D(uTex, v_texcoord5.xy).xyz;
|
||||
vec3 c12 = texture2D(uTex, v_texcoord2.xy).xyz;
|
||||
|
||||
vec3 dt = vec3(1.0,1.0,1.0);
|
||||
float k1=dot(abs(c01-c21),dt);
|
||||
float k2=dot(abs(c10-c12),dt);
|
||||
|
||||
vec3 color = (k1*(c10+c12)+k2*(c01+c21)+0.001*c11)/(2.0*(k1+k2)+0.001);
|
||||
|
||||
float x = sqrt(dot(color,color));
|
||||
|
||||
color.r = pow(color.r+0.001,a);
|
||||
color.g = pow(color.g+0.001,a);
|
||||
color.b = pow(color.b+0.001,a);
|
||||
|
||||
gl_FragColor.rgb = contrast4(x)*normalize(color*c_ch)*b;
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
// by guest(r) - guest.r@gmail.com
|
||||
// license: GNU-GPL
|
||||
|
||||
#ifdef GL_ES
|
||||
precision mediump float;
|
||||
precision mediump int;
|
||||
#endif
|
||||
|
||||
|
||||
attribute vec2 aVertex;
|
||||
attribute vec2 aTexCoord;
|
||||
uniform highp float outX;
|
||||
uniform highp float outY;
|
||||
|
||||
|
||||
varying vec4 v_texcoord0;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec4 v_texcoord5;
|
||||
varying vec4 v_texcoord6;
|
||||
|
||||
float scaleoffset = 0.8;
|
||||
|
||||
void main()
|
||||
|
||||
{
|
||||
float x = (1.0/outX)*scaleoffset;
|
||||
float y = (1.0/outY)*scaleoffset;
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
v_texcoord0 = aTexCoord.xyxy;
|
||||
v_texcoord1 = v_texcoord0;
|
||||
v_texcoord2 = v_texcoord0;
|
||||
v_texcoord4 = v_texcoord0;
|
||||
v_texcoord5 = v_texcoord0;
|
||||
v_texcoord1.y-=y;
|
||||
v_texcoord2.y+=y;
|
||||
v_texcoord4.x-=x;
|
||||
v_texcoord5.x+=x;
|
||||
}
|
||||
@@ -0,0 +1,296 @@
|
||||
#ifdef GL_FRAGMENT_PRECISION_HIGH
|
||||
precision highp float;
|
||||
#else
|
||||
precision mediump float;
|
||||
#endif
|
||||
varying vec2 vTexCoord;
|
||||
uniform sampler2D uTex;
|
||||
uniform float resX;
|
||||
uniform float resY;
|
||||
|
||||
|
||||
/*
|
||||
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.
|
||||
|
||||
*/
|
||||
|
||||
// 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.0,255.0,1.0);
|
||||
|
||||
|
||||
// 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;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 color, E;
|
||||
vec2 OGL2InvSize = vec2(resX, resY);
|
||||
vec2 OGL2Size = 1.0/OGL2InvSize;
|
||||
|
||||
vec2 dx = vec2(OGL2InvSize.x,0.0);
|
||||
vec2 dy = vec2(0.0, OGL2InvSize.y);
|
||||
|
||||
vec2 pix_coord = vTexCoord.xy*OGL2Size+vec2(-0.5,0.5);
|
||||
vec2 tex = (floor(vTexCoord.xy*OGL2Size) + vec2(0.5, 0.5))*OGL2InvSize;
|
||||
|
||||
vec2 tc = (floor(pix_coord)+vec2(0.5,0.5))*OGL2InvSize;
|
||||
|
||||
vec2 fp = fract(pix_coord*0.25);
|
||||
|
||||
vec3 c00 = GAMMA_IN(texture2D(uTex, tc - dx - dy).xyz);
|
||||
vec3 c01 = GAMMA_IN(texture2D(uTex, tc - dy).xyz);
|
||||
vec3 c02 = GAMMA_IN(texture2D(uTex, tc + dx - dy).xyz);
|
||||
vec3 c03 = GAMMA_IN(texture2D(uTex, tc + 2.0*dx - dy).xyz);
|
||||
vec3 c10 = GAMMA_IN(texture2D(uTex, tc - dx).xyz);
|
||||
vec3 c11 = GAMMA_IN(texture2D(uTex, tc ).xyz);
|
||||
vec3 c12 = GAMMA_IN(texture2D(uTex, tc + dx).xyz);
|
||||
vec3 c13 = GAMMA_IN(texture2D(uTex, tc + 2.0*dx).xyz);
|
||||
|
||||
color = E = GAMMA_IN(texture2D(uTex, vTexCoord.xy).xyz);
|
||||
|
||||
vec3 F0 = texture2D(uTex, tex +dx+0.25*dx +0.25*dy).xyz;
|
||||
vec3 F1 = texture2D(uTex, tex +dx+0.25*dx -0.25*dy).xyz;
|
||||
vec3 F2 = texture2D(uTex, tex +dx-0.25*dx -0.25*dy).xyz;
|
||||
vec3 F3 = texture2D(uTex, tex +dx-0.25*dx +0.25*dy).xyz;
|
||||
|
||||
vec3 H0 = texture2D(uTex, tex +0.25*dx +0.25*dy+dy).xyz;
|
||||
vec3 H1 = texture2D(uTex, tex +0.25*dx -0.25*dy+dy).xyz;
|
||||
vec3 H2 = texture2D(uTex, tex -0.25*dx -0.25*dy+dy).xyz;
|
||||
vec3 H3 = texture2D(uTex, 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);
|
||||
|
||||
bool block_3d = ((f0==f1)&&(f1==f2)&&(f2==f3)&&(h0==h1)&&(h1==h2)&&(h2==h3));
|
||||
|
||||
|
||||
#ifdef ANTI_RINGING
|
||||
// Get min/max samples
|
||||
vec3 min_sample = min(min(c01,c11), min(c02,c12));
|
||||
vec3 max_sample = max(max(c01,c11), max(c02,c12));
|
||||
// vec3 min_sample = min(min(c01,c11), min(c02,c12)) + (c10-c11)*(c12-c13);
|
||||
// vec3 max_sample = max(max(c01,c11), max(c02,c12)) - (c10-c11)*(c12-c13);
|
||||
#endif
|
||||
|
||||
mat4 color_matrix0 = mat4(vec4(c00,1.0), vec4(c01,1.0), vec4(c02,1.0), vec4(c03,1.0));
|
||||
mat4 color_matrix1 = mat4(vec4(c10,1.0), vec4(c11,1.0), vec4(c12,1.0), vec4(c13,1.0));
|
||||
|
||||
vec4 lobes = vec4(fp.x*fp.x*fp.x, fp.x*fp.x, fp.x, 1.0);
|
||||
|
||||
vec4 invX_Px = invX * lobes;
|
||||
vec3 color0 = (color_matrix0 * invX_Px).xyz;
|
||||
vec3 color1 = (color_matrix1 * invX_Px).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
|
||||
|
||||
color = block_3d ? color : E;
|
||||
|
||||
color = GAMMA_OUT(color);
|
||||
|
||||
// final sum and weight normalization
|
||||
gl_FragColor.xyz = color;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
attribute highp vec2 aVertex;
|
||||
attribute highp vec2 aTexCoord;
|
||||
varying mediump vec2 vTexCoord;
|
||||
void main(){
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
vTexCoord = aTexCoord;
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
precision mediump float;
|
||||
uniform sampler2D uTex;
|
||||
uniform lowp float resX;
|
||||
uniform lowp float resY;
|
||||
varying vec2 vTexCoord;
|
||||
void main()
|
||||
{
|
||||
const float th = 0.10;
|
||||
const float bb = 0.50;
|
||||
const float pp = 1.50;
|
||||
vec2 stp0 = vec2(resX, 0.);
|
||||
vec2 st0p = vec2(0., resY);
|
||||
vec2 stpp = vec2(resX, resY);
|
||||
vec2 stpm = vec2(resX, -resY);
|
||||
vec3 c11 = texture2D(uTex, vTexCoord).rgb;
|
||||
vec3 c00 = texture2D(uTex, vTexCoord-stpp).rgb;
|
||||
vec3 c22 = texture2D(uTex, vTexCoord+stpp).rgb;
|
||||
vec3 c20 = texture2D(uTex, vTexCoord-stpm).rgb;
|
||||
vec3 c02 = texture2D(uTex, vTexCoord+stpm).rgb;
|
||||
vec3 c01 = texture2D(uTex, vTexCoord-stp0).rgb;
|
||||
vec3 c21 = texture2D(uTex, vTexCoord+stp0).rgb;
|
||||
vec3 c10 = texture2D(uTex, vTexCoord-st0p).rgb;
|
||||
vec3 c12 = texture2D(uTex, vTexCoord+st0p).rgb;
|
||||
vec3 dt = vec3(1.0,1.0,1.0);
|
||||
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 = bb*pow(max(d1+d2+hl+vl-th,0.0),pp)/(dot(c11,dt)+0.25);
|
||||
gl_FragColor = vec4((1.1-d)*c11, 1.);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
attribute highp vec2 aVertex;
|
||||
attribute highp vec2 aTexCoord;
|
||||
varying mediump vec2 vTexCoord;
|
||||
void main(){
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
vTexCoord = aTexCoord;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
precision mediump float;
|
||||
uniform sampler2D uTex;
|
||||
uniform lowp float resX;
|
||||
uniform lowp float resY;
|
||||
varying vec2 vTexCoord;
|
||||
const float th = 0.15;
|
||||
const float bb = 1.50;
|
||||
const float pp = 1.55;
|
||||
const float cl = 7.00;
|
||||
void main()
|
||||
{
|
||||
vec2 stp0 = vec2(resX, 0.);
|
||||
vec2 st0p = vec2(0., resY);
|
||||
vec3 ct = texture2D(uTex, vTexCoord).rgb;
|
||||
vec3 lx = texture2D(uTex, vTexCoord-stp0).rgb;
|
||||
vec3 rx = texture2D(uTex, vTexCoord+stp0).rgb;
|
||||
vec3 uy = texture2D(uTex, vTexCoord-st0p).rgb;
|
||||
vec3 dy = texture2D(uTex, vTexCoord+st0p).rgb;
|
||||
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 = (p==0.0)?0.6:0.33;
|
||||
v = 0.6*(max(v-1.0+t,0.0))/t;
|
||||
v = 1.73*(p+v)/cl + 0.05;
|
||||
gl_FragColor = vec4(clamp((1.12-bb*pow(max(d-th,0.0),pp))*v*normalize(ct),0.,1.), 1.);
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
attribute highp vec2 aVertex;
|
||||
attribute highp vec2 aTexCoord;
|
||||
varying mediump vec2 vTexCoord;
|
||||
void main(){
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
vTexCoord = aTexCoord;
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
precision highp float;
|
||||
precision highp int;
|
||||
uniform sampler2D uTex;
|
||||
uniform highp float resX;
|
||||
uniform highp float resY;
|
||||
varying highp vec2 vTexCoord;
|
||||
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec2 v_texcoord5;
|
||||
varying vec2 v_texcoord6;
|
||||
float dist(vec2 coord, vec2 source)
|
||||
{
|
||||
vec2 delta = coord - source;
|
||||
return sqrt(dot(delta, delta));
|
||||
}
|
||||
float color_bloom(vec3 color)
|
||||
{
|
||||
const vec3 gray_coeff = vec3(0.30, 0.59, 0.11);
|
||||
float bright = dot(color, gray_coeff);
|
||||
return mix(1.0 + 0.05, 1.0 - 0.05, bright);
|
||||
}
|
||||
vec3 lookup(vec2 pixel_no, float offset_x, float offset_y, vec3 color)
|
||||
{
|
||||
vec2 offset = vec2(offset_x, offset_y);
|
||||
float delta = dist(fract(pixel_no), offset + vec2(0.5, 0.5));
|
||||
return color * exp(-2.4 * delta * color_bloom(color));
|
||||
}
|
||||
void main()
|
||||
{
|
||||
vec3 mid_color = lookup(v_texcoord6, 0.0, 0.0, texture2D(uTex, v_texcoord5).rgb);
|
||||
vec3 color = vec3(0.0, 0.0, 0.0);
|
||||
color += lookup(v_texcoord6, -1.0, -1.0, texture2D(uTex, v_texcoord1.xy).rgb);
|
||||
color += lookup(v_texcoord6, 0.0, -1.0, texture2D(uTex, v_texcoord1.zw).rgb);
|
||||
color += lookup(v_texcoord6, 1.0, -1.0, texture2D(uTex, v_texcoord2.xy).rgb);
|
||||
color += lookup(v_texcoord6, -1.0, 0.0, texture2D(uTex, v_texcoord2.zw).rgb);
|
||||
color += mid_color;
|
||||
color += lookup(v_texcoord6, 1.0, 0.0, texture2D(uTex, v_texcoord3.xy).rgb);
|
||||
color += lookup(v_texcoord6, -1.0, 1.0, texture2D(uTex, v_texcoord3.zw).rgb);
|
||||
color += lookup(v_texcoord6, 0.0, 1.0, texture2D(uTex, v_texcoord4.xy).rgb);
|
||||
color += lookup(v_texcoord6, 1.0, 1.0, texture2D(uTex, v_texcoord4.zw).rgb);
|
||||
vec3 out_color = mix(1.2 * mid_color, color, 0.65);
|
||||
gl_FragColor = vec4(out_color, 1.0);
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
uniform highp float outX;
|
||||
uniform highp float outY;
|
||||
attribute highp vec2 aVertex;
|
||||
attribute highp vec2 aTexCoord;
|
||||
varying highp vec2 vTexCoord;
|
||||
varying vec4 v_texcoord1;
|
||||
varying vec4 v_texcoord2;
|
||||
varying vec4 v_texcoord3;
|
||||
varying vec4 v_texcoord4;
|
||||
varying vec2 v_texcoord5;
|
||||
varying vec2 v_texcoord6;
|
||||
void main()
|
||||
{
|
||||
vTexCoord = aTexCoord;
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
float dx = 1.0 / 1280.0;
|
||||
float dy = 1.0 / 720.0;
|
||||
v_texcoord1 = vec4(vTexCoord + vec2(-dx, -dy), vTexCoord + vec2(0.0, -dy));
|
||||
v_texcoord2 = vec4(vTexCoord + vec2(dx, -dy), vTexCoord + vec2(-dx, 0.0));
|
||||
v_texcoord3 = vec4(vTexCoord + vec2(dx, 0.0), vTexCoord + vec2(-dx, dy));
|
||||
v_texcoord4 = vec4(vTexCoord + vec2(0.0, dy), vTexCoord + vec2(dx, dy));
|
||||
v_texcoord5 = vTexCoord;
|
||||
v_texcoord6 = vTexCoord * (vec2(1280.0,720.0));
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
precision mediump float;
|
||||
uniform sampler2D uTex;
|
||||
uniform lowp float resX;
|
||||
uniform lowp float resY;
|
||||
varying vec2 vTexCoord;
|
||||
void main() {
|
||||
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(uTex, vTexCoord + (vec2(-1.0, -1.0) * vec2(resX, resY))).xyz;
|
||||
vec3 rgbNE = texture2D(uTex, vTexCoord + (vec2(+1.0, -1.0) * vec2(resX, resY))).xyz;
|
||||
vec3 rgbSW = texture2D(uTex, vTexCoord + (vec2(-1.0, +1.0) * vec2(resX, resY))).xyz;
|
||||
vec3 rgbSE = texture2D(uTex, vTexCoord + (vec2(+1.0, +1.0) * vec2(resX, resY))).xyz;
|
||||
vec3 rgbM = texture2D(uTex, vTexCoord).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)) * vec2(resX, resY);
|
||||
vec3 rgbA = (1.0/2.0) * (texture2D(uTex, vTexCoord + dir * (1.0/3.0 - 0.5)).xyz +texture2D(uTex, vTexCoord + dir * (2.0/3.0 - 0.5)).xyz);
|
||||
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (texture2D(uTex, vTexCoord + dir * (0.0/3.0 - 0.5)).xyz +texture2D(uTex, vTexCoord + dir * (3.0/3.0 - 0.5)).xyz);
|
||||
float lumaB = dot(rgbB, luma);
|
||||
if((lumaB < lumaMin) || (lumaB > lumaMax)){
|
||||
gl_FragColor.xyz=rgbA;
|
||||
}else{
|
||||
gl_FragColor.xyz=rgbB;
|
||||
}
|
||||
gl_FragColor.a = 1.0;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
attribute highp vec2 aVertex;
|
||||
attribute highp vec2 aTexCoord;
|
||||
varying mediump vec2 vTexCoord;
|
||||
void main(){
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
vTexCoord = aTexCoord;
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
precision mediump float; // Set the default precision to medium. We don't need as high of a
|
||||
uniform sampler2D uTex; // The input texture.
|
||||
uniform lowp float resX;
|
||||
uniform lowp float resY;
|
||||
varying vec2 vTexCoord; // Interpolated texture coordinate per fragment
|
||||
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() {
|
||||
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(uTex, vTexCoord + (vec2(-1.0, -1.0) * vec2(resX, resY))).xyz;
|
||||
vec3 rgbNE = texture2D(uTex, vTexCoord + (vec2(+1.0, -1.0) * vec2(resX, resY))).xyz;
|
||||
vec3 rgbSW = texture2D(uTex, vTexCoord + (vec2(-1.0, +1.0) * vec2(resX, resY))).xyz;
|
||||
vec3 rgbSE = texture2D(uTex, vTexCoord + (vec2(+1.0, +1.0) * vec2(resX, resY))).xyz;
|
||||
vec3 rgbM = texture2D(uTex, vTexCoord).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)) * vec2(resX, resY);
|
||||
vec3 rgbA = (1.0/2.0) * (
|
||||
texture2D(uTex, vTexCoord + dir * (1.0/3.0 - 0.5)).xyz +
|
||||
texture2D(uTex, vTexCoord + dir * (2.0/3.0 - 0.5)).xyz);
|
||||
vec3 rgbB = rgbA * (1.0/2.0) + (1.0/4.0) * (
|
||||
texture2D(uTex, vTexCoord + dir * (0.0/3.0 - 0.5)).xyz +
|
||||
texture2D(uTex, vTexCoord + 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,7 @@
|
||||
attribute highp vec2 aVertex;
|
||||
attribute highp vec2 aTexCoord;
|
||||
varying mediump vec2 vTexCoord;
|
||||
void main(){
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
vTexCoord = aTexCoord;
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
precision mediump float;
|
||||
varying vec2 vTexCoord;
|
||||
uniform sampler2D uTex;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 fragColor = texture2D(uTex, vTexCoord);
|
||||
gl_FragColor = vec4(dot(fragColor, vec4(0.299, 0.587, 0.114, 0.0)));
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
attribute highp vec2 aVertex;
|
||||
attribute highp vec2 aTexCoord;
|
||||
varying mediump vec2 vTexCoord;
|
||||
void main(){
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
vTexCoord = aTexCoord;
|
||||
}
|
||||
@@ -0,0 +1,80 @@
|
||||
precision mediump float;
|
||||
varying vec2 vTexCoord;
|
||||
uniform sampler2D uTex;
|
||||
uniform float resX;
|
||||
uniform float resY;
|
||||
|
||||
float CLength(vec4 c)
|
||||
{
|
||||
float rmean = c.x*0.5;
|
||||
c*= c;
|
||||
return sqrt((2.0+rmean)*c.x+4.0*c.y+(3.0-rmean)*c.z)/3.0;
|
||||
}
|
||||
|
||||
vec3 rgb_to_hsv(vec3 RGB)
|
||||
{
|
||||
float minVal = min(min(RGB.x,RGB.y),RGB.z);
|
||||
float maxVal = max(max(RGB.x,RGB.y),RGB.z);
|
||||
float delta = maxVal - minVal; //Delta RGB value
|
||||
vec3 HSV;
|
||||
HSV.z = maxVal;
|
||||
if (delta != 0.0) { // If gray, leave H & S at zero
|
||||
HSV.y = delta / maxVal;
|
||||
vec3 delRGB;
|
||||
delRGB = (((vec3(maxVal) - RGB)/6.0)+(delta/2.0))/delta;
|
||||
if (RGB.x == maxVal) HSV.x = delRGB.z - delRGB.y;
|
||||
else if (RGB.y == maxVal) HSV.x = (1.0/3.0) + delRGB.x - delRGB.z;
|
||||
else if (RGB.z == maxVal) HSV.x = (2.0/3.0) + delRGB.y - delRGB.x;
|
||||
if (HSV.x < 0.0) { HSV.x += 1.0; }
|
||||
if (HSV.x > 1.0) { HSV.x -= 1.0; }
|
||||
}
|
||||
return HSV;
|
||||
}
|
||||
|
||||
vec3 hsv_to_rgb(vec3 HSV)
|
||||
{
|
||||
vec3 RGB = vec3(HSV.z);
|
||||
if ( HSV.y != 0.0 ) {
|
||||
float var_h = HSV.x * 6.0;
|
||||
float var_i = floor(var_h);
|
||||
float var_1 = HSV.z * (1.0 - HSV.y);
|
||||
float var_2 = HSV.z * (1.0 - HSV.y * (var_h-var_i));
|
||||
float var_3 = HSV.z * (1.0 - HSV.y * (1.0-(var_h-var_i)));
|
||||
if (var_i == 0.0) { RGB = vec3(HSV.z, var_3, var_1); }
|
||||
else if (var_i == 1.0) { RGB = vec3(var_2, HSV.z, var_1); }
|
||||
else if (var_i == 2.0) { RGB = vec3(var_1, HSV.z, var_3); }
|
||||
else if (var_i == 3.0) { RGB = vec3(var_1, var_2, HSV.z); }
|
||||
else if (var_i == 4.0) { RGB = vec3(var_3, var_1, HSV.z); }
|
||||
else { RGB = vec3(HSV.z, var_1, var_2); }
|
||||
}
|
||||
return RGB;
|
||||
}
|
||||
|
||||
void main (void)
|
||||
{
|
||||
vec2 OGL2Param = vec2(resX, resY);
|
||||
vec4 c0 = texture2D(uTex, vTexCoord.xy);
|
||||
vec4 c1 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 0.0, 1.0));
|
||||
vec4 c2 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2(-1.0, 1.0));
|
||||
vec4 c3 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2(-1.0, 0.0));
|
||||
vec4 c4 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2(-1.0,-1.0));
|
||||
vec4 c5 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 0.0,-1.0));
|
||||
vec4 c6 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 1.0,-1.0));
|
||||
vec4 c7 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 1.0, 0.0));
|
||||
vec4 c8 = texture2D(uTex, vTexCoord.xy + OGL2Param * vec2( 1.0, 1.0));
|
||||
|
||||
vec4 a0 = c8 - c4;
|
||||
vec4 a1 = a0 - c2 - 2.0 * c3 + c6 + 2.0 * c7;
|
||||
a0 = a0 + c2 + c1 * 2.0 - 2.0 * c5 - c6;
|
||||
|
||||
a0 = a0 * a0 + a1 * a1;
|
||||
|
||||
float toon = CLength(a0);
|
||||
|
||||
c0.rgb = rgb_to_hsv(c0.rgb);
|
||||
c0.b = min(1.0,2.0*c0.b);
|
||||
c0.rgb = hsv_to_rgb(c0.rgb);
|
||||
|
||||
gl_FragColor = c0 - vec4(toon);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
attribute highp vec2 aVertex;
|
||||
attribute highp vec2 aTexCoord;
|
||||
varying mediump vec2 vTexCoord;
|
||||
void main(){
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
vTexCoord = aTexCoord;
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
precision mediump float;
|
||||
varying vec2 vTexCoord;
|
||||
uniform sampler2D uTex;
|
||||
uniform float resX;
|
||||
uniform float resY;
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 rgb = texture2D(uTex, vTexCoord.xy);
|
||||
|
||||
vec4 intens = smoothstep(0.2,0.8,rgb) + normalize(vec4(rgb.xyz,1.0));
|
||||
|
||||
if (fract(gl_FragCoord.y*0.5) > 0.5) intens = rgb * 0.8;
|
||||
|
||||
gl_FragColor = intens;
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
attribute highp vec2 aVertex;
|
||||
attribute highp vec2 aTexCoord;
|
||||
varying mediump vec2 vTexCoord;
|
||||
void main(){
|
||||
gl_Position = vec4(aVertex.x, aVertex.y, 0.0, 1.0);
|
||||
vTexCoord = aTexCoord;
|
||||
}
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,753 @@
|
||||
# SC3000
|
||||
|
||||
SMS-0274179A: Basic 2.10
|
||||
SMS-8CC35177: Basic 3.10
|
||||
SMS-A1BB9533: Music Editor
|
||||
SMS-67A72170: Music Editor
|
||||
SMS-3D36FFBA: Nihonshi Nenpyou
|
||||
SMS-676D1EF9: Tanoshii Sansuu
|
||||
|
||||
# SF7000
|
||||
|
||||
SMS-B44024B4: 102 Programs for Yeno
|
||||
SMS-4C62E6A0: Board Games
|
||||
SMS-7D7F46D9: Crocky
|
||||
SMS-EDB3ADA4: Disk BASIC
|
||||
SMS-ED201C54: Educational
|
||||
SMS-2545DE44: Games 1
|
||||
SMS-FA905FB6: Games 2
|
||||
SMS-EDB3ADA4: Graphics
|
||||
SMS-7139E375: Kamikaze
|
||||
SMS-FF3154DC: Music
|
||||
SMS-EDB3ADA4: Olympics
|
||||
SMS-1B4AB585: Poseidon Space
|
||||
SMS-EDB3ADA4: Programming
|
||||
SMS-EDB3ADA4: System
|
||||
SMS-5994FB34: Utils DAO
|
||||
SMS-EDB3ADA4: Yeno Demo
|
||||
SMS-EDB3ADA4: Yeno Draw 1
|
||||
SMS-1264D53B: Yeno Draw 2
|
||||
SMS-922F3E10: Yeno Super Games
|
||||
|
||||
# GameGear
|
||||
|
||||
GG-E5A00815: 4-in-1
|
||||
GG-34645DAB: 5-in-1
|
||||
GG-D14AD8D6: Aerial Assault
|
||||
GG-600A43D7: Aladdin
|
||||
GG-600A43D7: Aladdin
|
||||
GG-92883E2B: Aleste
|
||||
GG-6A8D3874: Aleste 2
|
||||
GG-9E6C75CE: Alien 3
|
||||
GG-5002A558: Alien Syndrome
|
||||
GG-FE927A98: Andre Agassi Tennis
|
||||
GG-4CBEA8CE: Arcade Classics
|
||||
GG-4C24CA06: Arch Rivals
|
||||
GG-E53F42A5: Arena
|
||||
GG-A69FFC77: Asterix Great Rescue
|
||||
GG-7E256149: Ax Battler
|
||||
GG-E8D6C1CD: Ax Battler
|
||||
GG-C9E73AB5: Baku Baku Animal
|
||||
GG-8567CDFF: Baseball '91
|
||||
GG-291521EA: Batman and Robin
|
||||
GG-64D128F5: Batman Forever
|
||||
GG-23242473: Batman Returns
|
||||
GG-4FCC613C: Batter Up
|
||||
GG-AD35B38E: Battle Ship
|
||||
GG-2C3C293B: Battletoads
|
||||
GG-F0D71343: Beavis and Butthead
|
||||
GG-E860B271: Berlin Wall
|
||||
GG-BCFE1DEB: Bonkers Wax Up
|
||||
GG-8B85A184: Bubble Bobble
|
||||
GG-A5CD4E3C: Bugs Bunny Double Trouble
|
||||
GG-E34B9EAA: Bust a Move
|
||||
GG-F72A96AA: Buster Ball
|
||||
GG-3D6DC66C: Buster Fight
|
||||
GG-87514CD3: Captain America
|
||||
GG-B833EF21: Casino
|
||||
GG-EB229B19: Chakan
|
||||
GG-8CDA710B: Chessmaster
|
||||
GG-FC56E19A: Chicago Syndicate
|
||||
GG-F15432FC: Chuck Rock
|
||||
GG-C4F83772: Chuck Rock 2
|
||||
GG-B8F1C273: Clutch Hitter
|
||||
GG-255AA0D6: Coca Cola Kids
|
||||
GG-387118DA: Columns
|
||||
GG-31EC7137: Cool Spot
|
||||
GG-D209EF29: Crash Dummies
|
||||
GG-6E0DE72F: Crystal Warriors
|
||||
GG-7A88AA43: Cut Throat Island
|
||||
GG-7A88AA43: Cut Throat Island
|
||||
GG-C6ABEC57: Daffy Duck
|
||||
GG-D15A7199: Deep Duck Trouble
|
||||
GG-D7BDE00E: Defenders of Oasis
|
||||
GG-D7BDE00E: Defenders of Oasis
|
||||
GG-3E4C78BD: Desert Speedtrap
|
||||
GG-273669D8: Desert Strike
|
||||
GG-175FC339: Devilish
|
||||
GG-08C43F46: Doraemon
|
||||
GG-428E6528: Double Dragon
|
||||
GG-BD1EDCA0: Dracula
|
||||
GG-81CEA900: Dragon
|
||||
GG-F06C38AE: Dragon Crystal
|
||||
GG-9814ADB8: Dragon Crystal
|
||||
GG-FC4D4A75: Dream 11 Soccer
|
||||
GG-49A4DCD4: Dunk Kids
|
||||
GG-FE0FD6E3: Dynamite Headdy
|
||||
GG-D5F067DE: Earthworm Jim
|
||||
GG-607E0092: Ecco Dolphin
|
||||
GG-20EA9CAB: Ecco Tides of Time
|
||||
GG-7EEFABB4: Eternal Legend
|
||||
GG-2CD08031: Evander Holyfield Boxing
|
||||
GG-F1B7E052: F1
|
||||
GG-FB98F938: F15 Strike Eagle
|
||||
GG-F7F08FD4: FIFA International Soccer
|
||||
GG-C40AD91D: FIFA Soccer '96
|
||||
GG-8A6688ED: Face Ball 2000
|
||||
GG-68E6A5FF: Factory Panic
|
||||
GG-0F12E62C: Factory Panic
|
||||
GG-8685A064: Fantasy Zone
|
||||
GG-0EE626E8: Fatal Fury Special
|
||||
GG-554F3F9F: Foreman for Real
|
||||
GG-BACB70BD: Frank Thomas Big Hurt Baseball
|
||||
GG-F3C1DB29: Fred Couples Golf
|
||||
GG-B0702E0E: GLoc Air Battle
|
||||
GG-3E129A3D: GLoc Air Battle
|
||||
GG-40F2667E: GLoc Air Battle
|
||||
GG-8D1659E1: GP Rider
|
||||
GG-5584BEF5: Galaga 91
|
||||
GG-3FF119DB: Games Part 2
|
||||
GG-2BD72848: Gear Stadium Heiseiban
|
||||
GG-1E5F7151: Gear Stadium
|
||||
GG-04E043C6: Gear Works
|
||||
GG-C2E54AA9: George Foreman Boxing
|
||||
GG-3432CD9E: Godzilla
|
||||
GG-264BD84C: Greendog
|
||||
GG-678B0561: Griffin
|
||||
GG-04B828B9: Gunstar Heroes
|
||||
GG-D6907642: Halley Wars
|
||||
GG-E069DD7F: Hao Pai
|
||||
GG-F66C754A: Head Buster
|
||||
GG-90889275: Home Alone
|
||||
GG-150B600A: Hook
|
||||
GG-B0040194: House of Tarot
|
||||
GG-AFD25B5C: Incredible Hulk
|
||||
GG-211E10CD: Indiana Jones
|
||||
GG-8EAE787D: Iron Man and Manowar
|
||||
GG-E0BD3B6D: Itchy and Scratchy Game
|
||||
GG-CCB4FD4A: Jeopardy
|
||||
GG-88BA0882: Jeopardy Sports
|
||||
GG-7838D891: Joe Montana Football
|
||||
GG-F7D07FDA: Judge Dredd
|
||||
GG-E856BEFF: Junction
|
||||
GG-CBB8F95B: Jungle Book
|
||||
GG-7FF40B54: Jurassic Park
|
||||
GG-2C95B01C: Kinetic Connection
|
||||
GG-7B335196: Krustys Fun House
|
||||
GG-B8D220F6: Last Action Hero
|
||||
GG-A8CA8BE7: Last Bible 2
|
||||
GG-C98E268D: Last Bible
|
||||
GG-0CE9B7AD: Lemmings
|
||||
GG-62F04AC8: Lemmings
|
||||
GG-62F04AC8: Lemmings
|
||||
GG-7D791642: Lillehammer '94
|
||||
GG-F1298278: Lion King
|
||||
GG-28DEF1D3: Little Mermaid
|
||||
GG-6D1C85A6: Lucky Dime
|
||||
GG-6D1C85A6: Lucky Dime
|
||||
GG-5B1888BD: Lunar
|
||||
GG-5CE9B363: Madden '96
|
||||
GG-48230FB0: Madden NFL '95
|
||||
GG-5FA93289: Magical Taruru to Kun
|
||||
GG-E29A261D: Mah Jong
|
||||
GG-938FAB1C: Majors Pro Baseball
|
||||
GG-EC433472: Mappy
|
||||
GG-78CB84C2: Marble Madness
|
||||
GG-EC8CBD76: Markos Magic Football
|
||||
GG-47A5FD38: Mean Bean Machine
|
||||
GG-FA1E3E04: Megaman
|
||||
GG-1B32C3FC: Mick and Mack
|
||||
GG-86A1D3D9: Mickey Land of Illusion
|
||||
GG-E08C4910: Mickey Legend of Illusion
|
||||
GG-74B8BC1D: Mickey Magical Kingdom
|
||||
GG-3ED7D23A: Mickeys Ultimate Challenge
|
||||
GG-30A2FDB7: Monster Truck Wars
|
||||
GG-0957B6CD: Mortal Kombat
|
||||
GG-76203566: Mortal Kombat 2
|
||||
GG-5DD26F3A: Mortal Kombat 3
|
||||
GG-58940629: Ms Pacman
|
||||
GG-062301C0: NBA Action
|
||||
GG-F7D4AF2A: NBA Jam
|
||||
GG-95E72C68: NBA Jam Tournament
|
||||
GG-72476239: NFL '95
|
||||
GG-F8069F32: NFL Quarterback Club '96
|
||||
GG-8F1BA221: NHL All Star Hockey
|
||||
GG-C656FAAE: NHL Hockey
|
||||
GG-7F28E71F: Nazo Puyo
|
||||
GG-3B9335F1: Ninja Gaiden
|
||||
GG-424242D5: Ninja Gaiden
|
||||
GG-737ABE10: Ninku
|
||||
GG-8725C4D9: Ottifants
|
||||
GG-A433C4F6: Outrun
|
||||
GG-FC582218: PGA Tour '96
|
||||
GG-C1872E30: PGA Tour Golf 2
|
||||
GG-9254B56D: Pac Attack
|
||||
GG-9B0CCC37: Pacman
|
||||
GG-0E957CD0: Paperboy
|
||||
GG-54CC8034: Paul's Blackjack
|
||||
GG-BF988548: Paul's Poker
|
||||
GG-83B89174: Paul's Solitaire
|
||||
GG-20214F74: Pengo
|
||||
GG-FFD7FD2D: Phantasy Star Adventure
|
||||
GG-51B3D341: Phantasy Star
|
||||
GG-2584A84F: Phantom 2040
|
||||
GG-0115CFD9: Pop Breaker
|
||||
GG-E013AC9C: Popeye Beach Volleyball
|
||||
GG-D41CF642: Popils
|
||||
GG-A88D10B1: Power Rangers
|
||||
GG-6948D542: Power Rangers Movie
|
||||
GG-87AD08E3: Primal Rage
|
||||
GG-40A32344: Psychic World
|
||||
GG-861ECF73: Puyo Puyo 2
|
||||
GG-3F9FC809: Puzlow Kids
|
||||
GG-323489E0: Quiz Gear
|
||||
GG-5B5B8BEF: RBI Baseball '94
|
||||
GG-5B5B8BEF: RBI Baseball '94
|
||||
GG-5F518F21: Ray Earth 2
|
||||
GG-1D6EB8DD: Ray Earth
|
||||
GG-DF55BBCA: Ren and Stimpy
|
||||
GG-9A19C81E: Revenge of Drancon
|
||||
GG-D0B035C1: Riddick Bowe Boxing
|
||||
GG-C34CAEB8: Ristar
|
||||
GG-32597488: Road Of Magic 2
|
||||
GG-210C237D: Road Of Magic 3
|
||||
GG-325BB911: Road Of Magic
|
||||
GG-CCF0E19D: Road Rash
|
||||
GG-77F6773B: Robocop 3
|
||||
GG-60F52E6C: Robocop vs Terminator
|
||||
GG-FA1E7714: Ronald in Magical World
|
||||
GG-70C1A950: Royal Stone
|
||||
GG-5E0E67A8: Ryu Kyu
|
||||
GG-D239C688: SD Gundam Winners History
|
||||
GG-EB5BCDB4: Sailor Moon
|
||||
GG-1421A863: Saint
|
||||
GG-7E57002C: Samurai Shodown
|
||||
GG-AF96E5B7: Samurai Spirits
|
||||
GG-C7FA78E8: Scratch Golf
|
||||
GG-DB184610: Shanghai 2
|
||||
GG-A64AE214: Shaq Fu
|
||||
GG-1A9867E5: Shikin Castle
|
||||
GG-70C791B2: Shining Force 2
|
||||
GG-70C791B2: Shining Force 2
|
||||
GG-70C791B2: Shining Force 3
|
||||
GG-B42F5443: Shining Force
|
||||
GG-4868AF97: Shinobi
|
||||
GG-02CDBFD5: Shinobi 2
|
||||
GG-4868AF97: Shinobi
|
||||
GG-E081AEAB: Simpsons: Bart vs Mutants
|
||||
GG-C513070B: Simpsons: Bart vs World
|
||||
GG-44C49734: Simpsons: Bartman Meets Radioactive Man
|
||||
GG-DF62839A: Skweek
|
||||
GG-60BD0530: Slamdunk
|
||||
GG-FE85E4D0: Slider
|
||||
GG-1B6AD71A: Smash TV
|
||||
GG-1CFF4419: Smurfs
|
||||
GG-AB6A3283: Solitaire Fun Pak
|
||||
GG-7F487400: Solitaire Poker
|
||||
GG-462FDCE1: Sonic and Tails
|
||||
GG-6D667E74: Sonic and Tails 2
|
||||
GG-1167F6F2: Sonic Blast
|
||||
GG-303D4CC6: Sonic Chaos
|
||||
GG-9FB491AC: Sonic Drift
|
||||
GG-9595442C: Sonic Drift 2
|
||||
GG-412662EC: Sonic Hedgehog
|
||||
GG-7CB94632: Sonic Hedgehog 2
|
||||
GG-032E890C: Sonic Labyrinth
|
||||
GG-28022178: Sonic Spinball
|
||||
GG-3FC35B3C: Sonic Triple Trouble
|
||||
GG-F63BDDDC: Soukoban
|
||||
GG-5B34BBDC: Space Harrier
|
||||
GG-FFD17781: Spiderman
|
||||
GG-3745479C: Spiderman vs XMen
|
||||
GG-60F3BFEC: Sports Illustrated Football and Baseball
|
||||
GG-35B44CCD: Sports Trivia
|
||||
GG-0E95AD8C: Sports Trivia Championship Edition
|
||||
GG-8CE0D025: Star Wars
|
||||
GG-1C7F4E00: Stargate
|
||||
GG-B6279003: Streets of Rage
|
||||
GG-37FF4A07: Streets of Rage 2
|
||||
GG-ECE30A2F: Strider Returns
|
||||
GG-7BFE73CC: Super Columns
|
||||
GG-5752F009: Super Golf
|
||||
GG-B38C0DD5: Super Monaco GP
|
||||
GG-57C0F784: Super Monaco GP 2
|
||||
GG-B9E9EABC: Super Off Road
|
||||
GG-EDE3ACF8: Super Return of Jedi
|
||||
GG-53EBABE4: Super Space Invaders
|
||||
GG-B801A283: Super Wagan Land
|
||||
GG-CC237DFD: Super Wars
|
||||
GG-3C714539: Surfing Ninjas
|
||||
GG-FEC55D11: Sylvan Tale
|
||||
GG-75C5B7CC: T2Arcade Game
|
||||
GG-52C14765: Tails Adventures
|
||||
GG-19FCFD53: Tails Sky Patrol
|
||||
GG-7F0446E7: Talespin
|
||||
GG-C67260C2: Tama and Friends Olympics
|
||||
GG-7E606200: Taz Escape from Mars
|
||||
GG-43CFECCD: Tazmania
|
||||
GG-5F5BE6C4: Tempo Jr
|
||||
GG-32CDF9FE: Terminator
|
||||
GG-6B9F80DC: Terminator 2
|
||||
GG-0FF55C69: Tesserae
|
||||
GG-559908DC: Tin Tin in Tibet
|
||||
GG-0196A0D1: Tom and Jerry
|
||||
GG-A9E62EAE: True Lies
|
||||
GG-BD600BFF: Ultimate Soccer
|
||||
GG-830422EB: VR Troopers
|
||||
GG-579F0CD6: Vampire (SEGA)
|
||||
GG-579F0CD6: Vampire (SIMS)
|
||||
GG-4DBA836D: Virtua Fighter
|
||||
GG-D40F76FA: Virtua Fighters Akira
|
||||
GG-A53071DE: Virtua Fighters Pai Chan
|
||||
GG-6C57F553: Volleyball
|
||||
GG-C9907760: Voyage of Hyoutanjima
|
||||
GG-42FD07F0: WWF Raw
|
||||
GG-6295D408: Wizard Pinball
|
||||
GG-49F26E0C: Wonder Boy
|
||||
GG-183D4E26: Wonder Boy 3
|
||||
GG-81E1D7B4: Wonder Boy 3
|
||||
GG-AA6175EF: Woody Pop
|
||||
GG-02ED2F29: World Class Leader Board Golf
|
||||
GG-EBC0E24C: World Cup '94
|
||||
GG-B38C0DD5: World GP
|
||||
GG-C4CFA593: World Series Baseball
|
||||
GG-4AA1C5F8: World Series Baseball
|
||||
GG-8234C1C2: World Series Baseball '95
|
||||
GG-FEC28F0A: XMen
|
||||
GG-89482EF0: XMen Gamemaster's Legacy
|
||||
GG-2529A965: XMen in Mojo World
|
||||
GG-7CB2B470: Yaiba
|
||||
GG-3F23F78C: Yogi Bears Gold Rush
|
||||
GG-5FA2D398: Yu Yu Hakusho 2
|
||||
GG-0C40C460: Yu Yu Hakusho
|
||||
GG-76F3268F: Zan Gear
|
||||
GG-D40CA2E9: Zool
|
||||
GG-E4842114: Zoop
|
||||
|
||||
# SG1000
|
||||
|
||||
SMS-7E733101: Bank Panic
|
||||
SMS-894ABB0A: Bomb Jack
|
||||
SMS-066977F5: Borderline
|
||||
SMS-2DF2E506: C-47
|
||||
SMS-41D4ABE8: CSo
|
||||
SMS-240D88EA: Castle
|
||||
SMS-7569EEFF: Chack and Pop
|
||||
SMS-E854AEEA: Champion Baseball
|
||||
SMS-083AC52D: Champion Billiards
|
||||
SMS-E152D16B: Champion Boxing
|
||||
SMS-B4DA4E18: Champion Boxing
|
||||
SMS-5A718F40: Champion Golf
|
||||
SMS-5A718F40: Champion Golf
|
||||
SMS-5AFD0539: Champion Ice Hockey
|
||||
SMS-3EB2F398: Champion Pro Wrestling
|
||||
SMS-C271E59F: Champion Soccer
|
||||
SMS-7E744C66: Champion Tennis
|
||||
SMS-DED6E279: Choplifter
|
||||
SMS-98E58D21: Dragon Wang
|
||||
SMS-2A5D58EC: Drol
|
||||
SMS-DF0F1194: Elevator Action
|
||||
SMS-8A7C7DA2: Exerion
|
||||
SMS-6D022E3D: Flicky
|
||||
SMS-DC5C8E60: GP World
|
||||
SMS-F32BC995: Girls Garden
|
||||
SMS-712CCE24: Golgo 13
|
||||
SMS-894931FF: Gulkave
|
||||
SMS-29B1909B: Guzzler
|
||||
SMS-2B184269: Hang On 2
|
||||
SMS-F2BD3DA2: Hero
|
||||
SMS-2C8D3EA3: Hustle Chumy
|
||||
SMS-602EE204: Hyper Sports
|
||||
SMS-00901472: James Bond 007
|
||||
SMS-20A22C16: Lode Runner
|
||||
SMS-3AE47C9D: Lode Runner Championship
|
||||
SMS-D46173E3: Monaco GP
|
||||
SMS-9909FF02: Ninja
|
||||
SMS-3B5F14F0: Orguss
|
||||
SMS-FDCE4391: Pacar
|
||||
SMS-184BA811: Pachinko 2
|
||||
SMS-7FE3E65D: Penguin Egg
|
||||
SMS-464FF4DA: Pop Flamer
|
||||
SMS-37678738: QBert
|
||||
SMS-BB7B1735: Rock and Bolt
|
||||
SMS-E83023AB: Safari Hunting
|
||||
SMS-1E3B67A8: Safari Race
|
||||
SMS-C9DB366C: Sega Galaga
|
||||
SMS-5D793949: Soukoban
|
||||
SMS-F59FC1CB: Space Invaders
|
||||
SMS-A89E022C: Star Force
|
||||
SMS-1FDCA87D: Star Jacker
|
||||
SMS-B165C080: Star Jacker
|
||||
SMS-BD6FC22B: Super Tank
|
||||
SMS-384339BB: Sword Fight
|
||||
SMS-7CC5BE6A: Wonder Boy
|
||||
SMS-C652BE2C: Yamato
|
||||
SMS-C9EB9C6C: Zaxxon
|
||||
SMS-BE551992: Zippy Race
|
||||
|
||||
# MasterSystem
|
||||
|
||||
SMS-BDD13CB6: ALF
|
||||
SMS-B3341812: Ace of Aces
|
||||
SMS-8391EB14: Action Fighter
|
||||
SMS-C13645D5: Addams Family
|
||||
SMS-75D66E6D: Aerial Assault
|
||||
SMS-36DB262B: After Burner
|
||||
SMS-34CC7833: Air Rescue
|
||||
SMS-42FE34A4: Aladdin
|
||||
SMS-0079B2BD: Aleste
|
||||
SMS-CC76175F: Aleste 2
|
||||
SMS-60A9475D: Aleste
|
||||
SMS-7AED96C5: Alex in Hitech World
|
||||
SMS-0F084CDE: Alex in Miracle World
|
||||
SMS-83EE2949: Alex in Shinobi World
|
||||
SMS-36134B51: Alex Kidd BMX Trial
|
||||
SMS-BD555E2C: Alex Lost Stars
|
||||
SMS-EC30F5D5: Alien 3
|
||||
SMS-F2745B7E: Alien Storm
|
||||
SMS-33E2D518: Alien Syndrome
|
||||
SMS-58CA1BC1: Altered Beast
|
||||
SMS-0DD199EC: American Baseball
|
||||
SMS-22C6E438: American Pro Football
|
||||
SMS-23A7D99D: Andre Agassi Tennis
|
||||
SMS-D8F47118: Anmitsu Hime
|
||||
SMS-1B619CCF: Arcade Hits
|
||||
SMS-75235957: Ashura
|
||||
SMS-B0E473DD: Asterix
|
||||
SMS-9D631A24: Asterix Great Rescue
|
||||
SMS-96DF1F67: Asterix Secret Mission
|
||||
SMS-8CC13EF4: Astro Flash
|
||||
SMS-9AE94EF7: Astro Warrior
|
||||
SMS-B3397C20: Aztec Adventure
|
||||
SMS-A5F44AE6: Back to the Future 2
|
||||
SMS-383121F2: Back to the Future 3
|
||||
SMS-33B2F22F: Baku Baku Animal
|
||||
SMS-A848DF63: Bank Panic
|
||||
SMS-CD54CB05: Barcelona '92
|
||||
SMS-C9DA0600: Barcelona '92
|
||||
SMS-AE56C45B: Basketball Nightmare
|
||||
SMS-30007801: Batman Returns
|
||||
SMS-17D09D7B: Battle Outrun
|
||||
SMS-361A3DEE: Black Belt
|
||||
SMS-46E8C4B1: Blade Eagle 3D
|
||||
SMS-01BD8596: Bomber Raid
|
||||
SMS-7B297369: Bonanza Brothers
|
||||
SMS-89643C05: Borgman
|
||||
SMS-BEC3B600: Bubble Bobble
|
||||
SMS-BEC3B600: Bubble Bobble Final
|
||||
SMS-F0E732FD: Buggy Run
|
||||
SMS-14FB8953: California Games
|
||||
SMS-61C27870: California Games 2
|
||||
SMS-94824644: California Games 2
|
||||
SMS-177FA54D: Captain Silver (1988)
|
||||
SMS-4BB639B9: Captain Silver (1989)
|
||||
SMS-D19FA102: Carmen San Diego
|
||||
SMS-D60A3BD4: Casino Games
|
||||
SMS-3E7EF412: Castelo Ra Tim Bum
|
||||
SMS-F74187EF: Champions of Europe
|
||||
SMS-60A28756: Championship Hockey
|
||||
SMS-D0B6557C: Chapolim X Dracula
|
||||
SMS-2696955F: Chase HQ
|
||||
SMS-29F677C7: Cheese Catastrophe
|
||||
SMS-17289447: Choplifter
|
||||
SMS-C91A88EA: Chuck Rock
|
||||
SMS-B2B80CDD: Chuck Rock 2
|
||||
SMS-DFA7B8E7: Cloud Master
|
||||
SMS-BE25530E: Columns
|
||||
SMS-E6896DC3: Cool Spot
|
||||
SMS-EC360D84: Crash Dummies
|
||||
SMS-E5BC2A78: Cyber Shinobi
|
||||
SMS-0365330C: Cyborg Hunter
|
||||
SMS-0AC3EC2F: Daffy Duck
|
||||
SMS-199FE655: Danan Jungle Fighter
|
||||
SMS-AF22619F: Dead Angle
|
||||
SMS-413707E6: Deep Duck Trouble
|
||||
SMS-E583951B: Desert Speedtrap
|
||||
SMS-84DBEF12: Desert Strike
|
||||
SMS-2D707BC0: Dick Tracy
|
||||
SMS-A2E204EE: Double Dragon
|
||||
SMS-06C42559: Double Hawk
|
||||
SMS-FAB83EDC: Double Target
|
||||
SMS-87A29AFB: Dracula
|
||||
SMS-5C3C27CC: Dragon
|
||||
SMS-236B08D8: Dragon Crystal
|
||||
SMS-B131B172: Dynamite Duke
|
||||
SMS-167F6369: Dynamite Dux
|
||||
SMS-2E7B1F40: ESWAT
|
||||
SMS-131E2D7A: ESWAT
|
||||
SMS-7F5DD956: Ecco Dolphin
|
||||
SMS-3B696950: Enduro Racer
|
||||
SMS-FE2F06ED: F1
|
||||
SMS-BBCF84AA: F16 Fighter
|
||||
SMS-528FF84D: F16 Fighting Falcon
|
||||
SMS-35D86A2C: Fantasy Zone
|
||||
SMS-9C7C0A81: Fantasy Zone 2
|
||||
SMS-90260BEC: Fantasy Zone 2
|
||||
SMS-198B83D7: Fantasy Zone Maze
|
||||
SMS-DA8B3063: Fire and Forget 2
|
||||
SMS-79D5C87B: Flash
|
||||
SMS-9068D00F: Flintstones
|
||||
SMS-68069DFD: Forgotten Worlds
|
||||
SMS-72825350: GLoc Air Battle
|
||||
SMS-733E589C: Gain Ground
|
||||
SMS-7DCECFB4: Galactic Protector
|
||||
SMS-C8C250D6: Galaxy Force
|
||||
SMS-53FBB6B4: Game Box Esportes Radicais
|
||||
SMS-48C86F02: Gangster Town
|
||||
SMS-E5459863: Gauntlet
|
||||
SMS-69256E75: George Foreman's Boxing
|
||||
SMS-8D00AD02: Geraldinho
|
||||
SMS-F14A3CC9: Ghost Busters
|
||||
SMS-89849FBB: Ghost House
|
||||
SMS-45504E03: Ghost House
|
||||
SMS-6B6F3E4E: Ghouls and Ghosts
|
||||
SMS-B8239443: Global Defense
|
||||
SMS-CEAD6B89: Golden Axe
|
||||
SMS-402B6A9C: Golden Axe Warrior
|
||||
SMS-13CA704A: Golfmania
|
||||
SMS-FD292E2C: Golfmania
|
||||
SMS-2A841174: Golvellius
|
||||
SMS-A2753BBC: Golvellius
|
||||
SMS-40FD4426: Great Baseball
|
||||
SMS-362CDD04: Great Baseball
|
||||
SMS-D8C55506: Great Basketball
|
||||
SMS-D3B477B5: Great Football
|
||||
SMS-70BDB6FA: Great Golf
|
||||
SMS-F616E67F: Great Golf
|
||||
SMS-F37818ED: Great Ice Hockey
|
||||
SMS-FF2E335F: Great Volleyball
|
||||
SMS-6D15F4AD: Great Volleyball
|
||||
SMS-D17C7DD7: Haja No Fuuin
|
||||
SMS-81BDAFC8: Hang On and Safari Hunt
|
||||
SMS-ED51C618: Hang On
|
||||
SMS-0DEF7892: Hang On
|
||||
SMS-51DA2540: Heavyweight Champ
|
||||
SMS-94D5E609: Heroes of the Lance
|
||||
SMS-FD2F3FDB: High School Kimengumi
|
||||
SMS-4EDA3F89: Hokutoboken
|
||||
SMS-4EDA3F89: Hokutoboken
|
||||
SMS-C4FBEEBB: Home Alone
|
||||
SMS-F4ABE06D: Hook
|
||||
SMS-4571E6C3: Impossible Mission
|
||||
SMS-956D46B0: Incredible Hulk
|
||||
SMS-E4ED7339: Indiana Jones
|
||||
SMS-8725269C: James Bond the Duel
|
||||
SMS-F403A94C: James Pond 2
|
||||
SMS-2CAC0668: Joe Montana Football
|
||||
SMS-9CA33633: Jungle Book
|
||||
SMS-7B552650: Jurassic Park
|
||||
SMS-28F350C4: Kenseiden
|
||||
SMS-6F729C16: Kenseiden
|
||||
SMS-E6B61F94: Kings Quest
|
||||
SMS-996FA827: Krustys Fun House
|
||||
SMS-B298ACCC: Kungfu Kid
|
||||
SMS-5D8067B9: Kungfu Kid
|
||||
SMS-361CDAE9: Laser Ghost
|
||||
SMS-0455F44B: Leader Board
|
||||
SMS-7611A307: Lemmings
|
||||
SMS-17CEFA6D: Lemmings
|
||||
SMS-A9BC5E7C: Lillehammer '94
|
||||
SMS-F398CA95: Line of Fire
|
||||
SMS-664DC276: Lord of Sword
|
||||
SMS-32A0DA0D: Lord of Sword
|
||||
SMS-2269847F: Lucky Dime
|
||||
SMS-C6653417: Machine Gun Joe
|
||||
SMS-2F3440F1: Marble Madness
|
||||
SMS-BDCC64F8: Master of Darkness
|
||||
SMS-E100A494: Masters of Combat
|
||||
SMS-08DF3C7B: Maze Hunter 3D
|
||||
SMS-A6C5B0F2: Maze Walker 3D
|
||||
SMS-39BA2AED: Mean Bean Machine
|
||||
SMS-C5412E49: Megumi Rescue
|
||||
SMS-B71AFB92: Mercs
|
||||
SMS-3752D965: Mick and Mack
|
||||
SMS-4946A6F3: Mickey Castle of Illusion
|
||||
SMS-83764742: Mickey Castle of Illusion
|
||||
SMS-6ED20CE8: Mickey Legend of Illusion
|
||||
SMS-BF3A92C5: Mickey Magical Kingdom
|
||||
SMS-F615C8DD: Miracle Warriors
|
||||
SMS-FFB4D45F: Missile Defense 3D
|
||||
SMS-031D490A: Monopoly
|
||||
SMS-56C8BB97: Monopoly
|
||||
SMS-E06EEF3E: Montezuma's Revenge
|
||||
SMS-55704D2B: Moon Walker
|
||||
SMS-702BDB3F: Mortal Kombat
|
||||
SMS-ABE82847: Mortal Kombat 2
|
||||
SMS-4CFC5067: Mortal Kombat 3
|
||||
SMS-C81D8C9B: Ms Pacman
|
||||
SMS-EDC031E3: My Hero
|
||||
SMS-DD6F9AAC: My Hero
|
||||
SMS-8EFBB405: Nekyuu Kousien
|
||||
SMS-C83D1D88: New Zealand Story
|
||||
SMS-3F3FBE04: Ninja
|
||||
SMS-C8B2A530: Ninja Gaiden
|
||||
SMS-C8B2A530: Ninja Gaiden
|
||||
SMS-FF6A5ED6: Operation Wolf
|
||||
SMS-D6600138: Ottifants
|
||||
SMS-B71FECA2: Outrun
|
||||
SMS-7874A1C2: Outrun 3D
|
||||
SMS-72000C56: Outrun Europa
|
||||
SMS-91DD2839: Pacmania
|
||||
SMS-3B6FDDE6: Paperboy
|
||||
SMS-24C15B82: Parlour Games
|
||||
SMS-24C15B82: Party Games
|
||||
SMS-43A392C0: Penguin Land
|
||||
SMS-BE1FC612: Penguin Land
|
||||
SMS-3BDDFA3A: Phantasy Star
|
||||
SMS-5A96953C: Phantasy Star
|
||||
SMS-3BDDFA3A: Phantasy Star
|
||||
SMS-F6FDB60F: Pit Pot and Astro Warrior
|
||||
SMS-BA5D6A25: Pit Pot
|
||||
SMS-6DA3D782: Populous
|
||||
SMS-8313AABE: Poseidon Wars 3D
|
||||
SMS-4B2E4114: Predator 2
|
||||
SMS-88C649F6: Prince of Persia
|
||||
SMS-79A0DD9C: Pro Wrestling
|
||||
SMS-E250B101: Psychic World
|
||||
SMS-A0B2B541: Psycho Fox
|
||||
SMS-29518ED3: Put and Putter
|
||||
SMS-597F4310: Put and Putter
|
||||
SMS-E316E2D2: Quartet
|
||||
SMS-B09882AD: RC Grand Prix
|
||||
SMS-226E05B2: RC Grand Prix
|
||||
SMS-47746E5B: RType
|
||||
SMS-C7ECCB75: Rainbow Islands
|
||||
SMS-0CDFDB02: Rambo
|
||||
SMS-4FDBC406: Rambo 3
|
||||
SMS-14420564: Rampage
|
||||
SMS-381AEF60: Rampart
|
||||
SMS-FF13B093: Rastan
|
||||
SMS-0DD199EC: Reggie Jackson Baseball
|
||||
SMS-55ACF04D: Ren and Stimpy
|
||||
SMS-63CE06D7: Renegade
|
||||
SMS-77A9CA80: Rescue Mission
|
||||
SMS-6E8C96C2: Road Rash
|
||||
SMS-7A298AD3: Robocop 3
|
||||
SMS-B9F2FAE2: Robocop vs Terminator
|
||||
SMS-E193C554: Rocky
|
||||
SMS-840F3F43: Running Battle
|
||||
SMS-ED6EA166: Rygar
|
||||
SMS-FDCDD2A8: Rygar
|
||||
SMS-C4C4CBF3: SDI
|
||||
SMS-C8EC02CD: SOS Lagoa Poluida
|
||||
SMS-9F08AFE7: Sagaia
|
||||
SMS-5A9CD0BC: Sapo Xule O Mestre Do Kung Fu
|
||||
SMS-A0B2B541: Sapo Xule Os Invasores Do Brejo
|
||||
SMS-DCDFF7FC: Satellite 7
|
||||
SMS-61BF0CE8: Scramble Spirits
|
||||
SMS-C4E804EA: Secret Commando
|
||||
SMS-1CF80D81: Sega Chess
|
||||
SMS-D84B8E35: Sengoku Jidai
|
||||
SMS-CC0E834B: Sensible Soccer
|
||||
SMS-92158110: Shadow Dancer
|
||||
SMS-CEC60800: Shadow of the Beast
|
||||
SMS-2EFBA21E: Shanghai
|
||||
SMS-294F665B: Sherlock Holmes
|
||||
SMS-31E9AA08: Shinobi
|
||||
SMS-08988F8D: Shooting Gallery
|
||||
SMS-7B25AF6C: Simpsons: Bart vs Mutants
|
||||
SMS-3A184EE3: Simpsons: Bart vs World
|
||||
SMS-E12945D1: Sitio Do Picapau Amarelo
|
||||
SMS-CD49F209: Slap Shot
|
||||
SMS-1FEC3A32: Smash TV
|
||||
SMS-1157557C: Smurfs
|
||||
SMS-D31A01DD: Smurfs 2
|
||||
SMS-D47A6061: Solomon Key
|
||||
SMS-ABA7D590: Sonic Blast
|
||||
SMS-9A4C2C17: Sonic Chaos
|
||||
SMS-3C24A124: Sonic Hedgehog
|
||||
SMS-59631B6B: Sonic Hedgehog 2
|
||||
SMS-C5249C58: Sonic Spinball
|
||||
SMS-F2282126: Space Harrier
|
||||
SMS-BF3AF302: Space Harrier 3D
|
||||
SMS-F4FE3FDF: Space Harrier
|
||||
SMS-BE94015C: Special Criminal Investigation
|
||||
SMS-06D76A6D: Speed Ball
|
||||
SMS-380E2509: Speed Ball 2
|
||||
SMS-C7ADE045: Spellcaster
|
||||
SMS-864CD012: Spellcaster
|
||||
SMS-FFD17781: Spiderman
|
||||
SMS-6ABF8373: Spiderman vs Kingpin
|
||||
SMS-A5981D01: Sports Pad Soccer
|
||||
SMS-1E244102: Spy vs Spy
|
||||
SMS-22373C00: Spy vs Spy
|
||||
SMS-2555BD8F: Star Wars
|
||||
SMS-0B5DBCD8: Story of Mio
|
||||
SMS-C4A8DFD2: Street Fighter 2
|
||||
SMS-DB14819A: Streets of Rage
|
||||
SMS-5583E316: Streets of Rage 2
|
||||
SMS-2EF1811A: Strider
|
||||
SMS-4271C0EA: Strider 2
|
||||
SMS-B200F770: Submarine Attack
|
||||
SMS-E614F356: Sukeban Deka 2
|
||||
SMS-DDE22B56: Summer Games
|
||||
SMS-C1994DC5: Super Kick Off
|
||||
SMS-5BB43B8B: Super Kick Off
|
||||
SMS-A84F6622: Super Monaco GP
|
||||
SMS-AA343BA1: Super Monaco GP 2
|
||||
SMS-4731942C: Super Off Road
|
||||
SMS-755AFD1F: Super Racing
|
||||
SMS-72A44AD8: Super Space Invaders
|
||||
SMS-0BEBAB91: Super Tennis
|
||||
SMS-A6F4F61B: Super Tetris
|
||||
SMS-905C2069: Super Wrestlemania
|
||||
SMS-FD847F03: Superman
|
||||
SMS-C8CAF262: T2 Arcade Game
|
||||
SMS-EC7389DD: Tazmania
|
||||
SMS-BED01ABD: Tazmania
|
||||
SMS-715D5443: Tecmo World Cup '93
|
||||
SMS-8D00AD02: Teddy Boy
|
||||
SMS-0E58FCCA: Teddy Boy Blues
|
||||
SMS-856A134B: Tennis Ace
|
||||
SMS-0E3E75BF: Tensai Bakabon
|
||||
SMS-F4C6D0FD: Terminator
|
||||
SMS-13FE9578: Terminator 2
|
||||
SMS-2B8C3140: Thunder Blade
|
||||
SMS-C8517CF5: Thunder Blade
|
||||
SMS-D3CBE09C: Time Soldiers
|
||||
SMS-460BE806: Tom and Jerry
|
||||
SMS-C9B8DFDB: Tom and Jerry
|
||||
SMS-14424F3F: Transbot
|
||||
SMS-65087064: Trap Marksman Safari Shooting
|
||||
SMS-73F8AF8B: Tri Formation
|
||||
SMS-F64C5B76: Trivial Pursuit
|
||||
SMS-E9A4DA39: Turma Da Monica 2
|
||||
SMS-F126CFE9: Turma Da Monica
|
||||
SMS-E79A79B0: Ultima 4 (1989)
|
||||
SMS-8FB08EE4: Ultima 4 (1990)
|
||||
SMS-1FC91F99: Ultimate Soccer
|
||||
SMS-F618C7B7: Vampire
|
||||
SMS-BF53E90C: Vigilante
|
||||
SMS-C7851C8D: Virtua Fighter Animation
|
||||
SMS-AF213933: Wimbledon
|
||||
SMS-4DBDEFD8: Wolf Child
|
||||
SMS-2451C59F: Wonder Boy
|
||||
SMS-E9A4DA39: Wonder Boy 3
|
||||
SMS-F126CFE9: Wonder Boy in Monster Land
|
||||
SMS-5F2F6888: Wonder Boy in Monster World (Beta)
|
||||
SMS-537D07C0: Wonder Boy in Monster World
|
||||
SMS-564D1817: Woody Pop
|
||||
SMS-62C95070: World Cup '90
|
||||
SMS-9FD1A204: World Cup '92
|
||||
SMS-23E2D5C3: World Cup '94
|
||||
SMS-6D527091: World GP
|
||||
SMS-790638F3: World GP
|
||||
SMS-64FE313E: World Games
|
||||
SMS-C7CF22E2: World Soccer
|
||||
SMS-8219CB62: XMen in Mojo World
|
||||
SMS-67ABEEB1: Xenon 2
|
||||
SMS-B8ED368E: Ys
|
||||
SMS-CF9FAE2A: Zaxxon 3D
|
||||
SMS-E4DFBC4B: Zillion
|
||||
SMS-3A92402B: Zillion
|
||||
SMS-69F05047: Zool
|
||||
Binary file not shown.
Reference in new issue
Block a user