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; }