複数の均一なバッファーを使用すると問題が発生します。
これが私のGLSLコードです:
layout(std140) uniform MaterialInfo {
vec3 Ka;
vec3 Ks;
vec3 Kd;
};
layout(std140) uniform LightInfo {
vec3 La;
vec3 Ls;
vec3 Ld;
};
そして、これが私のバッファを作成して埋める方法です:
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);
構造が次のように定義されている場合:
struct LightBlock {
glm::vec4 La;
glm::vec4 Ld;
glm::vec4 Ls;
};
struct MaterialBlock {
glm::vec4 Ka;
glm::vec4 Ks;
glm::vec4 Kd;
};
このコードは、1つの均一なバッファーのみを使用する場合は正常に機能します。それがMaterialInfoです。lightInfoの2番目のバッファーを含めると、レンダリングの後半でglDrawElements()に到達したときにクラッシュします。
このような複数の均一なバッファーを使用することに問題はありますか?1つのUBOにすることはできますか?