Подтвердить что ты не робот

Является ли использование Vertex Buffer Object для очень динамических данных хорошей идеей?

У меня много частиц, вершины которых меняют каждый кадр. Вершины в настоящее время рисуются с использованием массива вершин в "клиентской" памяти. Какие характеристики производительности я могу ожидать, если я использую объект буфера вершин?

Так как я должен использовать несколько glBuffersubData для обновления вершин частиц, я поэтому переношу вершины в видеопамять каждый кадр в любом случае (например, если бы я использовал регулярный массив вершин)? Есть ли какая-то польза для VBO в этом случае?

Это для устройств iOS. Фактический вызов вызова: glDrawElements (GL_POINTS, num_particles, GL_UNSIGNED_SHORT, pindices);

Должен ли я использовать GL_STREAM_DRAW или GL_DYNAMIC_DRAW?

4b9b3361

Ответ 1

Документация Apple, по-видимому, рекомендует VBOs во всех ситуациях. Если вы используете ES 2.x, то тип буфера вершин GL_STREAM_DRAW явно указывается для "когда вашему приложению необходимо создать временную геометрию, которая отображается небольшим числом раз, а затем отбрасывается. Это наиболее полезно, когда ваше приложение должно динамически изменять вершину данных каждый кадр таким образом, который не может быть выполнен в вершинном шейдере". Использование glBufferSubData затем прямо защищается.

Логически, я полагаю, что единственное различие между подачей данных полностью заново и отправкой в ​​существующий буфер GL_STREAM_DRAW или GL_DYNAMIC_DRAW заключается в том, что ваше пространство на карте памяти (GPU или CPU, в зависимости от микросхемы - MBX действительно не делают VBOs, но Apple поддерживает их по другим причинам производительности) могут быть выделены один раз, а не выделены и выпущены каждый кадр.

Использование советов выравнивания и упаковки, приведенных в этом документе, скорее всего, даст лучшее улучшение, чем переход на VBOs, так как в противном случае CPU просто должен распаковать и переупаковать данные на glDrawElements. Хотя, вероятно, вы уже знаете об этом, и я ценю, что это не является прямой частью вопроса - я в основном бросаю его в качестве сравнительного предположения о преимуществах производительности.

Ответ 2

Правильно устанавливая VBOs, вы используете оптимальный способ передачи данных на GPU. Поступая таким образом, вы можете пропустить некоторую обработку драйвера. Единственный способ увидеть, насколько вы получаете улучшение, которое вы получаете, - это измерить. Он отличается от карты к карте.

Для справки VBO см. это: учебник VBO

ИЗМЕНИТЬ Забыл ответить на вопрос: да, это хорошая идея. Но первая мера.