Поделиться через


Буферы вершин (Direct3D 9)

Буферы вершин, представленные интерфейсом IDirect3DVertexBuffer9, представляют собой буферы памяти, содержащие данные вершин. Буферы вершин могут содержать любой тип вершины , преобразованный или нетрансформированный, освещенный или незалитый - который можно отрисовывать с помощью методов отрисовки в интерфейсе IDirect3Device9. Вершины можно обработать в буфере вершин для выполнения таких операций, как преобразование, освещение или создание флагов вырезки. Преобразование всегда выполняется.

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

Описание

Буфер вершин описывается с точки зрения его возможностей: если он может существовать только в системной памяти, если он используется только для операций записи, а также тип и количество вершин, которые он может содержать. Все эти признаки хранятся в D3DVERTEXBUFFER_DESC структуре.

Элемент format имеет значение D3DFMT_VERTEXDATA, чтобы указать, что это буфер вершин. Тип определяет тип ресурса буфера вершин. Элемент структуры использования содержит общие флаги возможностей. Флаг D3DUSAGE_SOFTWAREPROCESSING указывает, что буфер вершин будет использоваться с обработкой вершин программной вершины. Наличие флага D3DUSAGE_WRITEONLY в использовании указывает, что память буфера вершин используется только для операций записи. Это позволяет драйверу разместить данные вершин в лучшем расположении памяти, чтобы обеспечить быструю обработку и отрисовку. Если флаг D3DUSAGE_WRITEONLY не используется, драйвер, скорее всего, помещает данные в расположение, которое неэффективно для операций чтения. Это жертвует некоторой скоростью обработки и отрисовки. Если этот флаг не указан, предполагается, что приложения выполняют операции чтения и записи данных в буфере вершин.

Пул задает класс памяти, выделенный для буфера вершин. Флаг D3DPOOL_SYSTEMMEM указывает, что система создала буфер вершин в системной памяти.

Элемент Size сохраняет размер в байтах данных буфера вершин. Элемент FVF содержит сочетание D3DFVF, определяющих тип вершин, содержащих буфер.

Пул памяти и использование

Буферы вершин можно создать с помощью метода IDirect3DDevice9::CreateVertexBuffer, который принимает параметры пула (класс памяти) и параметры использования. IDirect3Device9::CreateVertexBuffer также можно создать с указанным кодом FVF для использования в обработке вершин фиксированной функции или в качестве выходных данных вершин процесса. Дополнительные сведения см. в буферах вершин FVF (Direct3D 9).

Флаг D3DUSAGE_SOFTWAREPROCESSING можно задать при включенной смешанной обработке вершин (D3DCREATE_MIXED_VERTEXPROCESSING / D3DCREATE_SOFTWARE_VERTEXPROCESSING) для этого устройства. D3DUSAGE_SOFTWAREPROCESSING необходимо задать для буферов, используемых с обработкой вершин программного обеспечения в смешанном режиме, но при использовании аппаратной обработки вершин в смешанном режиме не следует устанавливать оптимальную производительность. (D3DCREATE_HARDWARE_VERTEXPROCESSING). Однако параметр D3DUSAGE_SOFTWAREPROCESSING является единственным вариантом, если один буфер должен использоваться как с аппаратной, так и программной обработкой вершин. D3DUSAGE_SOFTWAREPROCESSING допускается для смешанных устройств, а также для программных устройств.

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

В этом разделе приведены основные понятия, необходимые для понимания и использования буферов вершин в приложении Direct3D. Сведения делятся на следующие разделы.

ресурсы Direct3D

отрисовки из буферов вершин и индексов (Direct3D 9)

буферов индексов (Direct3D 9)