1 つの GLSL シェーダーで複数のユニフォーム ブロックを使用しようとしています。次のコードを使用してシェーダーをデバッグし、利用可能なユニフォーム ブロックを出力します。
void printUniformBlocks(void)
{
GLint numBlocks;
GLint nameLen;
vector<string> nameList;
glGetProgramiv(this->program, GL_ACTIVE_UNIFORM_BLOCKS, &numBlocks);
nameList.reserve(numBlocks);
cout << "found " << numBlocks << " block in shader" << endl;
for (int blockIx = 0; blockIx < numBlocks; blockIx++) {
glGetActiveUniformBlockiv(this->program, blockIx, GL_UNIFORM_BLOCK_NAME_LENGTH, &nameLen);
vector<GLchar> name;
name.resize(nameLen);
glGetActiveUniformBlockName(this->program, blockIx, nameLen, NULL, &name[0]);
nameList.push_back(std::string());
nameList.back().assign(name.begin(), name.end() - 1); //Remove the null terminator.
}
for (unsigned int il = 0; il < nameList.size(); il++) {
cout << "Block name: " << nameList[il] << endl;
}
}
私のシェーダーには次のものがあります
layout(std140) uniform Matrices {
mat4 model[16];
};
layout(std140) uniform Matrices2 {
mat4 model2[16];
};
.....
これがシェーダーで 1 つのブロックのみを報告し、「Matrices」ブロックのみを出力する理由は何でしょうか?