#version 110
varying vec2 tex_coord;

void main (void)
{
    vec4 white = vec4(1.0);
    vec4 black = vec4(0.2);
    vec4 color = white;

    // First, cut out our circle
    float x = tex_coord.x*2.0 - 1.0;
    float y = tex_coord.y*2.0 - 1.0;

    float radius = sqrt(x*x + y*y);
    if (radius > 1.0) {
        if (radius > 1.1) {
            ++color;
        }

        gl_FragColor = color;

        if (radius > 1.2) {
            ++color;
        }

        discard;
    }

    // If we're near an edge, darken us a tiny bit
    if (radius >= 0.75)
        color -= abs(pow(radius, 16.0)/2.0);

    gl_FragColor = color;

}
