in vec2 v_texCoord0;

uniform sampler2D tex0;
uniform int maxSteps;
uniform int step;

out vec4 o_color;
void main() {

    float stepwidth = 1.0 / pow(2.0, min(float(maxSteps), float(step+1)));

    float bestDistance = 1E10;
    vec2 bestCoord = vec2(-100.0);
    vec2 bestColor = vec2(-1.0);

    vec2 is = vec2(1.0) / vec2(textureSize(tex0, 0));

    float found = 0.0;
    for (int y = -1; y <= 1; ++y) {
        for (int x = -1; x <= 1; ++x) {
            vec2 sampleCoord = v_texCoord0 + vec2(stepwidth) * vec2(x,y);
            vec4 data = texture( tex0, sampleCoord);
            vec2 seedCoord = data.xy;
            vec2 seedColor = data.zw;
            float dist = length(seedCoord - v_texCoord0);
            if ((seedCoord.x >= 0.0 && seedCoord.y >= 0.0) && dist <= bestDistance)
            {
                found = 1.0;
                bestDistance = dist;
                bestCoord = seedCoord;
                bestColor = seedColor;
            }
        }
    }

    o_color = vec4(bestCoord, bestColor.r, 1.0);

}