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