頂點緩衝區 (Direct3D 9)
頂點緩衝區,以 IDirect3DVertexBuffer9 介面表示,是包含頂點數據的記憶體緩衝區。 頂點緩衝區可以包含任何頂點類型 -- 轉換或未轉換,lit 或 unlit - 可以透過使用 IDirect3DDevice9 介面中的轉譯方法來轉譯。 您可以處理頂點緩衝區中的頂點,以執行轉換、光源或產生裁剪旗標等作業。 一律會執行轉換。
頂點緩衝區的彈性使其成為重複使用已轉換幾何的理想暫存點。 您可以建立單一頂點緩衝區、轉換、光線和裁剪其中頂點,並視需要在場景中轉譯模型多次,而不需重新轉換,即使交錯的轉譯狀態變更也一樣。 當轉譯使用多個紋理的模型時,這非常有用:幾何只會轉換一次,然後視需要轉譯其部分,與必要的紋理變更交錯。 處理頂點之後所做的轉譯狀態變更會在下次處理頂點時生效。
描述
頂點緩衝區的功能會加以描述:如果它只能存在於系統記憶體中,則為 ,如果它只用於寫入作業,以及它可以包含的頂點類型和數目。 所有這些特徵都保存在 D3DVERTEXBUFFER_DESC 結構中。
Format 成員設定為 D3DFMT_VERTEXDATA,表示這是頂點緩衝區。 Type 會識別頂點緩衝區的資源類型。 Usage 結構成員包含一般功能旗標。 D3DUSAGE_SOFTWAREPROCESSING旗標表示頂點緩衝區要與軟體頂點處理搭配使用。 Usage 中D3DUSAGE_WRITEONLY旗標的存在表示頂點緩衝區內存僅用於寫入作業。 這可釋放驅動程式將頂點數據放在最佳記憶體位置,以啟用快速處理和轉譯。 如果未使用D3DUSAGE_WRITEONLY旗標,則驅動程式不太可能將數據放在讀取作業效率不佳的位置。 這會犧牲一些處理和轉譯速度。 如果未指定此旗標,則會假設應用程式對頂點緩衝區內的數據執行讀取和寫入作業。
集區會指定配置給頂點緩衝區的記憶體類別。 D3DPOOL_SYSTEMMEM旗標表示系統在系統記憶體中建立了頂點緩衝區。
Size 成員會儲存頂點緩衝區數據的大小,以位元組為單位。 FVF 成員包含 D3DFVF 的組合,可識別緩衝區所包含的頂點類型。
記憶體集區和使用量
您可以使用 IDirect3DDevice9::CreateVertexBuffer 方法來建立頂點緩衝區,此方法會採用集區(記憶體類別)和使用方式參數。 IDirect3DDevice9::CreateVertexBuffer 也可以使用指定的 FVF 程式代碼來建立,以用於固定函式頂點處理,或做為進程頂點的輸出。 如需詳細資訊,請參閱 FVF 頂點緩衝區 (Direct3D 9)。
當該裝置啟用混合模式或軟體頂點處理(D3DCREATE_MIXED_VERTEXPROCESSING/D3DCREATE_SOFTWARE_VERTEXPROCESSING)時,可以設定D3DUSAGE_SOFTWAREPROCESSING旗標。 D3DUSAGE_SOFTWAREPROCESSING必須設定緩衝區,才能與混合模式中的軟體頂點處理搭配使用,但在混合模式中使用硬體頂點處理時,不應該設定最佳效能。(D3DCREATE_HARDWARE_VERTEXPROCESSING)。 不過,當單一緩衝區同時用於硬體和軟體頂點處理時,設定D3DUSAGE_SOFTWAREPROCESSING是唯一的選項。 D3DUSAGE_SOFTWAREPROCESSING也允許混合使用軟體裝置。
即使頂點處理是在硬體中完成,也可以藉由指定 D3DPOOL_SYSTEMMEM,強制將頂點和索引緩衝區強制進入系統記憶體。 當驅動程式將這些緩衝區放入 AGP 記憶體時,這是避免大量頁面鎖定記憶體的方法。
本節介紹在 Direct3D 應用程式中瞭解和使用頂點緩衝區所需的概念。 資訊分成下列各節。
- 建立頂點緩衝區 (Direct3D 9)
- 存取頂點緩衝區的內容 (Direct3D 9)
- 從頂點緩衝區 轉譯 (Direct3D 9)
- FVF 頂點緩衝區 (Direct3D 9)
- 固定函式頂點處理 (Direct3D 9)
- 可程式化頂點處理 (Direct3D 9)
- 裝置類型和頂點處理需求 (Direct3D 9)
相關主題