Использование отдельного буфера вершин для динамических и статических объектов в DirectX11

Есть ли какие-либо преимущества наличия отдельных вершинных буферов для статических и динамических объектов в приложении DirectX 11? Мой подход - хранить вершины всех объектов в сцене в одном и том же буфере вершин.

Однако мне нужно будет только повторно сопоставить небольшое количество объектов (от 1 до 5) из всей коллекции (до 200 объектов). Большинство объектов статичны и никак не трансформируются. Каков наилучший подход для этого?

1 ответ

Решение

Отображение большого буфера вершин с помощью discard заставляет драйвер выделять новую память каждый кадр. В полете может быть до ~4 кадров, поэтому может быть 4 копии этого буфера. Это может привести к перегрузке памяти и заиканию. Например, ATI рекомендует отбрасывать буферы вершин максимум до 4 Мб ( твиты производительности GCN). Кроме того, каждый раз вам придется без необходимости копировать статические данные в новый буфер вершин.

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

Наилучшим подходом было бы упростить работу водителя, предоставив как можно больше подсказок. Создайте статические буферы вершин с неизменным флагом, долгоживущий с флагом по умолчанию и динамический с динамическим флагом. Дополнительные сведения см. В руководствах поставщиков, таких как твиты GCN Performance или " Не выбрасывайте все это: эффективное управление буфером".

Другие вопросы по тегам