// Based on:
// http://www.geeks3d.com/20091009/shader-library-night-vision-post-processing-filter-glsl/

precision mediump float;

varying vec2 vTexCoord;

uniform sampler2D u_texture;
uniform sampler2D u_texNoise;

uniform float luminanceThreshold;
uniform float colorAmplification;
uniform float noiseLevel;
uniform float sinTime;
uniform float cosTime;

void main ()
{
   vec2 uv;
   uv.x = clamp(abs((sinTime + vTexCoord.x) / 2.0), 0.0, 1.0);
   uv.y = clamp(abs((cosTime + vTexCoord.y) / 2.0), 0.0, 1.0);
   vec3 n = texture2D(u_texNoise, uv).rgb;
   vec3 c = texture2D(u_texture, vTexCoord.st).rgb;

   float lum = dot(vec3(0.299, 0.587, 0.114), c);
   if (lum < luminanceThreshold)
     c *= colorAmplification;

   vec3 visionColor = vec3(0.1, 0.95, 0.2);
   gl_FragColor.rgb = (c + (n * noiseLevel)) * visionColor;
   gl_FragColor.a = 1.0;
}			
