Лучше создавать новые VBOs или просто менять данные? (OpenGL) - PullRequest
5 голосов
/ 31 июля 2010

Так что в приложении рендеринга OpenGL обычно лучше создавать и поддерживать буфер вершин на протяжении всей жизни приложения и просто заменять данные каждый кадр с помощью glBufferData, или лучше просто удалить VBO и воссоздать егокаждый кадр?

Интуиция говорит мне, что лучше поменять данные, но несколько примеров программ, которые я видел, справляются с последним, так что я в некотором замешательстве.

Я прочитал технический документ Nvidiaна VBO, но, поскольку я новичок в opengl, это не имело особого смысла.

Заранее спасибо и советы

Ответы [ 2 ]

5 голосов
/ 31 июля 2010

Поскольку вы генерируете новый набор данных в каждом кадре, документация, похоже, указывает на то, что GL_STREAM_DRAW - это правильный путь для решения проблем.

0 голосов
/ 05 августа 2010

Важной особенностью VBO является то, что они являются буферами данных рендеринга, которые хранятся в графической памяти, а не в основной памяти компьютера.Это делает их использование очень эффективным, когда данные в них не обновляются (слишком) часто, потому что каждый раз, когда вы делаете это, компьютер должен будет переносить (потенциально огромные объемы) данных из основной памяти в графическую память - что медленно.

Таким образом, идеальный случай - поместить все необходимые данные рендеринга в VBO один раз, а затем манипулировать ими только через функции OpenGL, такие как матричное преобразование или через шейдеры.пространственные координаты и текстурные координаты в VBO и никогда больше их не трогать;вы бы использовали матрицу вида модели, функции освещения и шейдеры для их рендеринга.

Вы можете сделать больше, чтобы оптимизировать использование VBO, но это основы, как я их понял.Советы и подробности здесь: Как использовать VBO OpenGL 3.x для рендеринга динамического мира?

...