I’ve got a problem with passing down a uniform variable (or better a matrix).
When I call glUniformMatrix4fv(…) my program crashes.
I draw my object by using a vertex index array.
Here is a part of my program:
void initialize() {
// create VBOs
glGenBuffers(1, &vboVId);
glBindBuffer(GL_ARRAY_BUFFER, vboVId);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
glGenBuffers(1, &vboIId);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboIId);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
// create shaders
[...]
shaderProgramId = glCreateProgram();
glAttachShader(shaderProgramId, vertexShaderId);
glAttachShader(shaderProgramId, fragmentShaderId);
glLinkProgram(shaderProgramId);
glUseProgram(shaderProgramId);
// map locations
locVertices = glGetAttribLocation(shaderProgramId, "a_position");
locMvpMatrix = glGetUniformLocation(shaderProgramId, "u_mvpMatrix");
glEnableVertexAttribArray(locVertices);
glVertexAttribPointer(locVertices, 4, GL_FLOAT, GL_FALSE, sizeof(Vertex), 0);
}
void loop() {
mvpMatrix.loadIdentity();
mvpMatrix.multiply(projectionMatrix);
glUniformMatrix4fv(locMvpMatrix, 1, 0, (float*)&mvpMatrix); // <-- when commented, the program works
glDrawElements(GL_TRIANGLE_STRIP, 3, GL_UNSIGNED_INT, 0);
glfwSwapBuffers();
}