www.pudn.com > GPUVision_5-13-05-2.zip > ConvolutionFilter2Pack5x5.cg
void main(float2 iCoords : TEX0,
uniform samplerRECT texture,
const uniform float kernel[25],
out float4 oColor : COLOR) {
oColor = 0;
float4 m = f4texRECT(texture, iCoords);
float4 u = f4texRECT(texture, iCoords+float2(0 ,-1));
float4 l = f4texRECT(texture, iCoords+float2(-1,0));
float4 r = f4texRECT(texture, iCoords+float2(1 ,0));
float4 d = f4texRECT(texture, iCoords+float2(0 ,1));
float4 ul = f4texRECT(texture, iCoords+float2(-1,-1));
float4 ur = f4texRECT(texture, iCoords+float2(1, -1));
float4 dl = f4texRECT(texture, iCoords+float2(-1,1));
float4 dr = f4texRECT(texture, iCoords+float2(1 ,1));
float4 uul = f4texRECT(texture, iCoords+float2(-1,-2));
float4 uu = f4texRECT(texture, iCoords+float2(0, -2));
float4 uur = f4texRECT(texture, iCoords+float2(1, -2));
float4 ddl = f4texRECT(texture, iCoords+float2(-1, 2));
float4 dd = f4texRECT(texture, iCoords+float2(0, 2));
float4 ddr = f4texRECT(texture, iCoords+float2(1, 2));
int i = 0;
float2 xy = uul.xy*kernel[i++] + uul.zw*kernel[i++] + uu.xy*kernel[i++] + uu.zw*kernel[i++] + uur.xy*kernel[i++] +
ul.xy*kernel[i++] + ul.zw*kernel[i++] + u.xy*kernel[i++] + u.zw*kernel[i++] + ur.xy*kernel[i++] +
l.xy*kernel[i++] + l.zw*kernel[i++] + m.xy*kernel[i++] + m.zw*kernel[i++] + r.xy*kernel[i++] +
dl.xy*kernel[i++] + dl.zw*kernel[i++] + d.xy*kernel[i++] + d.zw*kernel[i++] + dr.xy*kernel[i++] +
ddl.xy*kernel[i++] + ddl.zw*kernel[i++] + dd.xy*kernel[i++] + dd.zw*kernel[i++] + ddr.xy*kernel[i++] ;
i = 0;
float2 zw = uul.zw*kernel[i++] + uu.xy*kernel[i++] + uu.zw*kernel[i++] + uur.xy*kernel[i++] + uur.zw*kernel[i++] +
ul.zw*kernel[i++] + u.xy*kernel[i++] + u.zw*kernel[i++] + ur.xy*kernel[i++] + ur.zw*kernel[i++] +
l.zw*kernel[i++] + m.xy*kernel[i++] + m.zw*kernel[i++] + r.xy*kernel[i++] + r.zw*kernel[i++] +
dl.zw*kernel[i++] + d.xy*kernel[i++] + d.zw*kernel[i++] + dr.xy*kernel[i++] + dr.zw*kernel[i++] +
ddl.zw*kernel[i++] + dd.xy*kernel[i++] + dd.zw*kernel[i++] + ddr.xy*kernel[i++] + ddr.zw*kernel[i++];
oColor = float4(xy,zw);
}