Почему значение GL_MAX_UNIFORM_BLOCK_SIZE изменяется? - PullRequest
1 голос
/ 10 апреля 2020

Согласно 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 должно быть постоянным в зависимости от моего графического процессора. Тогда почему это меняется, когда я изменяю размер массива?

1 Ответ

2 голосов
/ 10 апреля 2020

GL_MAX_UNIFORM_BLOCK_SIZE правильно запрашивается с glGetIntegerv. Это константа, определяемая реализацией, которая сообщает максимум, определенный реализацией. glGetUniform возвращает значение униформы в данной программе. Возможно, вы получили какую-то ошибку OpenGL, поскольку GL_MAX_UNIFORM_BLOCK_SIZE не является допустимым единообразным местоположением, и, следовательно, ваше целое число никогда не записывалось. То есть вы просто читаете неинициализированные данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...