sampler indirectTexture: register(s0); sampler sourceTexture: register(s1); uniform float epsilonX; uniform float epsilonY; uniform float sourceTextureSize; uniform float numSamples; uniform float sqrtNumSamples; uniform float3 ambientColor; uniform float ambient; float4 main_fp(float2 texCoord: TEXCOORD0, float2 subTexCoord: TEXCOORD1, float diffuseIn : TEXCOORD2) : COLOR { float4 ocolor = float4(0.0, 0.0, 0.0, 0.0); float2 epsilon = float2(epsilonX, epsilonY); float4 value = tex2D(indirectTexture, subTexCoord).xyzw; float2 coords = float2(0.0, 1.0) - abs(texCoord - ( value.xy - epsilon ) ); if (value.w != 0.0) { float2 newcoord = (float2(1.0, 1.0) - value.zw) + ((coords * sourceTextureSize) / sqrtNumSamples); ocolor = float4(tex2D(sourceTexture, newcoord).xyzw); ocolor.xyz = (ambientColor * ambient) + (ocolor.xyz * diffuseIn); } return ocolor; }