Гарантируется ли, что если универсальный блок объявлен одинаковым в нескольких шейдерных программах, скажем,
uniform Matrices
{
mat4 ProjectionMatrix;
mat4 CameraMatrix;
mat4 ModelMatrix;
};
Будет ли он иметь тот же индекс блока, что и glGetUniformBlockIndex(program, "Matrices")
?
Если ответ положительный, то я могу один раз запросить индекс блока и использовать его для всех шейдерных программ, содержащих этот блок, верно?
Второй вопрос: будут ли ProjectionMatrix
, CameraMatrix
, ModelMatrix
всегда иметь одинаковый порядок компоновки в памяти соответственно? Я спрашиваю об этом, потому что в учебнике, который я прочитал, используются следующие функции
// Query for the offsets of each block variable
const GLchar *names[] = { "InnerColor", "OuterColor",
"RadiusInner", "RadiusOuter" };
GLuint indices[4];
glGetUniformIndices(programHandle, 4, names, indices);
GLint offset[4];
glGetActiveUniformsiv(programHandle, 4, indices,
GL_UNIFORM_OFFSET, offset);
И я не уверен, действительно ли это необходимо, если я знаю порядок униформ внутри блока униформы..?