From 582a3ae58a3ced70d4e1cfc6a93ea9f11185bc95 Mon Sep 17 00:00:00 2001 From: zeromus Date: Mon, 3 Feb 2014 06:34:55 +0000 Subject: [PATCH] forgot to add --- .../DisplayManager/Filters/hq2x.cg | 99 ++++++ .../DisplayManager/Filters/hq2x.glsl | 299 ++++++++++++++++++ 2 files changed, 398 insertions(+) create mode 100644 BizHawk.Client.EmuHawk/DisplayManager/Filters/hq2x.cg create mode 100644 BizHawk.Client.EmuHawk/DisplayManager/Filters/hq2x.glsl diff --git a/BizHawk.Client.EmuHawk/DisplayManager/Filters/hq2x.cg b/BizHawk.Client.EmuHawk/DisplayManager/Filters/hq2x.cg new file mode 100644 index 0000000000..a94176ca2f --- /dev/null +++ b/BizHawk.Client.EmuHawk/DisplayManager/Filters/hq2x.cg @@ -0,0 +1,99 @@ +struct tex_coords +{ + float2 c00; + float2 c01; + float2 c02; + float2 c10; + float2 c11; + float2 c12; + float2 c20; + float2 c21; + float2 c22; +}; + +struct input +{ + float2 video_size; + float2 texture_size; + float2 output_size; +}; + +void main_vertex +( + float4 position : POSITION, + out float4 oPosition : POSITION, + uniform float4x4 modelViewProj, + + float4 color : COLOR, + out float4 oColor : COLOR, + + float2 tex : TEXCOORD, + + uniform input IN, + out tex_coords coords +) +{ + oPosition = mul(modelViewProj, position); + oColor = color; + + float2 texsize = IN.texture_size; + float2 delta = 0.5 / texsize; + float dx = delta.x; + float dy = delta.y; + + coords = tex_coords ( + tex + float2(-dx, -dy), + tex + float2(-dx, 0), + tex + float2(-dx, dy), + tex + float2(0, -dy), + tex + float2(0, 0), + tex + float2(0, dy), + tex + float2(dx, -dy), + tex + float2(dx, 0), + tex + float2(dx, dy) + ); +} + +const float mx = 0.325; // start smoothing wt. +const float k = -0.250; // wt. decrease factor +const float max_w = 0.25; // max filter weigth +const float min_w = -0.05; // min filter weigth +const float lum_add = 0.25; // effects smoothing + +float4 main_fragment (in tex_coords co, uniform sampler2D s0 : TEXUNIT0) : COLOR +{ + float3 c00 = tex2D(s0, co.c00).xyz; + float3 c01 = tex2D(s0, co.c01).xyz; + float3 c02 = tex2D(s0, co.c02).xyz; + float3 c10 = tex2D(s0, co.c10).xyz; + float3 c11 = tex2D(s0, co.c11).xyz; + float3 c12 = tex2D(s0, co.c12).xyz; + float3 c20 = tex2D(s0, co.c20).xyz; + float3 c21 = tex2D(s0, co.c21).xyz; + float3 c22 = tex2D(s0, co.c22).xyz; + float3 dt = float3(1.0); + + float md1 = dot(abs(c00 - c22), dt); + float md2 = dot(abs(c02 - c20), dt); + + float w1 = dot(abs(c22 - c11), dt) * md2; + float w2 = dot(abs(c02 - c11), dt) * md1; + float w3 = dot(abs(c00 - c11), dt) * md2; + float w4 = dot(abs(c20 - c11), dt) * md1; + + float t1 = w1 + w3; + float t2 = w2 + w4; + float ww = max(t1, t2) + 0.0001; + + c11 = (w1 * c00 + w2 * c20 + w3 * c22 + w4 * c02 + ww * c11) / (t1 + t2 + ww); + + float lc1 = k / (0.12 * dot(c10 + c12 + c11, dt) + lum_add); + float lc2 = k / (0.12 * dot(c01 + c21 + c11, dt) + lum_add); + + w1 = clamp(lc1 * dot(abs(c11 - c10), dt) + mx, min_w, max_w); + w2 = clamp(lc2 * dot(abs(c11 - c21), dt) + mx, min_w, max_w); + w3 = clamp(lc1 * dot(abs(c11 - c12), dt) + mx, min_w, max_w); + w4 = clamp(lc2 * dot(abs(c11 - c01), dt) + mx, min_w, max_w); + + return float4(w1 * c10 + w2 * c21 + w3 * c12 + w4 * c01 + (1.0 - w1 - w2 - w3 - w4) * c11, 1.0); +} diff --git a/BizHawk.Client.EmuHawk/DisplayManager/Filters/hq2x.glsl b/BizHawk.Client.EmuHawk/DisplayManager/Filters/hq2x.glsl new file mode 100644 index 0000000000..6ad1155c35 --- /dev/null +++ b/BizHawk.Client.EmuHawk/DisplayManager/Filters/hq2x.glsl @@ -0,0 +1,299 @@ +// GLSL shader autogenerated by cg2glsl.py. +#if defined(VERTEX) + +#if __VERSION__ >= 130 +#define COMPAT_VARYING out +#define COMPAT_ATTRIBUTE in +#define COMPAT_TEXTURE texture +#else +#define COMPAT_VARYING varying +#define COMPAT_ATTRIBUTE attribute +#define COMPAT_TEXTURE texture2D +#endif + +#ifdef GL_ES +#define COMPAT_PRECISION mediump +#else +#define COMPAT_PRECISION +#endif +COMPAT_VARYING vec2 VARc22; +COMPAT_VARYING vec2 VARc21; +COMPAT_VARYING vec2 VARc20; +COMPAT_VARYING vec2 VARc12; +COMPAT_VARYING vec2 VARc11; +COMPAT_VARYING vec2 VARc10; +COMPAT_VARYING vec2 VARc02; +COMPAT_VARYING vec2 VARc01; +COMPAT_VARYING vec2 VARc00; + + +struct tex_coords { + vec2 VARc00; + vec2 VARc01; + vec2 VARc02; + vec2 VARc10; + vec2 VARc11; + vec2 VARc12; + vec2 VARc20; + vec2 VARc21; + vec2 VARc22; +}; + +struct input_dummy { + vec2 _video_size; + vec2 _texture_size; + vec2 _output_dummy_size; +}; + +vec4 _oPosition1; +tex_coords _coords1; + +input_dummy _IN1; +vec4 _r0012; +COMPAT_ATTRIBUTE vec4 VertexCoord; +COMPAT_ATTRIBUTE vec4 COLOR; +COMPAT_VARYING vec4 COL0; +COMPAT_ATTRIBUTE vec4 TexCoord; + + +uniform mat4 MVPMatrix; +uniform int FrameDirection; +uniform int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; +void main() +{ + + vec4 _oColor; + vec2 _delta; + tex_coords _TMP8; + + _r0012 = VertexCoord.x*MVPMatrix[0]; + _r0012 = _r0012 + VertexCoord.y*MVPMatrix[1]; + _r0012 = _r0012 + VertexCoord.z*MVPMatrix[2]; + _r0012 = _r0012 + VertexCoord.w*MVPMatrix[3]; + _oPosition1 = _r0012; + _oColor = COLOR; + _delta = 5.00000000E-001/TextureSize; + _TMP8.VARc00 = TexCoord.xy + vec2(-_delta.x, -_delta.y); + _TMP8.VARc01 = TexCoord.xy + vec2(-_delta.x, 0.00000000E+000); + _TMP8.VARc02 = TexCoord.xy + vec2(-_delta.x, _delta.y); + _TMP8.VARc10 = TexCoord.xy + vec2(0.00000000E+000, -_delta.y); + _TMP8.VARc12 = TexCoord.xy + vec2(0.00000000E+000, _delta.y); + _TMP8.VARc20 = TexCoord.xy + vec2(_delta.x, -_delta.y); + _TMP8.VARc21 = TexCoord.xy + vec2(_delta.x, 0.00000000E+000); + _TMP8.VARc22 = TexCoord.xy + vec2(_delta.x, _delta.y); + VARc00 = _TMP8.VARc00; + VARc01 = _TMP8.VARc01; + VARc02 = _TMP8.VARc02; + VARc10 = _TMP8.VARc10; + VARc11 = TexCoord.xy; + VARc12 = _TMP8.VARc12; + VARc20 = _TMP8.VARc20; + VARc21 = _TMP8.VARc21; + VARc22 = _TMP8.VARc22; + gl_Position = _r0012; + COL0 = COLOR; +} +#elif defined(FRAGMENT) + +#if __VERSION__ >= 130 +#define COMPAT_VARYING in +#define COMPAT_TEXTURE texture +out vec4 FragColor; +#else +#define COMPAT_VARYING varying +#define FragColor gl_FragColor +#define COMPAT_TEXTURE texture2D +#endif + +#ifdef GL_ES +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif +#define COMPAT_PRECISION mediump +#else +#define COMPAT_PRECISION +#endif +COMPAT_VARYING vec2 VARc22; +COMPAT_VARYING vec2 VARc21; +COMPAT_VARYING vec2 VARc20; +COMPAT_VARYING vec2 VARc12; +COMPAT_VARYING vec2 VARc11; +COMPAT_VARYING vec2 VARc10; +COMPAT_VARYING vec2 VARc02; +COMPAT_VARYING vec2 VARc01; +COMPAT_VARYING vec2 VARc00; + + +struct tex_coords { + vec2 VARc00; + vec2 VARc01; + vec2 VARc02; + vec2 VARc10; + vec2 VARc11; + vec2 VARc12; + vec2 VARc20; + vec2 VARc21; + vec2 VARc22; +}; + +struct input_dummy { + vec2 _video_size; + vec2 _texture_size; + vec2 _output_dummy_size; +}; + +vec4 _ret_0; +float _TMP29; +float _TMP30; +vec3 _TMP28; +float _TMP27; +vec3 _TMP26; +float _TMP25; +vec3 _TMP24; +float _TMP23; +vec3 _TMP22; +float _TMP21; +float _TMP20; +float _TMP19; +float _TMP18; +vec3 _TMP17; +float _TMP16; +vec3 _TMP15; +float _TMP14; +vec3 _TMP13; +float _TMP12; +vec3 _TMP11; +vec3 _TMP10; +vec3 _TMP9; +vec4 _TMP8; +vec4 _TMP7; +vec4 _TMP6; +vec4 _TMP5; +vec4 _TMP4; +vec4 _TMP3; +vec4 _TMP2; +vec4 _TMP1; +vec4 _TMP0; +tex_coords _co1; +uniform sampler2D Texture; +vec3 _a0058; +vec3 _a0062; +vec3 _a0066; +vec3 _a0070; +vec3 _a0074; +vec3 _a0078; +vec3 _a0084; +vec3 _a0086; +vec3 _a0088; +float _TMP91; +float _x0092; +vec3 _a0098; +float _TMP101; +float _x0102; +vec3 _a0108; +float _TMP111; +float _x0112; +vec3 _a0118; +float _TMP121; +float _x0122; + + +uniform int FrameDirection; +uniform int FrameCount; +uniform COMPAT_PRECISION vec2 OutputSize; +uniform COMPAT_PRECISION vec2 TextureSize; +uniform COMPAT_PRECISION vec2 InputSize; +void main() +{ + + vec3 _c11; + float _md1; + float _md2; + float _w1; + float _w2; + float _w3; + float _w4; + float _t1; + float _t2; + float _ww; + float _lc1; + float _lc2; + vec3 _TMP38; + + _TMP0 = COMPAT_TEXTURE(Texture, VARc00); + _TMP1 = COMPAT_TEXTURE(Texture, VARc01); + _TMP2 = COMPAT_TEXTURE(Texture, VARc02); + _TMP3 = COMPAT_TEXTURE(Texture, VARc10); + _TMP4 = COMPAT_TEXTURE(Texture, VARc11); + _TMP5 = COMPAT_TEXTURE(Texture, VARc12); + _TMP6 = COMPAT_TEXTURE(Texture, VARc20); + _TMP7 = COMPAT_TEXTURE(Texture, VARc21); + _TMP8 = COMPAT_TEXTURE(Texture, VARc22); + _a0058 = _TMP0.xyz - _TMP8.xyz; + _TMP9 = abs(_a0058); + _md1 = dot(_TMP9, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _a0062 = _TMP2.xyz - _TMP6.xyz; + _TMP10 = abs(_a0062); + _md2 = dot(_TMP10, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _a0066 = _TMP8.xyz - _TMP4.xyz; + _TMP11 = abs(_a0066); + _TMP12 = dot(_TMP11, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _w1 = _TMP12*_md2; + _a0070 = _TMP2.xyz - _TMP4.xyz; + _TMP13 = abs(_a0070); + _TMP14 = dot(_TMP13, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _w2 = _TMP14*_md1; + _a0074 = _TMP0.xyz - _TMP4.xyz; + _TMP15 = abs(_a0074); + _TMP16 = dot(_TMP15, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _w3 = _TMP16*_md2; + _a0078 = _TMP6.xyz - _TMP4.xyz; + _TMP17 = abs(_a0078); + _TMP18 = dot(_TMP17, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _w4 = _TMP18*_md1; + _t1 = _w1 + _w3; + _t2 = _w2 + _w4; + _TMP19 = max(_t1, _t2); + _ww = _TMP19 + 9.99999975E-005; + _c11 = (_w1*_TMP0.xyz + _w2*_TMP6.xyz + _w3*_TMP8.xyz + _w4*_TMP2.xyz + _ww*_TMP4.xyz)/(_t1 + _t2 + _ww); + _a0084 = _TMP3.xyz + _TMP5.xyz + _c11; + _TMP20 = dot(_a0084, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _lc1 = -2.50000000E-001/(1.19999997E-001*_TMP20 + 2.50000000E-001); + _a0086 = _TMP1.xyz + _TMP7.xyz + _c11; + _TMP21 = dot(_a0086, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _lc2 = -2.50000000E-001/(1.19999997E-001*_TMP21 + 2.50000000E-001); + _a0088 = _c11 - _TMP3.xyz; + _TMP22 = abs(_a0088); + _TMP23 = dot(_TMP22, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _x0092 = _lc1*_TMP23 + 3.24999988E-001; + _TMP30 = min(2.50000000E-001, _x0092); + _TMP91 = max(-5.00000007E-002, _TMP30); + _a0098 = _c11 - _TMP7.xyz; + _TMP24 = abs(_a0098); + _TMP25 = dot(_TMP24, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _x0102 = _lc2*_TMP25 + 3.24999988E-001; + _TMP30 = min(2.50000000E-001, _x0102); + _TMP101 = max(-5.00000007E-002, _TMP30); + _a0108 = _c11 - _TMP5.xyz; + _TMP26 = abs(_a0108); + _TMP27 = dot(_TMP26, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _x0112 = _lc1*_TMP27 + 3.24999988E-001; + _TMP30 = min(2.50000000E-001, _x0112); + _TMP111 = max(-5.00000007E-002, _TMP30); + _a0118 = _c11 - _TMP1.xyz; + _TMP28 = abs(_a0118); + _TMP29 = dot(_TMP28, vec3( 1.00000000E+000, 1.00000000E+000, 1.00000000E+000)); + _x0122 = _lc2*_TMP29 + 3.24999988E-001; + _TMP30 = min(2.50000000E-001, _x0122); + _TMP121 = max(-5.00000007E-002, _TMP30); + _TMP38 = _TMP91*_TMP3.xyz + _TMP101*_TMP7.xyz + _TMP111*_TMP5.xyz + _TMP121*_TMP1.xyz + ((((1.00000000E+000 - _TMP91) - _TMP101) - _TMP111) - _TMP121)*_c11; + _ret_0 = vec4(_TMP38.x, _TMP38.y, _TMP38.z, 1.00000000E+000); + FragColor = _ret_0; + return; +} +#endif