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[0].zw).rgb)*0.125+
     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[1].zw).rgb)*0.125+
     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[2].zw).rgb)*0.125+
     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 +
    (texture2D(OGL2Texture,gl_TexCoord[3].zw).rgb)*0.125)/6.5;

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);
}

