uniform lowp vec2 srcTexelDelta;
in lowp vec2 texUVOut;
in mediump vec2 texelPosOut;

void main()
{
	precision lowp float;

	vec2 offsetX = vec2(srcTexelDelta.x, 0.0);
	vec2 offsetY = vec2(0.0, srcTexelDelta.y);
	vec4 E = TEXTURE(TEX, texUVOut);
	vec4 D = TEXTURE(TEX, texUVOut - offsetX);
	vec4 F = TEXTURE(TEX, texUVOut + offsetX);
	vec4 H = TEXTURE(TEX, texUVOut + offsetY);
	vec4 B = TEXTURE(TEX, texUVOut - offsetY);
	vec2 subTexel = fract(texelPosOut);
	
	if(subTexel.y >= 0.5)
	{
		// adjust to E2 (swap B and H)
		vec4 tmp = B; B = H; H = tmp;
	}
	if(subTexel.x >= 0.5)
	{
		// adjust to E1 or E3 (swap D and F)
		vec4 tmp2 = F; F = D; D = tmp2;
	}

	if(D == B && B != H && D != F)
 		E = D;

	FRAGCOLOR = E;
}
