//patched by Danila Zabiaka - white black noise
#define white 200.0
#define black 20.0
#define noise 7.0
#define offset -25.0
#define satoffset 5.0 //5 as start point. sat=satoffset-5.0, 6 means 1.1
float pseudoNoise(vec2 co)
{
return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453)*fract(sin(dot(co.xy ,vec2(12.9898,78.233)*2.0)) * 43758.5453); //pseudo random number generator
}
vec3 czm_saturation(vec3 rgb, float adjustment)
{
// Algorithm from Chapter 16 of OpenGL Shading Language
const vec3 W = vec3(0.2125, 0.7154, 0.0721);
vec3 intensity = vec3(dot(rgb, W));
return mix(intensity, rgb, adjustment);
}
uniform sampler2D OGL2Texture;
const vec3 RGBtoY = vec3(0.299, 0.587, 0.114);
const vec3 RGBtoI = vec3(0.596,-0.275,-0.321);
const vec3 RGBtoQ = vec3(0.212,-0.523, 0.311);
const vec3 YIQtoR = vec3(1.0, 0.95568806036115671171, 0.61985809445637075388);
const vec3 YIQtoG = vec3(1.0,-0.27158179694405859326,-0.64687381613840131330);
const vec3 YIQtoB = vec3(1.0,-1.10817732668266195230, 1.70506455991918171490);
void main()
{
vec3 c0, c1;
c0 = (texture2D(OGL2Texture,gl_TexCoord[0].xy).rgb +
(texture2D(OGL2Texture,gl_TexCoord[0].zy).rgb) * 0.25 +
(texture2D(OGL2Texture,gl_TexCoord[0].xw).rgb) * 0.25 +
texture2D(OGL2Texture,gl_TexCoord[1].xy).rgb +
(texture2D(OGL2Texture,gl_TexCoord[1].zy).rgb) * 0.25 +
(texture2D(OGL2Texture,gl_TexCoord[1].xw).rgb) * 0.25 +
texture2D(OGL2Texture,gl_TexCoord[2].xy).rgb +
(texture2D(OGL2Texture,gl_TexCoord[2].zy).rgb) * 0.25 +
(texture2D(OGL2Texture,gl_TexCoord[2].xw).rgb) * 0.25 +
texture2D(OGL2Texture,gl_TexCoord[3].xy).rgb +
(texture2D(OGL2Texture,gl_TexCoord[3].zy).rgb) * 0.25 +
(texture2D(OGL2Texture,gl_TexCoord[3].xw).rgb) * 0.25 ) / 6.0;
c1 = vec3(pow(dot(c0, RGBtoY), 1.2), dot(c0, RGBtoI) * 1.2, dot(c0, RGBtoQ) * 1.2);
gl_FragColor = vec4(dot(c1, YIQtoR), dot(c1, YIQtoG), dot(c1, YIQtoB), 0.0);
gl_FragColor.xyz = czm_saturation(gl_FragColor.xyz, 1.0+(satoffset-5.0)/10.0);
gl_FragColor = gl_FragColor *white/255.0+black/255.0-gl_FragColor*black/255.0+(pseudoNoise(gl_TexCoord[1].xy)+offset/100.0)*noise/100.0;
}