uniform sampler2D m_Texture;
uniform sampler2D m_DepthTexture;
uniform int m_NbSamples;
uniform float m_BlurStart;
uniform float m_BlurWidth;
uniform float m_LightDensity;
uniform bool m_Display;

varying vec2 lightPos;
varying vec2 texCoord;

void main(void)
{
   if(m_Display){

       vec4 colorRes= texture2D(m_Texture,texCoord);
       float factor=(m_BlurWidth/float(m_NbSamples-1.0));
       float scale;
       vec2 texCoo=texCoord-lightPos;
       vec2 scaledCoord;
       vec4 res = vec4(0.0);
       for(int i=0; i<m_NbSamples; i++) {
            scale = i * factor + m_BlurStart ;
            scaledCoord=texCoo*scale+lightPos;
            if(texture2D(m_DepthTexture,scaledCoord).r==1.0){
                res += texture2D(m_Texture,scaledCoord);
            }
        }
        res /= m_NbSamples;

        //Blend the original color with the averaged pixels
        gl_FragColor =mix( colorRes, res, m_LightDensity);
    }else{
        gl_FragColor= texture2D(m_Texture,texCoord);
    }
}