Согласно khronos.org, GL_MAX_UNIFORM_BLOCK_SIZE
относится к максимальному размеру в базовых c единицах станка единого блока. Значение должно быть не менее 16384.
У меня есть фрагментный шейдер, где я объявил единообразный интерфейсный блок и прикрепил к нему единообразный буферный объект.
#version 460 core
layout(std140, binding=2) uniform primitives{
vec3 foo[3430];
};
...
Если я запрашиваю размер GL_MAX_UNIFORM_BLOCK_SIZE
с:
GLuint info;
glGetUniformiv(shaderProgram.getShaderProgram_id(), GL_MAX_UNIFORM_BLOCK_SIZE, reinterpret_cast<GLint *>(&info));
cout << "GL_MAX_UNIFORM_BLOCK_SIZE: " << info << endl;
Я получаю: GL_MAX_UNIFORM_BLOCK_SIZE: 22098 . Это нормально, но, к примеру: когда я изменяю размер массива на 3000 (вместо 3430), я получаю GL_MAX_UNIFORM_BLOCK_SIZE: 21956
Насколько я знаю, GL_MAX_UNIFORM_BLOCK_SIZE
должно быть постоянным в зависимости от моего графического процессора. Тогда почему это меняется, когда я изменяю размер массива?