summaryrefslogtreecommitdiff
path: root/progs
diff options
context:
space:
mode:
authorZack Rusin <zack@tungstengraphics.com>2008-06-12 00:04:30 -0400
committerZack Rusin <zack@tungstengraphics.com>2008-06-12 14:15:37 -0400
commitf49dd47dc936587cd9eabddfe370651efc612f9f (patch)
tree62e80e914a1b3d164d5f87878c6c5dad7f1d12c5 /progs
parent38fdf130d4016197e9ecfa6beeade0362f9622eb (diff)
add some glsl example testing different arrays of uniforms
Diffstat (limited to 'progs')
-rw-r--r--progs/vpglsl/off2f.glsl18
-rw-r--r--progs/vpglsl/varfor1f.glsl22
-rw-r--r--progs/vpglsl/varfor2f.glsl24
-rw-r--r--progs/vpglsl/varfor4f.glsl19
-rw-r--r--progs/vpglsl/vp-tris.c48
5 files changed, 131 insertions, 0 deletions
diff --git a/progs/vpglsl/off2f.glsl b/progs/vpglsl/off2f.glsl
new file mode 100644
index 0000000000..e06cb42a0e
--- /dev/null
+++ b/progs/vpglsl/off2f.glsl
@@ -0,0 +1,18 @@
+const int KernelSize = 8;
+uniform vec2 Offset2f[KernelSize];
+uniform vec4 KernelValue4f[KernelSize];
+
+void main(void)
+{
+ int i;
+ vec4 sum = vec4(0.0);
+ vec4 tmp = gl_Color;
+ vec2 rg, ba;
+ gl_Position = gl_Vertex;
+
+ rg = Offset2f[4];
+ ba = Offset2f[5];
+
+
+ gl_FrontColor = KernelValue4f[0] * vec4(rg, ba);
+}
diff --git a/progs/vpglsl/varfor1f.glsl b/progs/vpglsl/varfor1f.glsl
new file mode 100644
index 0000000000..9c3e8f2a23
--- /dev/null
+++ b/progs/vpglsl/varfor1f.glsl
@@ -0,0 +1,22 @@
+const int KernelSize = 16;
+uniform float KernelValue1f[KernelSize];
+
+void main(void)
+{
+ int i;
+ vec4 sum = vec4(0.0);
+ vec4 tmp = gl_Color;
+ gl_Position = gl_Vertex;
+
+ for (i = 0; i < KernelSize; ++i) {
+ float x, y, z, w;
+
+ x = KernelValue1f[i]; ++i;
+ y = KernelValue1f[i]; ++i;
+ z = KernelValue1f[i]; ++i;
+ w = KernelValue1f[i];
+
+ sum += tmp * vec4(x, y, z, w);
+ }
+ gl_FrontColor = sum;
+}
diff --git a/progs/vpglsl/varfor2f.glsl b/progs/vpglsl/varfor2f.glsl
new file mode 100644
index 0000000000..d98a110045
--- /dev/null
+++ b/progs/vpglsl/varfor2f.glsl
@@ -0,0 +1,24 @@
+const int KernelSize = 9;
+uniform vec2 KernelValue2f[KernelSize];
+
+void main(void)
+{
+ int i;
+ vec4 sum = vec4(0.0);
+ vec4 tmp = gl_Color;
+ gl_Position = gl_Vertex;
+
+ for (i = 0; i < KernelSize; ++i) {
+ vec2 rg, ba;
+
+ rg = KernelValue2f[i];
+ ++i;
+ if (i < KernelSize)
+ ba = KernelValue2f[i];
+ else
+ ba = vec2(0, 0);
+
+ sum += tmp * vec4(rg, ba);
+ }
+ gl_FrontColor = sum;
+}
diff --git a/progs/vpglsl/varfor4f.glsl b/progs/vpglsl/varfor4f.glsl
new file mode 100644
index 0000000000..c70ba0356f
--- /dev/null
+++ b/progs/vpglsl/varfor4f.glsl
@@ -0,0 +1,19 @@
+const int KernelSize = 4;
+uniform vec4 KernelValue4f[KernelSize];
+
+void main(void)
+{
+ int i;
+ vec4 sum = vec4(0.0);
+ vec4 tmp = gl_Color;
+ gl_Position = gl_Vertex;
+
+ for (i = 0; i < KernelSize; ++i) {
+ vec4 rgba;
+
+ rgba = KernelValue4f[i];
+
+ sum += tmp * rgba;
+ }
+ gl_FrontColor = sum;
+}
diff --git a/progs/vpglsl/vp-tris.c b/progs/vpglsl/vp-tris.c
index 3c2830773a..9108d3f197 100644
--- a/progs/vpglsl/vp-tris.c
+++ b/progs/vpglsl/vp-tris.c
@@ -76,6 +76,52 @@ static void check_link(GLuint prog)
}
}
+static void setup_uniforms()
+{
+ {
+ GLuint loc1f = glGetUniformLocationARB(program, "Offset1f");
+ GLuint loc2f = glGetUniformLocationARB(program, "Offset2f");
+ GLuint loc4f = glGetUniformLocationARB(program, "Offset4f");
+ GLfloat vecKer[] =
+ { 1.0, 0.0, 0.0, 1.0,
+ 0.0, 1.0, 0.0, 1.0,
+ 1.0, 0.0, 0.0, 1.0,
+ 0.0, 0.0, 0.0, 1.0
+ };
+ if (loc1f >= 0)
+ glUniform1fv(loc1f, 16, vecKer);
+
+ if (loc2f >= 0)
+ glUniform2fv(loc2f, 8, vecKer);
+
+ if (loc4f >= 0)
+ glUniform4fv(loc4f, 4, vecKer);
+
+ }
+
+ GLuint loc1f = glGetUniformLocationARB(program, "KernelValue1f");
+ GLuint loc2f = glGetUniformLocationARB(program, "KernelValue2f");
+ GLuint loc4f = glGetUniformLocationARB(program, "KernelValue4f");
+ GLfloat vecKer[] =
+ { 1.0, 0.0, 0.0, 0.25,
+ 0.0, 1.0, 0.0, 0.25,
+ 0.0, 0.0, 1.0, 0.25,
+ 0.0, 0.0, 0.0, 0.25,
+ 0.5, 0.0, 0.0, 0.35,
+ 0.0, 0.5, 0.0, 0.35,
+ 0.0, 0.0, 0.5, 0.35,
+ 0.0, 0.0, 0.0, 0.35
+ };
+ if (loc1f >= 0)
+ glUniform1fv(loc1f, 16, vecKer);
+
+ if (loc2f >= 0)
+ glUniform2fv(loc2f, 8, vecKer);
+
+ if (loc4f >= 0)
+ glUniform4fv(loc4f, 4, vecKer);
+}
+
static void prepare_shaders()
{
static const char *fragShaderText =
@@ -103,6 +149,8 @@ static void prepare_shaders()
glLinkProgram(program);
check_link(program);
glUseProgram(program);
+
+ setup_uniforms();
}
static void args(int argc, char *argv[])