#version 330 core // Interpolated values from the vertex shaders in vec2 UV; // Ouput data out vec3 color; // Values that stay constant for the whole mesh. uniform sampler2D myTextureSampler; uniform sampler2D myTextureSampler2; // Relative width/height of a pixel uniform float pixWidth; uniform float pixHeight; // Pixel state int IS_BACKGROUND = 0; int IS_UNDEFINED = 1; int IS_FOREGROUND = 2; int UNSET = -1; vec3 getColor(vec2 uvCoord) { return texture(myTextureSampler2, uvCoord).rgb; } bool isBackground(vec3 c) { /*// 49,206, 11 if (all( lessThanEqual(c, vec3(51.0f/255.0f, 208.0f/255.0f, 13.0f/255.0f))) && all(greaterThanEqual(c, vec3(47.0f/255.0f, 204.0f/255.0f, 9.0f/255.0f)))*/ // 0, 255, 0 if (all( lessThanEqual(c, vec3(2.0f/255.0f, 255.0f/255.0f, 2.0f/255.0f))) && all(greaterThanEqual(c, vec3(0.0f/255.0f, 253.0f/255.0f, 0.0f/255.0f))) ) { return true; } else { return false; } } void main(){ int status = UNSET; for(int w=-5;w<=5;w++){ for(int h=-5;h<=5;h++){ if (w+h==-10) { // first pixel if (isBackground(getColor(UV+vec2(pixWidth*w, pixHeight*h)))) { status = IS_BACKGROUND; } else { status = IS_FOREGROUND; } } else { // other pixels if (isBackground(getColor(UV+vec2(pixWidth*w, pixHeight*h)))) { if (status != IS_BACKGROUND) { status = IS_UNDEFINED; w=100000; break; } } else { if (status != IS_FOREGROUND) { status = IS_UNDEFINED; w=100000; break; } } } } } if (status == IS_BACKGROUND) { color = vec3(1.0f, 0.0f, 0.0f); } else if (status == IS_FOREGROUND) { color = vec3(0.0f, 1.0f, 0.0f); } else { color = vec3(0.0f, 0.0f, 1.0f); } }