Нужно ли восстанавливать VAO, если мне нужно сменить VBO? - PullRequest
5 голосов
/ 11 января 2012

Я отрисовываю свою сцену путем создания или изменения буфера, который я даю glBufferData.Я понимаю, что Vertex Array Objects позволяет мне пропустить ручное связывание всех VBO, которые я использую.Это все еще тот случай, когда я постоянно обновляю свой буфер?

Могу ли я связать свой VAO, позвонить по номеру glBufferData, чтобы обновить вершины и индексы (только два VBO, которые у меня есть на данный момент), а затем выполнить рендеринг?

Могу ли я использовать отображение памяти с VBO?Тогда я мог бы связать VAO, изменить буфер, а затем отрендерить?

Что именно делает VAO?Является ли его функция просто функцией ярлыка, который хранит и автоматизирует привязку атрибутов вершин к моим VBO?Требуется ли владение данными или привязками?

1 Ответ

3 голосов
/ 11 января 2012

Возможно, вам придется проверить это, но, насколько я понимаю, VBO при создании генерируются идентификаторы, а VAO ссылается только на каждую атрибуцию вершин вместе с идентификатором VBO, который он использует.Вы должны быть в состоянии звонить glBufferData или glBufferSubData.Я не уверен, сработает ли отображение памяти непосредственно перед вызовом отрисовки, но вы наверняка могли бы сделать что-то между связыванием VAO и отрисовкой.VAO не блокирует VBO и не ограничивает доступ к ним.

Как правило, VAO просто сохраняет атрибуты и все их настройки (связанные VBO, шаг, смещение и т. Д.) И автоматически связывает атрибуты при привязке.,Пока вы не вызовете glBindVertexArray(0);, все атрибуты вершин будут привязаны к привязанному VAO.

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