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 方法來建立頂點緩衝區,此方法會採用集區 (記憶體類別) 和使用方式參數。 您也可以使用指定的 FVF 程式碼來建立IDirect3DDevice9::CreateVertexBuffer,以用於固定函式頂點處理,或做為進程頂點的輸出。 如需詳細資訊,請參閱 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 資源

從頂點和索引緩衝區轉譯 (Direct3D 9)

Direct3D 9 (索引緩衝區)