共用方式為


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 頂點緩衝區,Length 必須夠大,才能包含至少一個頂點,但不需要是頂點大小的倍數。 長度不會針對非 FVF 緩衝區進行驗證。 請參閱<備註>。

[in] Usage

類型: DWORD

使用量可以是 0,表示沒有使用值。 不過,如果需要使用方式,請使用一或多個 D3DUSAGE 常數的組合。 最好讓 CreateVertexBuffer 中的 usage 參數與 IDirect3D9::CreateDevice 中的行為旗標相符。 如需詳細資訊,請參閱<備註>。

[in] FVF

類型: DWORD

D3DFVF 的組合,此使用規範描述此緩衝區中頂點的頂點格式。 如果此參數設定為有效的 FVF 程式代碼,則建立的頂點緩衝區是 FVF 頂點緩衝區, (請參閱備註) 。 否則,如果此參數設定為零,頂點緩衝區是非 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 來設定目前的頂點緩衝區,並使用 IDirect3DDevice9::SetRenderState 來變更裝置行為以符合。 建議頂點緩衝區使用量符合裝置行為。 請注意,為軟體處理建立的頂點緩衝區不能位於視訊記憶體中。

IDirect3DDevice9 介面支援使用儲存在頂點緩衝區物件中的頂點數據來轉譯基本類型。 頂點緩衝區是從IDirect3DDevice9建立,而且只能與建立它們的IDirect3DDevice9物件搭配使用。

當設定為非零值時,必須是有效的 FVF 程式代碼時,FVF 參數會指出緩衝區內容是以 FVF 程式代碼來描述。 使用 FVF 程式代碼建立的頂點緩衝區稱為 FVF 頂點緩衝區。 如需詳細資訊,請參閱 FVF 頂點緩衝區 (Direct3D 9)

非 FVF 緩衝區可用來在單一傳遞中交錯多路轉譯或多文字轉譯期間進行數據交錯。 若要這樣做,其中一個緩衝區包含幾何數據,而其他緩衝區則包含要呈現之每個紋理的紋理座標。 轉譯時,包含幾何數據的緩衝區會與包含紋理座標的每個緩衝區交錯。 如果改用 FVF 緩衝區,除了轉譯每個紋理特有的紋理座標數據之外,每個緩衝區都需要包含相同的幾何數據。 這會導致速度或記憶體負面影響,視所使用的策略而定。 如需紋理座標的詳細資訊,請參閱 紋理座標 (Direct3D 9)

規格需求

需求
目標平台 Windows
標頭 d3d9helper.h (包含 D3D9.h)
程式庫 D3D9.lib

另請參閱

IDirect3DDevice9

IDirect3DDevice9::P rocessVertices

IDirect3DVertexBuffer9::GetDesc

(Direct3D 9) 頂點緩衝區