D3DPOOL列舉

定義保留資源緩衝區的記憶體類別。

Syntax

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::UpdateSurfaceIDirect3DDevice9::UpdateTextureIDirect3DDevice9::GetFrontBufferDataIDirect3DDevice9::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::UpdateSurfaceIDirect3DDevice9::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來更新視訊記憶體紋理。

規格需求

需求
標頭
D3D9Types.h

另請參閱

Direct3D 列舉

D3DUSAGE

IDirect3DDevice9::CreateCubeTexture

IDirect3DDevice9::CreateIndexBuffer

IDirect3DDevice9::CreateTexture

IDirect3DDevice9::CreateVolumeTexture

IDirect3DDevice9::CreateVertexBuffer

D3DINDEXBUFFER_DESC

D3DSURFACE_DESC

D3DVERTEXBUFFER_DESC

D3DVOLUME_DESC