132001f49Smrg#version 120
232001f49Smrgconst int KernelSize = 16;
332001f49Smrguniform float KernelValue1f[KernelSize];
432001f49Smrg
532001f49Smrg
632001f49Smrgfloat add_two(float a, float b)
732001f49Smrg{
832001f49Smrg    if (a > b)
932001f49Smrg        return a - b;
1032001f49Smrg    else
1132001f49Smrg        return a + b;
1232001f49Smrg}
1332001f49Smrg
1432001f49Smrgvec4 myfunc(vec4 x, vec4 mult, vec4 c)
1532001f49Smrg{
1632001f49Smrg   if (x.x >= 0.5) {
1732001f49Smrg      return mult * c;
1832001f49Smrg   } else {
1932001f49Smrg      return mult + c;
2032001f49Smrg   }
2132001f49Smrg}
2232001f49Smrg
2332001f49Smrgvec4 func2(vec4 x)
2432001f49Smrg{
2532001f49Smrg    int i;
2632001f49Smrg    vec4 color = vec4(0);
2732001f49Smrg       for (i = 0; i < KernelSize; ++i) {
2832001f49Smrg           vec4 tmp = vec4(1./KernelSize);
2932001f49Smrg           color += myfunc(x, tmp, gl_Color);
3032001f49Smrg       }
3132001f49Smrg    return x * color;
3232001f49Smrg}
3332001f49Smrg
3432001f49Smrgvec4 func(vec4 x)
3532001f49Smrg{
3632001f49Smrg    int i;
3732001f49Smrg    vec4 tmp = gl_Color;
3832001f49Smrg    vec4 sum = x;
3932001f49Smrg
4032001f49Smrg    for (i = 0; i < KernelSize; ++i) {
4132001f49Smrg        sum = vec4( add_two(sum.x, KernelValue1f[i]) );
4232001f49Smrg    }
4332001f49Smrg    sum = func2(sum);
4432001f49Smrg    return sum;
4532001f49Smrg}
4632001f49Smrg
4732001f49Smrgvoid main(void)
4832001f49Smrg{
4932001f49Smrg    vec4 sum = vec4(0.0);
5032001f49Smrg
5132001f49Smrg    sum = func(sum);
5232001f49Smrg    gl_Position = gl_Vertex;
5332001f49Smrg    gl_FrontColor = sum;
5432001f49Smrg}
55