add some glsl example testing different arrays of uniforms

This commit is contained in:
Zack Rusin
2008-06-12 00:04:30 -04:00
parent 38fdf130d4
commit f49dd47dc9
5 changed files with 131 additions and 0 deletions

18
progs/vpglsl/off2f.glsl Normal file
View File

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

View File

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

View File

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

View File

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

View File

@@ -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[])