/* ############################################################################################ GS4XFilter shader - Copyright (C) 2005 guest(r) - guest.r@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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA. ############################################################################################*/ // NOTES: Set scaler to normal4x (forced mode for hi-res) #include "shader.code" float scaling : SCALING = 1.0; const float mx = 1.00; // start smoothing wt. const float k = -1.10; // wt. decrease factor const float max_w = 0.90; // max filter weigth const float min_w = 0.05; // min filter weigth const float lum_add = 0.33; // effects smoothing string preprocessTechique : PREPROCESSTECHNIQUE = "GS4xFilter"; string combineTechique : COMBINETECHNIQUE = "linear"; VERTEX_STUFF4 PASS1_VERTEX (float3 p : POSITION, float2 tc : TEXCOORD0) { VERTEX_STUFF4 OUT = (VERTEX_STUFF4)0; float dx = ps.x*2.0; float dy = ps.y*2.0; float sx = ps.x; float sy = ps.y; OUT.coord = mul(float4(p,1),WorldViewProjection); OUT.CT = tc; OUT.t1 = float4(tc,tc) + float4(-dx,-dy, dx,-dy); // outer diag. texels OUT.t2 = float4(tc,tc) + float4( dx, dy,-dx, dy); OUT.t3 = float4(tc,tc) + float4(-sx,-sy, sx,-sy); // inner diag. texels OUT.t4 = float4(tc,tc) + float4( sx, sy,-sx, sy); OUT.t5 = float4(tc,tc) + float4(-dx, 0, dx, 0); // inner hor/vert texels OUT.t6 = float4(tc,tc) + float4( 0,-dy, 0, dy); return OUT; } float4 PASS1_FRAGMENT ( in VERTEX_STUFF4 VAR ) : COLOR { half3 c = tex2D(s_p, VAR.CT ).xyz; half3 o1 = tex2D(s_p, VAR.t1.xy).xyz; half3 o2 = tex2D(s_p, VAR.t1.zw).xyz; half3 o3 = tex2D(s_p, VAR.t2.xy).xyz; half3 o4 = tex2D(s_p, VAR.t2.zw).xyz; half3 i1 = tex2D(s_p, VAR.t3.xy).xyz; half3 i2 = tex2D(s_p, VAR.t3.zw).xyz; half3 i3 = tex2D(s_p, VAR.t4.xy).xyz; half3 i4 = tex2D(s_p, VAR.t4.zw).xyz; half3 s1 = tex2D(s_p, VAR.t5.xy).xyz; half3 s2 = tex2D(s_p, VAR.t5.zw).xyz; half3 s3 = tex2D(s_p, VAR.t6.xy).xyz; half3 s4 = tex2D(s_p, VAR.t6.zw).xyz; half ko1=dot(abs(o1-c),dt); half ko2=dot(abs(o2-c),dt); half ko3=dot(abs(o3-c),dt); half ko4=dot(abs(o4-c),dt); half4 w; w.yw = min(dot(abs(i1-i3),dt),0.6*(ko1+ko3)); w.xz = min(dot(abs(i2-i4),dt),0.6*(ko2+ko4)); if (ko3