I’m trying to learn OpenGL 3.3 and I’m having some trouble with loading more than one uniform in my Vertex shader.
At the top of my program I have declared
GLuint vs, fs;
GLuint program;
GLint attribute_coord3d, attribute_v_color;
GLint uniform_m_transform;
GLint uniform_mvp_matrix;
And in my setup method I have the following code after I link the the shaders and make a program object.
const char* attribute_name = "coord3d";
attribute_coord3d = glGetAttribLocation(program, attribute_name);
if (attribute_coord3d == -1) {
fprintf(stderr, "Could not bind attribute %s
", attribute_name);
return false;
}
attribute_name = "v_color";
attribute_v_color = glGetAttribLocation(program, attribute_name);
if (attribute_v_color == -1) {
fprintf(stderr, "Could not bind attribute %s
", attribute_name);
return 0;
}
const char* uniform_name;
uniform_name = "m_transform";
uniform_m_transform = glGetUniformLocation(program, uniform_name);
if (uniform_m_transform == -1) {
fprintf(stderr, "Could not bind uniform %s
", uniform_name);
fprintf(stderr, "uniform_m_transform: %d
", uniform_m_transform);
return 0;
}
uniform_name = "mvp";
uniform_mvp_matrix = glGetUniformLocation(program, uniform_name);
if (uniform_mvp_matrix == -1) {
fprintf(stderr, "Could not bind uniform %s
", uniform_name);
return 0;
}
And my vertex shader looks like this:
#version 330
in vec3 coord3d;
in vec3 v_color;
uniform mat4 m_transform;
uniform mat4 mvp;
out vec3 f_color;
void main(void) {
gl_Position = m_transform * vec4(coord3d, 1.0);
f_color = v_color;
}
My problem is that the last if-test in my setup method becomes true, i.e glGetUniformLocation returns -1. If I only pass one uniform to my vertex shader everything works as intended. Can anyone see what I’m doing wrong?