SetVertexBuffer Performance - PullRequest
       3

SetVertexBuffer Performance

1 голос
/ 27 февраля 2012

Есть ли более быстрый способ установить данные буфера вершин, чем SetVertexBuffer?Кажется, что это вызывает значительное снижение производительности и очень медленно: /.

1 Ответ

2 голосов
/ 27 февраля 2012

SetVertexBuffer должен быть самым быстрым способом назначения вершинных данных, поскольку этот метод напрямую обращается к API DirectX 9.

Насколько я знаю (работа с DX11), нет другого способа присвоения данных вершины.Даже когда вы вызываете DrawUserPrimitives или DrawUserIndexedPrimitives, буфер создается и затем отправляется на устройство.Разница здесь в том, что этот буфер будет создаваться для каждого вызова отрисовки, поскольку вы могли бы изменить данные в это время, поэтому он должен быть еще медленнее.

Убедитесь, что на самом деле медленный вызов SetVertexBufferвниз ваше приложение.Если это так, возможно, вы просто отправляете много данных на устройство, что должно занять некоторое время.Но я не могу сказать без кода.


Многие отдельные вызовы SetVertexBuffer на самом деле замедляют работу приложения.И отправка двух буферов на устройство, скорее всего, будет медленнее, чем один буфер, содержащий объединенные данные.Несколько советов:

  • Уменьшите общее количество буферов.Используйте смещения индексов и вершин для рисования только определенных сегментов буфера.
  • Избегайте слишком большого количества переключений между буферами.(Это общее руководство для всего, что вы отправляете на устройство. Избегайте изменения состояния.)
  • По возможности используйте статические буферы.
  • Если вам действительно нужны динамические сетки, попробуйте отделить их отстатические данные для оптимизированного кэширования. (Кредиты A-Type, см. Комментарии)

Но, как всегда, производительность в 3D-приложениях - нечеткая тема.Вскоре могут появиться другие узкие места (шейдеры, текстуры и т. Д.), И вам, возможно, придется нарушить приведенные выше рекомендации.

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