В XNA графический драйвер решает, в какой памяти лучше всего расположить ваши вершинные и индексные буферы, основываясь на свойствах указанных вами буферов.Выбор, который вы можете повлиять на то, где хранится буфер, включает:
- Использовать ли динамический буфер или обычный буфер
"В ситуациях, когда ваша игра часто изменяетбуфер вершин, рекомендуется, чтобы буфер создавался или производился от DynamicVertexBuffer вместо класса VertexBuffer. "
- Параметр использования при создании буфера
WriteOnly"Указывает, что приложение выполняет запись только в буфер вершин. Если указан, драйвер выбирает наилучшее место в памяти для эффективной записи и рендеринга. Попытки чтения из буфера вершин только для записи завершаются неудачей. "
Сводка
Учитывая вашу информацию о том, как будет использоваться буфер, графический драйвер, как правило, сможет принять лучшее решение, чем вы, о том, где разместить буфер.Это связано с тем, что он знает, какой объем памяти каждого типа доступен, и характеристики производительности памяти для этой конкретной системы.
Примечание. Для XNA 3.1 и ниже с динамическими данными вершин и индексов наxbox было быстрее хранить данные в управляемом массиве и использовать DrawUserPrimitives, чем использовать DynamicVertexBuffer или DynamicIndexBuffer.
Если вы в конечном итоге используете динамический буфер, вы должны быть осторожны, чтобы не остановить конвейерпри использовании SetData.Подробнее см. http://blogs.msdn.com/b/shawnhar/archive/2008/04/15/stalls-part-two-beware-of-setdata.aspx.