Сколько VBO я использую? - PullRequest
       6

Сколько VBO я использую?

10 голосов
/ 29 декабря 2011

Итак, я понимаю, как использовать объект буфера вершин, и что он обеспечивает значительное увеличение производительности по сравнению с рисованием в непосредственном режиме. Я буду рисовать много 2D квадроциклов (спрайтов), и я хочу знать, должен ли я создать VBO для каждого или создать один VBO для хранения всех данных?

Ответы [ 3 ]

18 голосов
/ 29 декабря 2011

Вы не должны использовать новый VBO для каждого спрайта / четверки.Таким образом, размещение их всех в одном VBO было бы лучшим решением в вашем случае.

Но в целом я не думаю, что на это можно ответить одним предложением.

Создание нового VBO длякаждый квад не даст вам реального увеличения производительности.Если вы сделаете это, много времени будет потрачено на звонки glBindBuffer для переключения VBO.Однако, если вы создаете VBO, которые содержат слишком много данных, вы можете столкнуться с другими проблемами.

Небольшие VBO:

  • Часто легче обрабатывать в программном коде.Вы можете использовать новое VBO для каждого объекта, который вы визуализируете.Таким образом, вы можете очень легко управлять своими объектами в своем мире
  • Если VBO слишком малы (всего несколько треугольников), вы не получите большой выгоды.Много времени будет потеряно при переключении буферов (и, возможно, переключении шейдеров / текстур) между буферами

Большие VBO:

  • Вы можете рендерить тонны объектов с помощью одногоdrawArrays() призыв к наилучшей производительности.
  • В зависимости от ваших данных возможно создание накладных расходов для управления большим количеством объектов в одном VBO (что, если вы хотите переместить один из этих объектов и повернуть другой объект?).
  • Если ваши VBO слишком велики, возможно, они не могут быть перемещены в VRAM

. Вам могут помочь следующие ссылки:

Рекомендации Vertex Best Practices

1 голос
/ 29 декабря 2011

Это также зависит от того, что вы хотите сделать с этими спрайтами?

Они динамические? Вы хотите изменить только центр четырехугольника или, возможно, изменить все четыре точки?

Это важно, потому что если ваши данные являются динамическими, то, проще всего, вам придется переносить из процессора в графический процессор каждый кадр. Может быть, вы могли бы выполнить все вычисления на GPU - например, с помощью геометрических шейдеров?

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

1 голос
/ 29 декабря 2011

Используйте одно (или небольшое количество) VBO для хранения всей / большей части вашей геометрии.

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

...