共用方式為


IDirect3DDevice9::CreateVertexBuffer 方法 (d3d9.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 的組合,此使用規範描述此緩衝區中頂點的頂點格式。 If this parameter is set to a valid FVF code, the created vertex buffer is an FVF vertex buffer (see Remarks). 否則,如果此參數設定為零,頂點緩衝區是非 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
標頭 d3d9.h (包含 D3D9.h)
程式庫 D3D9.lib

另請參閱

IDirect3DDevice9

IDirect3DDevice9::P rocessVertices

IDirect3DVertexBuffer9::GetDesc

(Direct3D 9) 頂點緩衝區