Разница между glBindBuffer и glBindBufferBase

Я думаю что glBindBuffer(target, buffer) do сохранить адрес буфера на цели, который является специальным адресом.
Но я нашел glBindBufferBase(target, index, buffer), Я думаю, что цель должна быть массивом, эта операция сохраняет адрес буфера в массиве в соответствии с индексом.
Если то, что я считал правильным, то glBindBuffer эквивалентно glBindBufferBase(target, someindex, buffer)?
Может быть someindex это 0?

1 ответ

Они не используются для той же цели.

glBindBuffer используется для привязки буфера к определенной цели, так что все операции, которые изменяют эту цель, впоследствии сопоставляются с этим буфером.

glBindBufferBase используется для совершенно другой цели, он используется для привязки буфера к определенной точке привязки в индексированном массиве (когда данные не предполагается напрямую изменять, а использовать). Хотя это может показаться запутанным, это действительно легко увидеть. Предположим, что вы хотите передать унифицированный блок в свой шейдер, тогда у вас есть таблица, которая отображает именованные буферы в конкретные индексы в массиве, которые затем отображаются в привязки в шейдере, как показано на следующем рисунке:

так glBindBufferBase создает стрелки справа, в которых вы указываете индекс, в то время как glBindBuffer просто привязывает буфер к конкретной цели.

Вы бы тогда использовали glGetUniformBlockIndex чтобы получить правильный индекс в шейдере, который затем связывается с точкой привязки (стрелки влево) через glUniformBlockBinding,

Другие вопросы по тегам