/* Simple tracking shader to track the mean positions of features.
 *
 */

#extension GL_ARB_texture_rectangle : enable

uniform sampler2DRect Image;
uniform sampler2DRect OldPositions;

void main(void)
{
    const float HalfWidth = 10.0;

    vec2 newpos = vec2(0.0);
    vec2 samplepos;
    float count = 0.0;
    float dx, dy;
    float validpixel;

    /* Perform lookup of last known position of center of feature: */
    vec2 oldpos = texture2DRect(OldPositions, gl_TexCoord[0].st).rg;

    for (dy = -HalfWidth; dy <= HalfWidth; dy++) {
        for (dx = -HalfWidth; dx <= HalfWidth; dx++) {
            samplepos = oldpos + vec2(dx, dy);
            validpixel = texture2DRect(Image, samplepos).a;
            newpos+= validpixel * samplepos;
            count+= validpixel;
        }
    }

    if (count > 0.0) {
        gl_FragColor.rg = newpos / count;
        gl_FragColor.b  = count;
        gl_FragColor.a  = 1.0;
    }
    else {
        gl_FragColor.rg = oldpos;
        gl_FragColor.ba = vec2(0.0);
    }
}
