D3DPOOL列舉
定義保留資源緩衝區的記憶體類別。
typedef enum D3DPOOL {
D3DPOOL_DEFAULT = 0,
D3DPOOL_MANAGED = 1,
D3DPOOL_SYSTEMMEM = 2,
D3DPOOL_SCRATCH = 3,
D3DPOOL_FORCE_DWORD = 0x7fffffff
} D3DPOOL, *LPD3DPOOL;
-
D3DPOOL_DEFAULT
-
資源會放在記憶體集區中,最適合指定資源所要求的使用量集合。 這通常是視訊記憶體,包括本機視訊記憶體和 AGP 記憶體。 D3DPOOL_DEFAULT集區與D3DPOOL_MANAGED和D3DPOOL_SYSTEMMEM分開,並指定資源會放在裝置存取的慣用記憶體中。 請注意,D3DPOOL_DEFAULT永遠不會指出D3DPOOL_MANAGED或D3DPOOL_SYSTEMMEM應選擇為此資源的記憶體集區類型。 除非這些紋理是動態紋理,或是私用的 FOURCC 驅動程式格式,否則無法鎖定放置在D3DPOOL_DEFAULT集區中的紋理。 若要存取可解除鎖定的紋理,您必須使用 IDirect3DDevice9::UpdateSurface、 IDirect3DDevice9::UpdateTexture、 IDirect3DDevice9::GetFrontBufferData和 IDirect3DDevice9::GetRenderTargetData等函式。 D3DPOOL_MANAGED可能是比大部分應用程式D3DPOOL_DEFAULT更好的選擇。 請注意,在 Direct3D 執行時間未知的驅動程式專屬像素格式中建立的某些紋理可以鎖定。 另請注意,與紋理不同 - 交換鏈結回緩衝區、轉譯目標、頂點緩衝區和索引緩衝區可以鎖定。 當裝置遺失時,必須先釋放使用 D3DPOOL_DEFAULT 建立的資源,才能呼叫 IDirect3DDevice9::Reset。 如需詳細資訊,請參閱 遺失裝置 (Direct3D 9) 。
使用 D3DPOOL_DEFAULT 建立資源時,如果已認可視訊卡記憶體,則會收回受控資源以釋放足夠的記憶體以滿足要求。
-
D3DPOOL_MANAGED
-
資源會視需要自動複製到裝置可存取的記憶體。 受管理的資源是由系統記憶體所支援,而且不需要在裝置遺失時重新建立。 如需詳細資訊 ,請參閱管理資源 (Direct3D 9) 。 受控資源可以鎖定。 只會直接修改系統記憶體複本。 Direct3D 會視需要將您的變更複製到驅動程式可存取的記憶體。
Direct3D 9 與 Direct3D 9Ex 之間的差異:
D3DPOOL_MANAGED與 IDirect3DDevice9有效;不過, IDirect3DDevice9Ex無效。 -
D3DPOOL_SYSTEMMEM
-
資源會放在 Direct3D 裝置通常無法存取的記憶體中。 此記憶體配置會耗用系統 RAM,但不會減少可分頁 RAM。 當裝置遺失時,不需要重新建立這些資源。 此集區中的資源可以鎖定,而且可作為 IDirect3DDevice9::UpdateSurface 或 IDirect3DDevice9::UpdateTexture 作業的來源,用於使用 D3DPOOL_DEFAULT 建立的記憶體資源。
-
D3DPOOL_SCRATCH
-
資源會放在系統 RAM 中,而且不需要在裝置遺失時重新建立。 這些資源不會受限於裝置大小或格式限制。 因此,Direct3D 裝置無法存取這些資源,也無法設定為紋理或轉譯目標。 不過,這些資源一律可以建立、鎖定和複製。
-
D3DPOOL_FORCE_DWORD
-
強制此列舉的大小編譯為 32 位。 如果沒有這個值,某些編譯器會允許此列舉編譯成 32 位以外的大小。 不使用這個值。
所有集區類型都有效,包括:頂點緩衝區、索引緩衝區、紋理和表面。
下表指出轉譯目標集區類型的限制、深度樣板,以及動態和 Mipmap 使用方式。 x 表示相容的組合;缺少 x 表示不相容。
集區 | D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL |
---|---|---|
D3DPOOL_DEFAULT | x | x |
D3DPOOL_MANAGED | ||
D3DPOOL_SCRATCH | ||
D3DPOOL_SYSTEMMEM |
集區 | D3DUSAGE_DYNAMIC | D3DUSAGE_AUTOGENMIPMAP |
---|---|---|
D3DPOOL_DEFAULT | x | x |
D3DPOOL_MANAGED | x | |
D3DPOOL_SCRATCH | ||
D3DPOOL_SYSTEMMEM | x |
如需使用類型的詳細資訊,請參閱 D3DUSAGE。
集區不能針對 mipmap) 中包含于一個資源內的不同物件混合 (mip 層級,而且當選擇集區時,就無法變更。
應用程式應該對大部分的靜態資源使用D3DPOOL_MANAGED,因為這樣會讓應用程式不必處理遺失的裝置。 (受控資源是由 runtime 還原。) 這特別適用于 UMA) 系統的統一記憶體架構 (。 其他動態資源與D3DPOOL_MANAGED不相符。 事實上,索引緩衝區和頂點緩衝區不能與D3DUSAGE_DYNAMIC搭配使用D3DPOOL_MANAGED來建立。
針對動態紋理,有時建議使用一對視訊記憶體和系統記憶體紋理,使用 D3DPOOL_DEFAULT 配置視訊記憶體,以及使用 D3DPOOL_SYSTEMMEM 配置系統記憶體。 您可以使用鎖定方法來鎖定和修改系統記憶體紋理的位。 然後,您可以使用 IDirect3DDevice9::UpdateTexture來更新視訊記憶體紋理。
需求 | 值 |
---|---|
標頭 |
|