add some glsl example testing different arrays of uniforms
This commit is contained in:
18
progs/vpglsl/off2f.glsl
Normal file
18
progs/vpglsl/off2f.glsl
Normal 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
progs/vpglsl/varfor1f.glsl
Normal file
22
progs/vpglsl/varfor1f.glsl
Normal 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
progs/vpglsl/varfor2f.glsl
Normal file
24
progs/vpglsl/varfor2f.glsl
Normal 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
progs/vpglsl/varfor4f.glsl
Normal file
19
progs/vpglsl/varfor4f.glsl
Normal 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;
|
||||||
|
}
|
@@ -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 void prepare_shaders()
|
||||||
{
|
{
|
||||||
static const char *fragShaderText =
|
static const char *fragShaderText =
|
||||||
@@ -103,6 +149,8 @@ static void prepare_shaders()
|
|||||||
glLinkProgram(program);
|
glLinkProgram(program);
|
||||||
check_link(program);
|
check_link(program);
|
||||||
glUseProgram(program);
|
glUseProgram(program);
|
||||||
|
|
||||||
|
setup_uniforms();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void args(int argc, char *argv[])
|
static void args(int argc, char *argv[])
|
||||||
|
Reference in New Issue
Block a user