Разница между glBindBuffer и glBindBufferBase - PullRequest
0 голосов
/ 02 марта 2019

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

1 Ответ

0 голосов
/ 02 марта 2019

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

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

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

enter image description here

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

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

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