enumerazione D3DPOOL
Definisce la classe di memoria che contiene i buffer per una risorsa.
Sintassi
typedef enum D3DPOOL {
D3DPOOL_DEFAULT = 0,
D3DPOOL_MANAGED = 1,
D3DPOOL_SYSTEMMEM = 2,
D3DPOOL_SCRATCH = 3,
D3DPOOL_FORCE_DWORD = 0x7fffffff
} D3DPOOL, *LPD3DPOOL;
Costanti
-
D3DPOOL_DEFAULT
-
Le risorse vengono inserite nel pool di memoria più appropriate per il set di utilizzi richiesti per la risorsa specificata. Questa è in genere la memoria video, inclusa la memoria video locale e la memoria AGP. Il pool di D3DPOOL_DEFAULT è separato da D3DPOOL_MANAGED e D3DPOOL_SYSTEMMEM e specifica che la risorsa viene inserita nella memoria preferita per l'accesso al dispositivo. Si noti che D3DPOOL_DEFAULT non indica mai che è necessario scegliere D3DPOOL_MANAGED o D3DPOOL_SYSTEMMEM come tipo di pool di memoria per questa risorsa. Le trame inserite nel pool di D3DPOOL_DEFAULT non possono essere bloccate a meno che non siano trame dinamiche o che siano private, FOURCC, formati di driver. Per accedere alle trame sbloccabili, è necessario usare funzioni come IDirect3DDevice9::UpdateSurface, IDirect3DDevice9::UpdateTexture, IDirect3DDevice9::GetFrontBufferData e IDirect3DDevice9::GetRenderTargetData. D3DPOOL_MANAGED è probabilmente una scelta migliore di D3DPOOL_DEFAULT per la maggior parte delle applicazioni. Si noti che alcune trame create in formati pixel proprietari del driver, sconosciuti al runtime Direct3D, possono essere bloccate. Si noti anche che, a differenza delle trame, è possibile bloccare i buffer back della catena, le destinazioni di rendering, i vertex buffer e i buffer di indice. Quando un dispositivo viene perso, le risorse create con D3DPOOL_DEFAULT devono essere rilasciate prima di chiamare IDirect3DDevice9::Reset. Per altre informazioni, vedere Dispositivi persi (Direct3D 9).For more information, see Lost Devices (Direct3D 9).
Quando si creano risorse con D3DPOOL_DEFAULT, se è già stato eseguito il commit della memoria della scheda video, le risorse gestite verranno rimosse per liberare memoria sufficiente per soddisfare la richiesta.
-
D3DPOOL_MANAGED
-
Le risorse vengono copiate automaticamente nella memoria accessibile dal dispositivo in base alle esigenze. Le risorse gestite sono supportate dalla memoria di sistema e non devono essere ricreate quando un dispositivo viene perso. Per altre informazioni, vedere Gestione delle risorse (Direct3D 9). Le risorse gestite possono essere bloccate. Solo la copia della memoria di sistema viene modificata direttamente. Direct3D copia le modifiche alla memoria accessibile dal driver in base alle esigenze.
Differenze tra Direct3D 9 e Direct3D 9Ex:
D3DPOOL_MANAGED è valido con IDirect3DDevice9; tuttavia, non è valido con IDirect3DDevice9Ex. -
D3DPOOL_SYSTEMMEM
-
Le risorse vengono inserite in memoria che in genere non sono accessibili dal dispositivo Direct3D. Questa allocazione di memoria utilizza la RAM di sistema, ma non riduce la RAM pagable. Queste risorse non devono essere ricreate quando un dispositivo viene perso. Le risorse in questo pool possono essere bloccate e possono essere usate come origine per un'operazione IDirect3DDevice9::UpdateSurface o IDirect3DDevice9::UpdateTexture in una risorsa di memoria creata con D3DPOOL_DEFAULT.
-
D3DPOOL_SCRATCH
-
Le risorse vengono inserite nella RAM di sistema e non devono essere ricreate quando un dispositivo viene perso. Queste risorse non sono vincolate dalle restrizioni relative alle dimensioni o al formato del dispositivo. Per questo motivo, queste risorse non possono essere accessibili dal dispositivo Direct3D né impostate come trame o destinazioni di rendering. Tuttavia, queste risorse possono essere sempre create, bloccate e copiate.
-
D3DPOOL_FORCE_DWORD
-
Forza la compilazione in 32 bit di questa enumerazione. Senza questo valore, alcuni compilatori consentono la compilazione di questa enumerazione in dimensioni diverse da 32 bit. Questo valore non viene utilizzato.
Commenti
Tutti i tipi di pool sono validi con tutte le risorse, inclusi i vertex buffer, i buffer di indice, le trame e le superfici.
Le tabelle seguenti indicano restrizioni sui tipi di pool per le destinazioni di rendering, gli stencil di profondità e gli utilizzi dinamici e mipmap. Una x indica una combinazione compatibile; mancanza di una x indica incompatibilità.
Pool | D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL |
---|---|---|
D3DPOOL_DEFAULT | x | x |
D3DPOOL_MANAGED | ||
D3DPOOL_SCRATCH | ||
D3DPOOL_SYSTEMMEM |
Pool | D3DUSAGE_DYNAMIC | D3DUSAGE_AUTOGENMIPMAP |
---|---|---|
D3DPOOL_DEFAULT | x | x |
D3DPOOL_MANAGED | x | |
D3DPOOL_SCRATCH | ||
D3DPOOL_SYSTEMMEM | x |
Per altre informazioni sui tipi di utilizzo, vedere D3DUSAGE.
I pool non possono essere combinati per oggetti diversi contenuti all'interno di una risorsa (livelli mip in un mipmap) e, quando si seleziona un pool, non può essere modificato.
Le applicazioni devono usare D3DPOOL_MANAGED per la maggior parte delle risorse statiche perché in questo modo l'applicazione evita la necessità di gestire i dispositivi persi. Le risorse gestite vengono ripristinate dal runtime. Ciò è particolarmente utile per i sistemi UMA (Unified Memory Architecture). Altre risorse dinamiche non corrispondono a D3DPOOL_MANAGED. Infatti, i buffer di indice e i vertex buffer non possono essere creati usando D3DPOOL_MANAGED insieme a D3DUSAGE_DYNAMIC.
Per le trame dinamiche, a volte è consigliabile usare una coppia di trame di memoria video e memoria di sistema, allocando la memoria video usando D3DPOOL_DEFAULT e la memoria di sistema usando D3DPOOL_SYSTEMMEM. È possibile bloccare e modificare i bit della trama di memoria di sistema usando un metodo di blocco. È quindi possibile aggiornare la trama della memoria video usando IDirect3DDevice9::UpdateTexture.
Requisiti
Requisito | Valore |
---|---|
Intestazione |
|
Vedi anche