diff options
Diffstat (limited to 'progs/vpglsl')
-rw-r--r-- | progs/vpglsl/func.glsl | 33 | ||||
-rw-r--r-- | progs/vpglsl/func2.glsl | 54 |
2 files changed, 87 insertions, 0 deletions
diff --git a/progs/vpglsl/func.glsl b/progs/vpglsl/func.glsl new file mode 100644 index 00000000000..05539880fd8 --- /dev/null +++ b/progs/vpglsl/func.glsl @@ -0,0 +1,33 @@ +#version 120 +const int KernelSize = 16; +uniform float KernelValue1f[KernelSize]; + + +float add_two(float a, float b) +{ + if (a > b) + return a - b; + else + return a + b; +} + +vec4 func(vec4 x) +{ + int i; + vec4 tmp = gl_Color; + vec4 sum = x; + + for (i = 0; i < KernelSize; ++i) { + sum = vec4( add_two(sum.x, KernelValue1f[i]) ); + } + return sum; +} + +void main(void) +{ + vec4 sum = vec4(0.0); + + sum = func(sum); + gl_Position = gl_Vertex; + gl_FrontColor = sum; +} diff --git a/progs/vpglsl/func2.glsl b/progs/vpglsl/func2.glsl new file mode 100644 index 00000000000..df964ed6f02 --- /dev/null +++ b/progs/vpglsl/func2.glsl @@ -0,0 +1,54 @@ +#version 120 +const int KernelSize = 16; +uniform float KernelValue1f[KernelSize]; + + +float add_two(float a, float b) +{ + if (a > b) + return a - b; + else + return a + b; +} + +vec4 myfunc(vec4 x, vec4 mult, vec4 c) +{ + if (x.x >= 0.5) { + return mult * c; + } else { + return mult + c; + } +} + +vec4 func2(vec4 x) +{ + int i; + vec4 color = vec4(0); + for (i = 0; i < KernelSize; ++i) { + vec4 tmp = vec4(1./KernelSize); + color += myfunc(x, tmp, gl_Color); + } + return x * color; +} + +vec4 func(vec4 x) +{ + int i; + vec4 tmp = gl_Color; + vec4 sum = x; + + for (i = 0; i < KernelSize; ++i) { + sum = vec4( add_two(sum.x, KernelValue1f[i]) ); + } + sum = func2(sum); + return sum; +} + +void main(void) +{ + vec4 sum = vec4(0.0); + + sum = func(sum); + gl_Position = gl_Vertex; + gl_FrontColor = sum; +} |