Browse Source

add some glsl example testing different arrays of uniforms

tags/mesa_20090313
Zack Rusin 17 years ago
parent
commit
f49dd47dc9
5 changed files with 131 additions and 0 deletions
  1. 18
    0
      progs/vpglsl/off2f.glsl
  2. 22
    0
      progs/vpglsl/varfor1f.glsl
  3. 24
    0
      progs/vpglsl/varfor2f.glsl
  4. 19
    0
      progs/vpglsl/varfor4f.glsl
  5. 48
    0
      progs/vpglsl/vp-tris.c

+ 18
- 0
progs/vpglsl/off2f.glsl 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);
}

+ 22
- 0
progs/vpglsl/varfor1f.glsl 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;
}

+ 24
- 0
progs/vpglsl/varfor2f.glsl 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;
}

+ 19
- 0
progs/vpglsl/varfor4f.glsl 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;
}

+ 48
- 0
progs/vpglsl/vp-tris.c 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[])

Loading…
Cancel
Save