uniform sampler2D texture0;
uniform sampler2D texture1;
 
varying highp vec3 posVarying;
varying mediump vec3 normalVarying;
// varying mediump vec4 colorVarying;
varying mediump vec2 uvVarying;
varying mediump vec3 lightVarying;
varying mediump vec4 ShadowCoord;

// uniform vec4 agk_ObjColor;
 
mediump vec3 GetPSLighting( mediump vec3 normal, highp vec3 pos );
mediump vec3 ApplyFog( mediump vec3 color, highp vec3 pointPos );

// vec2 poissonDisk[16] = vec2[]( 
   // vec2( -0.94201624, -0.39906216 ), 
   // vec2( 0.94558609, -0.76890725 ), 
   // vec2( -0.094184101, -0.92938870 ), 
   // vec2( 0.34495938, 0.29387760 ), 
   // vec2( -0.91588581, 0.45771432 ), 
   // vec2( -0.81544232, -0.87912464 ), 
   // vec2( -0.38277543, 0.27676845 ), 
   // vec2( 0.97484398, 0.75648379 ), 
   // vec2( 0.44323325, -0.97511554 ), 
   // vec2( 0.53742981, -0.47373420 ), 
   // vec2( -0.26496911, -0.41893023 ), 
   // vec2( 0.79197514, 0.19090188 ), 
   // vec2( -0.24188840, 0.99706507 ), 
   // vec2( -0.81409955, 0.91437590 ), 
   // vec2( 0.19984126, 0.78641367 ), 
   // vec2( 0.14383161, -0.14100790 ) 
// );
 
// float random(vec3 seed, int i){
    // vec4 seed4 = vec4(seed,i);
    // float dot_product = dot(seed4, vec4(12.9898,78.233,45.164,94.673));
    // return fract(sin(dot_product) * 43758.5453);
// }

void main()
{ 
    mediump vec3 norm = normalize(normalVarying);
    mediump vec3 light = lightVarying + GetPSLighting( norm, posVarying ); 
    
    // mediump vec3 color = texture2D(texture0, uvVarying).rgb * colorVarying.rgb * light;
	mediump vec3 color = light;
    color = ApplyFog( color, posVarying );
	
	vec4 shadowCoordinateWdivide = ShadowCoord / ShadowCoord.w;
	shadowCoordinateWdivide.z += 0.00005;
	// float depth = 0.0;
    // float shadow = 1.5;
    // int samples = 16;
    // if (ShadowCoord.w > 0.0)
    // {
		// for (int i=0;i<samples;i++)
		// {
            // depth = texture2D(texture1,shadowCoordinateWdivide.xy + poissonDisk[i]/700.0 ).z;
            // if (depth <= shadowCoordinateWdivide.z)
            // {
                // shadow -= 0.1 * 8.0 / samples;
            // }
        // }
	// }
	float shadow = 1.0;
	float depth = texture2D(texture1,shadowCoordinateWdivide.xy).z;
	if (ShadowCoord.w > 0.0)
	{
		if (depth <= shadowCoordinateWdivide.z)
		{
			shadow = 0.5;
		}
	}
	gl_FragColor = shadow * vec4(color,1.0);
}
