varying vec2 TexCoord;

uniform sampler2D InputTexture;
uniform sampler2D DitherTexture;

vec4 ApplyGamma(vec4 c)
{
	vec3 valgray;

	valgray = mix(vec3(dot(c.rgb, vec3(0.3,0.56,0.14))), c.rgb, Saturation);

	vec3 val = valgray * Contrast - (Contrast - 1.0) * 0.5;
	val += Brightness * 0.5;
	val = pow(max(val, vec3(0.0)), vec3(InvGamma));
	return vec4(val, c.a);
}

//vec4 Dither(vec4 c)
//{
//	if (ColorScale == 0.0)
//		return c;
//	vec2 texSize = vec2(textureSize(DitherTexture, 0));
//	float threshold = texture2D(DitherTexture, gl_FragCoord.xy / texSize).r;
//	return vec4(floor(c.rgb * ColorScale + threshold) / ColorScale, c.a);
//}


void main()
{
	gl_FragColor =  ApplyGamma(texture2D(InputTexture, UVOffset + TexCoord * UVScale));
}