2017-02-14 4 views
0

Могу ли я привязать объект буфера opengl к нескольким целям. Например, я привязываю буфер к буферу целевого массива, а затем привязываю тот же буфер к SHADER_STORAGE_BUFFER или к какой-либо целевой отсрочке, является ли буфер привязан к первой или обеим целям?Связывание буфера с несколькими целями

ответ

1

OpenGL характеристики:

void [gl]BindBuffer(enum target, uint buffer); Если объект буфера имени буфер не был ранее связан, ГЛ создает новое состояние вектор, инициализирован с нулевым размером буфера памяти и содержащие все состояние и с теми же начальными значениями, приведенными в таблице ...

и

BindBuffer также может использоваться для привязки существующего объекта буфера. Если привязка успешна, никаких изменений в состоянии вновь связанного объекта не производится, а нарушается любое предыдущее связывание с мишенью.

Так что, да, вы можете использовать то же имя (созданное с glGenBuffers) и связать этот существующий связанный буфер с различным использованием (целевого в OpenGL жаргоне). Но я не могу придумать причину сделать это.

+0

Спасибо за помощь. Причина, по которой я хочу сделать это, заключается в том, что в моей программе я хочу иметь возможность присоединить буфер к VAO, используя ARRAY ELEMENT BUFFER. Это фактически будет «создавать IBO», прикрепленное к VBO. Затем, если я позже захочу отредактировать IBO, я могу привязать его к ARRAY BUFFER и не беспокоиться о том, чтобы не замаскировать его из VAO. Вопрос в том, будет ли привязка буфера к ARRAY BUFFER привязать буфер от VAO, к которому он привязан. – pdid

+0

Привязка к ARRAY BUFFER, когда он был ARRAY ELEMENT BUFFER, прежде чем разорвет предыдущую привязку. Если ваша причина изменяет данные, почему бы не использовать 'glBufferSubData' без каких-либо сбоев? – Ripi2

+0

@ Ripi2: «* сломает предыдущее связывание *» Он сломает предыдущее связывание цели GL_ARRAY_BUFFER, как вы цитировали спецификацию. Но он не изменит никаких других мест привязки для этого буфера. –

Смежные вопросы