uniform sampler2DRect minMaxMeanSampler;
uniform int width;
uniform int height;

layout(location = 0)out vec3 outValues;

void main(void) {
    vec3 val[3];
    ivec2 pos = ivec2(gl_FragCoord.xy)*2;

    // fetching 4 texels
    outValues = texelFetch(minMaxMeanSampler, pos).xyz;
    val[0] = texelFetch(minMaxMeanSampler, pos + ivec2(1, 0)).xyz;
    val[1] = texelFetch(minMaxMeanSampler, pos + ivec2(0, 1)).xyz;
    val[2] = texelFetch(minMaxMeanSampler, pos + ivec2(1, 1)).xyz;

    // computing min, max, and mean for these 4 texels
    for(int i=0; i<3; ++i)
    {
        outValues.x = min(outValues.x, val[i].x);
        outValues.y = max(outValues.y, val[i].y);
        outValues.z += val[i].z;
    }
    outValues.z /= 4;
}