uniform sampler2DRect sampler; // k2vuyPixelFormat vec4 rgb_to_2vuy( vec4 colour1, vec4 colour2) { vec4 yuvPixel; // BT.601 const vec4 y_values = vec4(0.256788, 0.504129, 0.097906, 0.0); const vec4 u_values = vec4(-0.148223, -0.290993, 0.439216, 0.0); const vec4 v_values = vec4(0.439216, -0.367789, -0.071427, 0.0); const vec4 norm_values = vec4(16.0/255.0, 128.0/255.0, 16.0/255.0, 128.0/255.0); // Cb, Y0, Cr, Y1. yuvPixel.r = dot(y_values, colour1); yuvPixel.g = (dot(v_values, colour1) + dot(v_values, colour2)) * 0.5; yuvPixel.b = dot(y_values, colour2); yuvPixel.a = (dot(u_values, colour1) + dot(u_values, colour2)) * 0.5; yuvPixel += norm_values; return yuvPixel; } void main() { vec4 yuvPixel = rgb_to_2vuy( texture2DRect(sampler, vec2(gl_TexCoord[0])), texture2DRect(sampler, vec2(gl_TexCoord[1]))); gl_FragColor = yuvPixel; // gl_FragColor.r = gl_TexCoord[0].x; // gl_FragColor.g = gl_TexCoord[0].y; // // gl_FragColor.b = gl_TexCoord[1].x; // gl_FragColor.a = gl_TexCoord[1].y; }