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


Метод IDirect3DDevice9::CreateVertexBuffer (d3d9helper.h)

Создает буфер вершин.

Синтаксис

HRESULT CreateVertexBuffer(
  [in]          UINT                   Length,
  [in]          DWORD                  Usage,
  [in]          DWORD                  FVF,
  [in]          D3DPOOL                Pool,
  [out, retval] IDirect3DVertexBuffer9 **ppVertexBuffer,
  [in]          HANDLE                 *pSharedHandle
);

Параметры

[in] Length

Тип: UINT

Размер буфера вершин в байтах. Для буферов вершин FVF длина должна быть достаточно большой, чтобы содержать по крайней мере одну вершину, но она не должна быть кратной размеру вершины. Длина не проверяется для буферов, не относящихся к FVF. См. заметки.

[in] Usage

Тип: DWORD

Использование может иметь значение 0, что указывает на отсутствие значения использования. Однако если требуется использование, используйте сочетание одной или нескольких констант D3DUSAGE . Рекомендуется сопоставлять параметр использования в CreateVertexBuffer с флагами поведения в IDirect3D9::CreateDevice. Дополнительные сведения см. в подразделе "Примечания".

[in] FVF

Тип: DWORD

Сочетание D3DFVF, описателя использования, описывающего формат вершин в этом буфере. Если для этого параметра задан допустимый код FVF, созданный буфер вершин является буфером вершин FVF (см. примечания). В противном случае, если для этого параметра задано значение 0, буфер вершин является буфером вершин без FVF.

[in] Pool

Тип: D3DPOOL

Член D3DPOOL перечислимого типа, описывающий допустимый класс памяти, в который помещется ресурс. Не устанавливайте значение D3DPOOL_SCRATCH.

[out, retval] ppVertexBuffer

Тип: IDirect3DVertexBuffer9**

Адрес указателя на интерфейс IDirect3DVertexBuffer9 , представляющий созданный ресурс буфера вершин.

[in] pSharedHandle

Тип: HANDLE*

Зарезервировано. Задайте для этого параметра значение NULL. Этот параметр можно использовать в Direct3D 9 для Windows Vista для совместного использования ресурсов.

Возвращаемое значение

Тип: HRESULT

Если метод выполнен успешно, возвращаемое значение будет D3D_OK. Если метод завершается ошибкой, возвращаемое значение может быть одним из следующих: D3DERR_INVALIDCALL, D3DERR_OUTOFVIDEOMEMORY E_OUTOFMEMORY.

Комментарии

Буфер вершин можно использовать с аппаратной или программной обработкой вершин. Это определяется способом создания устройства и буфера вершин.

При создании устройства CreateDevice использует флаг поведения, чтобы определить, следует ли обрабатывать вершины в оборудовании или программном обеспечении. Существует три варианта:

  • Обработайте вершины на оборудовании, задав D3DCREATE_HARDWARE_VERTEXPROCESSING.
  • Обработайте вершины в программном обеспечении, задав D3DCREATE_SOFTWARE_VERTEXPROCESSING.
  • Обработайте вершины в оборудовании или программном обеспечении, задав D3DCREATE_MIXED_VERTEXPROCESSING.
Устройствам в смешанном режиме может потребоваться переключение между программной и аппаратной обработкой (с помощью IDirect3DDevice9::SetSoftwareVertexProcessing) после создания устройства.

При создании буфера вершин CreateVertexBuffer использует параметр usage, чтобы решить, следует ли обрабатывать вершины в аппаратном или программном обеспечении.

  • Если CreateDevice использует D3DCREATE_HARDWARE_VERTEXPROCESSING, CreateVertexBuffer должен использовать 0.
  • Если CreateDevice использует D3DCREATE_SOFTWARE_VERTEXPROCESSING, CreateVertexBuffer должен использовать значение 0 или D3DUSAGE_SOFTWAREPROCESSING. Для любого из значений вершины будут обрабатываться в программном обеспечении.
  • Если CreateDevice использует D3DCREATE_MIXED_VERTEXPROCESSING, CreateVertexBuffer может использовать значение 0 или D3DUSAGE_SOFTWAREPROCESSING.
Чтобы использовать буфер вершин с устройством смешанного режима, создайте один буфер вершин, который можно использовать как для аппаратной, так и для программной обработки. Используйте IDirect3DDevice9::SetStreamSource , чтобы задать текущий буфер вершин, и при необходимости используйте IDirect3Device9::SetRenderState, чтобы изменить поведение устройства на соответствие. Рекомендуется, чтобы использование буфера вершин соответствовало поведению устройства. Обратите внимание, что буфер вершин, созданный для программной обработки, не может находиться в видеопамяти.

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

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

Буферы, не относящиеся к FVF, можно использовать для чередовки данных во время отрисовки с несколькими проходами или многотекстовой отрисовки за один проход. Для этого один буфер содержит геометрические данные, а другие — координаты текстуры для каждой отрисовки. При отрисовке буфер, содержащий геометрические данные, чередуется с каждым буфером, содержащим координаты текстуры. Если бы вместо этого использовались буферы FVF, каждый из них должен содержать идентичные геометрические данные в дополнение к данным координат текстуры, характерным для каждой отрисовки текстуры. Это приведет к превышению скорости или нехватке памяти в зависимости от используемой стратегии. Дополнительные сведения о координатах текстуры см. в разделе Координаты текстуры (Direct3D 9).

Требования

Требование Значение
Целевая платформа Windows
Header d3d9helper.h (включая D3D9.h)
Библиотека D3D9.lib

См. также раздел

IDirect3DDevice9

IDirect3DDevice9::P rocessVertices

IDirect3DVertexBuffer9::GetDesc

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