D3DPOOL Enumeration
Definiert die Speicherklasse, die die Puffer für eine Ressource enthält.
Syntax
typedef enum D3DPOOL {
D3DPOOL_DEFAULT = 0,
D3DPOOL_MANAGED = 1,
D3DPOOL_SYSTEMMEM = 2,
D3DPOOL_SCRATCH = 3,
D3DPOOL_FORCE_DWORD = 0x7fffffff
} D3DPOOL, *LPD3DPOOL;
Konstanten
-
D3DPOOL_DEFAULT
-
Ressourcen werden im Speicherpool platziert, der für die für die jeweilige Ressource angeforderte Menge von Verwendungen am besten geeignet ist. Dies ist in der Regel Videospeicher, einschließlich des lokalen Videospeichers und des AGP-Arbeitsspeichers. Der D3DPOOL_DEFAULT Pool ist von D3DPOOL_MANAGED und D3DPOOL_SYSTEMMEM getrennt und gibt an, dass die Ressource im bevorzugten Speicher für den Gerätezugriff platziert wird. Beachten Sie, dass D3DPOOL_DEFAULT nie angibt, dass entweder D3DPOOL_MANAGED oder D3DPOOL_SYSTEMMEM als Speicherpooltyp für diese Ressource ausgewählt werden soll. Texturen, die im D3DPOOL_DEFAULT-Pool platziert werden, können nur gesperrt werden, wenn es sich um dynamische Texturen handelt oder es sich um private, FOURCC-Treiberformate handelt. Für den Zugriff auf entsperrbare Texturen müssen Sie Funktionen wie IDirect3DDevice9::UpdateSurface, IDirect3DDevice9::UpdateTexture, IDirect3DDevice9::GetFrontBufferData und IDirect3DDevice9::GetRenderTargetData verwenden. D3DPOOL_MANAGED ist für die meisten Anwendungen wahrscheinlich eine bessere Wahl als D3DPOOL_DEFAULT. Beachten Sie, dass einige Texturen, die in treibereigenen Pixelformaten erstellt wurden und der Direct3D-Runtime unbekannt sind, gesperrt werden können. Beachten Sie außerdem, dass - im Gegensatz zu Texturen - Swapchain-Back-Puffer, Renderziele, Vertexpuffer und Indexpuffer gesperrt werden können. Wenn ein Gerät verloren geht, müssen ressourcen, die mit D3DPOOL_DEFAULT erstellt wurden, vor dem Aufrufen von IDirect3DDevice9::Reset freigegeben werden. Weitere Informationen finden Sie unter Verlorene Geräte (Direct3D 9).
Wenn beim Erstellen von Ressourcen mit D3DPOOL_DEFAULT bereits ein Commit für video Karte Arbeitsspeicher erfolgt ist, werden verwaltete Ressourcen entfernt, um genügend Arbeitsspeicher freizugeben, um die Anforderung zu erfüllen.
-
D3DPOOL_MANAGED
-
Ressourcen werden bei Bedarf automatisch in den speichergeschützten Speicher kopiert. Verwaltete Ressourcen werden vom Systemspeicher unterstützt und müssen nicht neu erstellt werden, wenn ein Gerät verloren geht. Weitere Informationen finden Sie unter Verwalten von Ressourcen (Direct3D 9). Verwaltete Ressourcen können gesperrt werden. Nur die Systemspeicherkopie wird direkt geändert. Direct3D kopiert Ihre Änderungen nach Bedarf in den vom Treiber zugänglichen Arbeitsspeicher.
Unterschiede zwischen Direct3D 9 und Direct3D 9Ex:
D3DPOOL_MANAGED ist mit IDirect3DDevice9 gültig; Dies ist jedoch mit IDirect3DDevice9Ex ungültig. -
D3DPOOL_SYSTEMMEM
-
Ressourcen werden im Arbeitsspeicher platziert, auf den normalerweise das Direct3D-Gerät nicht zugreifen kann. Diese Speicherbelegung verbraucht den System-RAM, reduziert aber nicht den auslagerungsfähigen RAM. Diese Ressourcen müssen nicht neu erstellt werden, wenn ein Gerät verloren geht. Ressourcen in diesem Pool können gesperrt und als Quelle für einen IDirect3DDevice9::UpdateSurface - oder IDirect3DDevice9::UpdateTexture-Vorgang für eine Mit D3DPOOL_DEFAULT erstellte Speicherressource verwendet werden.
-
D3DPOOL_SCRATCH
-
Ressourcen werden im System-RAM platziert und müssen nicht neu erstellt werden, wenn ein Gerät verloren geht. Diese Ressourcen sind nicht an Gerätegröße- oder Formatbeschränkungen gebunden. Aus diesem Fall kann das Direct3D-Gerät nicht auf diese Ressourcen zugreifen und auch nicht als Texturen oder Renderziele festgelegt werden. Diese Ressourcen können jedoch immer erstellt, gesperrt und kopiert werden.
-
D3DPOOL_FORCE_DWORD
-
Erzwingt, dass diese Enumeration in eine Größe von 32 Bits kompiliert wird. Ohne diesen Wert erlauben einige Compiler es dieser Enumeration, eine andere Größe als 32 Bits zu kompilieren. Dieser Wert wird nicht verwendet.
Hinweise
Alle Pooltypen sind für alle Ressourcen gültig, einschließlich: Vertexpuffer, Indexpuffer, Texturen und Oberflächen.
In den folgenden Tabellen sind Einschränkungen für Pooltypen für Renderziele, Tiefenschablonen sowie dynamische und mipmap-Verwendungen aufgeführt. Ein x gibt eine kompatible Kombination an. Das Fehlen eines x deutet auf Inkompatibilität hin.
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 |
Weitere Informationen zu Nutzungstypen finden Sie unter D3DUSAGE.
Pools können nicht für verschiedene Objekte gemischt werden, die in einer Ressource enthalten sind (MIP-Ebenen in einer mipmap), und wenn ein Pool ausgewählt wird, kann er nicht geändert werden.
Anwendungen sollten D3DPOOL_MANAGED für die meisten statischen Ressourcen verwenden, da die Anwendung dadurch nicht mit verlorenen Geräten umgehen muss. (Verwaltete Ressourcen werden von der Runtime wiederhergestellt.) Dies ist insbesondere für UMA-Systeme (Unified Memory Architecture) von Vorteil. Andere dynamische Ressourcen passen nicht zu D3DPOOL_MANAGED. Indexpuffer und Vertexpuffer können nicht mit D3DPOOL_MANAGED zusammen mit D3DUSAGE_DYNAMIC erstellt werden.
Für dynamische Texturen ist es manchmal wünschenswert, ein Paar von Videospeicher- und Systemspeichertexturen zu verwenden, wobei der Videospeicher mithilfe von D3DPOOL_DEFAULT und der Systemspeicher mithilfe von D3DPOOL_SYSTEMMEM zugewiesen wird. Sie können die Bits der Systemspeichertextur mit einer Sperrmethode sperren und ändern. Anschließend können Sie die Videospeichertextur mithilfe von IDirect3DDevice9::UpdateTexture aktualisieren.
Anforderungen
Anforderung | Wert |
---|---|
Header |
|
Siehe auch