I am having a problem when using multiple uniform buffers.
Here is my GLSL code:
layout(std140) uniform MaterialInfo {
vec3 Ka;
vec3 Ks;
vec3 Kd;
};
layout(std140) uniform LightInfo {
vec3 La;
vec3 Ls;
vec3 Ld;
};
And this is how I create and fill my buffers:
blockIndex = glGetUniformBlockIndex(program, "MaterialInfo");
if (blockIndex == -1) {
fprintf(stderr, "Could not bind uniform block\n");
}
glGenBuffers(1, &materialUbo);
glBindBuffer(GL_UNIFORM_BUFFER, materialUbo);
glBufferData(GL_UNIFORM_BUFFER, sizeof(MaterialBlock), &mesh->material, GL_DYNAMIC_DRAW);
glBindBufferBase(GL_UNIFORM_BUFFER, blockIndex, materialUbo);
blockIndex = glGetUniformBlockIndex(program, "LightInfo");
if (blockIndex == -1) {
fprintf(stderr, "Could not bind uniform block\n");
}
glGenBuffers(1, &lightUbo);
glBindBuffer(GL_UNIFORM_BUFFER, lightUbo);
glBufferData(GL_UNIFORM_BUFFER, sizeof(LightBlock), &light->lightBlock, GL_DYNAMIC_DRAW);
glBindBufferBase(GL_UNIFORM_BUFFER, blockIndex, lightUbo);
When the structures are defines as following:
struct LightBlock {
glm::vec4 La;
glm::vec4 Ld;
glm::vec4 Ls;
};
struct MaterialBlock {
glm::vec4 Ka;
glm::vec4 Ks;
glm::vec4 Kd;
};
This code works fine if I only use one uniform buffer. That is the MaterialInfo. If I include the second buffer for lightInfo I get a crash when I get to glDrawElements() later in the rendering.
Is there a problem using multiple uniform buffers like this? Can I make it into 1 UBO?