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); 
}