rendered paste body// comic shader attempt :D
uniform sampler2D image;
uniform ivec2 gridsize;
uniform float blackness;
varying vec2 TexCoord0;
#define isEven(x) (int(x / 2.0) == x / 2.0)
void main (void)
{
const vec2 cyan = vec2(0, 0.3 / gridsize.y),
yellow = vec2(-0.3 / gridsize.x, -0.3 / gridsize.y),
magenta = vec2(0.3 / gridsize.x, -0.3 / gridsize.y);
float gridlen = 2.0 / length(vec2(gridsize));
vec2 gridpos;
gridpos.y = floor(TexCoord0.y * float(gridsize.y));
gridpos.x = floor(TexCoord0.x * float(gridsize.x));
vec2 bgPos = gridpos / gridsize;
bgPos.y += (0.5 / gridsize.y);
if (isEven(gridpos.y))
{
gridpos.x = floor((TexCoord0.x + 0.5 / gridsize.x ) * float(gridsize.x));
bgPos.x = gridpos.x / gridsize.x;
}
else
{
bgPos.x = gridpos.x / gridsize.x + (0.5 / gridsize.x);
}
vec4 backCol = texture2D(image, bgPos, -10.0).rgba;
vec4 posCol = texture2D(image, TexCoord0).rgba;
float lum = (posCol.r + posCol.g + posCol.b) / 3.0;
float variance = (abs(posCol.r -lum) + abs(posCol.g -lum) + abs(posCol.b - lum)) / 3.0;
if ( lum < blackness && variance < blackness)
{
gl_FragColor = vec4(0,0,0,1);
}
else
{
vec4 newCol;
// get cyan (inverse red)
newCol.r = (distance(TexCoord0, bgPos + cyan) > gridlen * (1.0-backCol.r) ) ? 1.0 : 0.0;
// magenta (inverse green)
newCol.g = (distance(TexCoord0, bgPos + magenta) > gridlen * (1.0-backCol.g) ) ? 1.0 : 0.0;
// yellow (inverse blue)
newCol.b = (distance(TexCoord0, bgPos + yellow) > gridlen * (1.0-backCol.b) ) ? 1.0 : 0.0;
newCol.a = backCol.a;
//if (dFdx() > 1.0)
gl_FragColor = newCol;
// else
// gl_FragColor = backCol;
}
return;
}