#define SAMPLE_SIZE 9 uniform vec4 OGL2Param; uniform vec4 OGL2Size; uniform sampler2D OGL2Texture; const mat3 rgbTOyiq = mat3( 0.299, 0.587, 0.114, .596, -.274, -.322, .211, -.523, .312 ); const mat3 yiqTOrgb = mat3( 1.0, .956, .621, 1.0, -.272, -.647, 1.0, -1.106, 1.703 ); vec2 maskPos[9]; float filter[9]; void init(); void main(void) { vec4 texColor; vec4 original; float fk = (OGL2Param.z + 1.0) * 0.25; init(); original = texture2D(OGL2Texture, gl_TexCoord[0].xy + maskPos[4]); for(int i=0; i < SAMPLE_SIZE; i++) { vec4 tmp = texture2D(OGL2Texture, gl_TexCoord[0].xy + maskPos[i]); texColor.x += vec3(rgbTOyiq * tmp.xyz).x; } texColor.x -= original.x * filter[4]; texColor.x *= OGL2Param.z*0.05; gl_FragColor = vec4(yiqTOrgb * texColor.xyz, 0.0); } void init() { float stepX = 1.0 / OGL2Size.x; float stepY = 1.0 / OGL2Size.y; maskPos[0] = vec2(-stepX, stepY); maskPos[1] = vec2(0.0, stepY); maskPos[2] = vec2(stepX, stepY); maskPos[3] = vec2(-stepX, 0.0); maskPos[4] = vec2(0.0, 0.0); maskPos[5] = vec2(stepX, 0.0); maskPos[6] = vec2(-stepX, -stepY); maskPos[7] = vec2(0.0, -stepY); maskPos[8] = vec2(stepX, -stepY); filter[0] = 0.0; filter[1] = 0.0; filter[2] = 0.0; filter[3] = 0.0; filter[4] = 0.2; filter[5] = 0.0; filter[6] = 0.0; filter[7] = 0.0; filter[8] = 0.0; }