Разница между glBindBuffer и glBindBufferBase
Я думаю что glBindBuffer(target, buffer)
do сохранить адрес буфера на цели, который является специальным адресом.
Но я нашел glBindBufferBase(target, index, buffer)
, Я думаю, что цель должна быть массивом, эта операция сохраняет адрес буфера в массиве в соответствии с индексом.
Если то, что я считал правильным, то glBindBuffer
эквивалентно glBindBufferBase(target, someindex, buffer)
?
Может быть someindex
это 0?
1 ответ
Они не используются для той же цели.
glBindBuffer
используется для привязки буфера к определенной цели, так что все операции, которые изменяют эту цель, впоследствии сопоставляются с этим буфером.
glBindBufferBase
используется для совершенно другой цели, он используется для привязки буфера к определенной точке привязки в индексированном массиве (когда данные не предполагается напрямую изменять, а использовать). Хотя это может показаться запутанным, это действительно легко увидеть. Предположим, что вы хотите передать унифицированный блок в свой шейдер, тогда у вас есть таблица, которая отображает именованные буферы в конкретные индексы в массиве, которые затем отображаются в привязки в шейдере, как показано на следующем рисунке:
так glBindBufferBase
создает стрелки справа, в которых вы указываете индекс, в то время как glBindBuffer
просто привязывает буфер к конкретной цели.
Вы бы тогда использовали glGetUniformBlockIndex
чтобы получить правильный индекс в шейдере, который затем связывается с точкой привязки (стрелки влево) через glUniformBlockBinding
,