#define iChannel0 inputImageTexture
#define texture(a,b) texture2D(a,fract(b))
#define fragColor gl_FragColor

precision highp float;

varying highp vec2 textureCoordinate;

uniform sampler2D inputImageTexture;

highp vec4 colorMatch(vec2 uv, vec3 lightColor, vec3 darkColor) {
vec4 color = texture(iChannel0, uv);
//vec3 lightColor = vec3(231.0/255.0,48.0/255.0,94.0/255.0);
//vec3 darkColor = vec3(95.0/255.0,173.0/255.0,47.0/255.0);
float luma = dot(color.rgb,vec3(0.299,0.587,0.114));
vec3 col = clamp(color.rgb,0.0,1.0);
col = mix(darkColor, lightColor,luma);
return vec4(col,1.0);
}

void main()
{
    vec3 lightColors[4];
    vec3 darkColors[4];
    lightColors[0] = vec3(0.949,0.051,0.157);
    lightColors[1] = vec3(0.874,0.949,0.051);
    lightColors[2] = vec3(0.188,0.874,0.917);
    lightColors[3] = vec3(0.917,0.262,0.851);
    darkColors[0] = vec3(0.106,0.106,0.15);
    darkColors[1] = vec3(0.043,0.043,0.278);
    darkColors[2] = vec3(0.004,0.317,0.317);
    darkColors[3] = vec3(0.161,0.122,0.168);

    vec2 uv = textureCoordinate;
    uv *= 2.0;
    int i = int(floor(uv.x)) + int(floor(uv.y)) * 2;
    gl_FragColor = colorMatch(fract(uv), lightColors[i], darkColors[i]);
}

