uniform float zNear;
uniform float zFar;

float zinv(float z)
{
	//return (zFar*zNear / (zFar - z*(zFar-zNear)) - zNear) / (zFar - zNear);
	//return zFar*zNear / (zFar - z*(zFar - zNear));
	//return (-(1.0/zNear - 1.0/z) / (1.0/zNear - 1.0/zFar) - zNear) / (zFar - zNear);
	//return 0.0; //(z - zNear)/(zFar - zNear);
	return 1.0-(zNear*zFar/(zFar - z*(zFar-zNear))-zNear)/(zFar-zNear);
}

void main(void)
{
	float z = gl_FragCoord.z;
	z = zinv(z);
	//z = clamp(z*2.0-0.5, 0.0, 1.0);
	z *= 0.25;
	gl_FragColor = vec4(z, z, z, 1);
	//gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

