uniform sampler2D indirectTexture; uniform sampler2D sourceTexture; uniform float epsilonX; uniform float epsilonY; uniform float sourceTextureSize; uniform float numSamples; uniform float sqrtNumSamples; void main(void) { vec4 ocolor = vec4(0.0, 0.0, 0.0, 0.0); vec2 epsilon = vec2(epsilonX, epsilonY); vec2 texCoord = gl_TexCoord[0].xy; vec2 subTexCoord = gl_TexCoord[1].xy; vec4 value = texture2D(indirectTexture, subTexCoord).xyzw; vec2 coords = vec2(0.0, 1.0) - abs(texCoord - ( value.xy - epsilon ) ); if (value.z != 0.0) { vec2 newcoord = (vec2(1.0, 1.0) - value.zw) + ((coords * sourceTextureSize) / sqrtNumSamples); ocolor = vec4(texture2D(sourceTexture, newcoord).xyzw); } gl_FragColor = ocolor; }