/*
 * Cross Stitch Shader
 * http://www.geeks3d.com/20110408/cross-stitching-post-processing-shader-glsl-filter-geexlab-pixel-bender/
 *
 * PARAM NAME		TYPE			DESCRIPTION					DEFAULT
 * textureId		sampler2D		texture to stitch 			0
 * screenWidth		float			texture width 				320
 * screenHeight 	float 			texture height 				480
 * stitchingSize 	float			stitch size 				6.0
 * invert			int 			invert colour?				0
 */

uniform sampler2D textureId; 
uniform float screenWidth;
uniform float screenHeight;
uniform float stitchingSize;
uniform int invert;

vec4 PostFX(sampler2D tex, vec2 uv)
{
	vec4 c = vec4(0.0);
	float size = stitchingSize;
	vec2 cPos = uv * vec2(screenWidth, screenHeight);
	vec2 tlPos = floor(cPos / vec2(size, size));
	tlPos *= size;
	int remX = int(mod(cPos.x, size));
	int remY = int(mod(cPos.y, size));
	if (remX == 0 && remY == 0)
	tlPos = cPos;
	vec2 blPos = tlPos;
	blPos.y += (size - 1.0);
	if ((remX == remY) || 
	 (((int(cPos.x) - int(blPos.x)) == (int(blPos.y) - int(cPos.y)))))
	{
	if (invert == 1)
		c = vec4(0.2, 0.15, 0.05, 1.0);
	else
		c = texture2D(tex, tlPos * vec2(1.0/screenWidth, 1.0/screenHeight)) * 1.4;
	}
	else
	{
		if (invert == 1)
			c = texture2D(tex, tlPos * vec2(1.0/screenWidth, 1.0/screenHeight)) * 1.4;
		else
			c = vec4(0.0, 0.0, 0.0, 1.0);
	}
	return c;
}

void main (void)
{
	gl_FragColor = PostFX(textureId, gl_TexCoord[0].st);
}