XNA/DirectX: всегда ли следует использовать индексы?

Я реализую рекламные щиты для растительности, где рекламный щит, конечно же, представляет собой один четырехугольник, состоящий из двух треугольников. Данные вершин хранятся в буфере вершин, но стоит ли возиться с индексами? Я понимаю, что экономия на таких вещах, как ландшафт, может быть огромной с точки зрения вершин, отправляемых на видеокарту, когда вы используете индексы, но использование индексов на рекламных щитах означает, что у меня будет 4 вершины на квадрат, а не 6, так как каждый квадрат полностью отдельно от других.

И возможно ли, что использование индексов на самом деле снижает производительность из-за дополнительного уровня косвенности? Или это вообще не имеет значения?

Я спрашиваю об этом, потому что использование индексов немного усложнит ситуацию, и мне любопытно узнать, не делаю ли я дополнительную работу, которая просто замедляет работу (будь то только в теории или на самом деле заметно на практике).

Это использует XNA, но должно применяться к DirectX.


person JulianR    schedule 24.05.2009    source источник


Ответы (2)


Использование индексов не только экономит полосу пропускания, отправляя меньше данных на карту, но и уменьшает объем работы, которую должен выполнять вершинный шейдер. Результаты вершинного шейдера можно кэшировать, если есть индекс для использования в качестве ключа.

Если вы визуализируете много этой растительности с рекламными щитами и не меняете свой индексный буфер, я думаю, вы должны увидеть небольшой выигрыш.

person Cat Zimmermann    schedule 27.05.2009
comment
Мало того, вы раньше (вероятно, все еще должны) использовать индексный буфер, чтобы включить кеш пост-преобразования, что хорошо (тм) - person Rodrigo Lopez; 23.06.2009
comment
Я смущен вашим комментарием. Когда я писал Результаты вершинного шейдера можно кэшировать, если есть индекс для использования в качестве ключа, я предположил, что имел в виду кеш после преобразования. - person Cat Zimmermann; 24.06.2009

Когда дело доходит до очень примитивной гемотерии, то индексы использовать может и не имеет смысла, я даже не буду в таком случае заморачиваться с производительностью, даже скромный HW будет рендерить миллионы треугольников в секунду.

Теперь, технически, вы не знаете, как HW будет обрабатывать данные внутри, он все равно может преобразовать их в индексы, потому что это самая популярная форма представления геометрии.

person Shay Erlichmen    schedule 25.05.2009