uniform sampler2D tex00;uniform sampler2D tex;uniform float width;uniform float height;#define s2(a, b) temp = a; a = min(a, b); b = max(temp, b);#define mn3(a, b, c) s2(a, b); s2(a, c);#define mx3(a, b, c) s2(b, c); s2(a, c);#define mnmx3(a, b, c) mx3(a, b, c); s2(a, b); // 3 exchanges#define mnmx4(a, b, c, d) s2(a, b); s2(c, d); s2(a, c); s2(b, d); // 4 exchanges//#define mnmx5(a, b, c, d, e) s2(a, b); s2(c, d); mn3(a, c, e); mx3(b, d, e); // 6 exchanges//#define mnmx6(a, b, c, d, e, f) s2(a, d); s2(b, e); s2(c, f); mn3(a, b, c); mx3(d, e, f); // 7 exchangesvec4 xlat_main( in vec2 tex ) { // Calculating texel coordinates float w = 640.0; float h = 480.0;// vec2 p0 = vec2(1.0/width,1.0/height); vec2 p1 = vec2(1.0/w,1.0/h); vec2 p0 = p1*0.6; vec4 v[9]; //MEDIAN-Filter to round edges // Add the pixels which make up our window to the pixel array. for(int dX = -1; dX <= 1; ++dX) { for(int dY = -1; dY <= 1; ++dY) { vec2 offset = vec2(float(dX), float(dY)); // If a pixel in the window is located at (x+dX, y+dY), put it at index (dX + R)(2R + 1) + (dY + R) of the // pixel array. This will fill the pixel array, with the top left pixel of the window at pixel[0] and the // bottom right pixel of the window at pixel[N-1]. v[(dX + 1) * 3 + (dY + 1)] = texture2D(tex00, tex + offset * p0); } } vec4 temp; // Starting with a subset of size 6, remove the min and max each time // mnmx6(v[0], v[1], v[2], v[3], v[4], v[5]); // mnmx5(v[1], v[2], v[3], v[4], v[6]); mnmx4(v[2], v[3], v[4], v[7]); mnmx3(v[3], v[4], v[8]); return v[4];}void main() {vec4 sum = vec4(0); vec2 texcoord = vec2(gl_TexCoord[0]); int j; int i; for( i= -1 ;i < 1; i++) { for (j = -2; j < 2; j++) { sum += texture2D(tex, texcoord + vec2(j, i)*0.004) * 0.25; } } if (texture2D(tex, texcoord).r < 0.3) { gl_FragColor = sum*sum*0.012 + texture2D(tex, texcoord); } else { if (texture2D(tex, texcoord).r < 0.5) { gl_FragColor = sum*sum*0.009 + texture2D(tex, texcoord); } else { gl_FragColor = sum*sum*0.0075 + texture2D(tex, texcoord); } } gl_FragData[0] = xlat_main(gl_TexCoord[0].xy).rgba;}