Verwalten von Ressourcen (Direct3D 9)

Die Ressourcenverwaltung ist der Prozess, bei dem Ressourcen aus dem Systemspeicher in einen speicherbereiten Speicher mit Geräteverfügbarkeit heraufgestuft und aus dem vom Gerät zugänglichen Speicher verworfen werden. Die Direct3D-Laufzeit verfügt über einen eigenen Verwaltungsalgorithmus, der auf einer Am wenigsten kürzlich verwendeten Prioritätstechnik basiert. Direct3D wechselt zu einer zuletzt verwendeten Prioritätstechnik, wenn erkannt wird, dass mehr Ressourcen, als im gerätezugänglichen Speicher gleichzeitig vorhanden sein können, in einem einzelnen Frame verwendet werden – zwischen IDirect3DDevice9::BeginScene- und IDirect3DDevice9::EndScene-Aufrufen.

Verwenden Sie das D3DPOOL _ DEFAULT-Flag zur Erstellungszeit, um anzugeben, dass eine Ressource im Speicherpool platziert wird, der für die für die angegebene Ressource angeforderte Nutzung am besten geeignet ist. Dies ist in der Regel Videospeicher, einschließlich des lokalen Videospeichers und des beschleunigten AGP-Speichers (Graphics Port). Ressourcen im Standardpool bleiben nicht über Übergänge zwischen dem Verloren-Status und dem Betriebszustände des Geräts erhalten. Diese Ressourcen müssen vor dem Aufrufen von reset freigegeben und dann neu erstellt werden.

Verwenden Sie das D3DPOOL _ MANAGED-Flag zum Zeitpunkt der Erstellung, um eine verwaltete Ressource anzugeben. Verwaltete Ressourcen bleiben über Übergänge zwischen dem Verloren-Status und dem Betriebszustände des Geräts erhalten. Diese Ressourcen sind sowohl im Video- als auch im Systemspeicher vorhanden. Eine verwaltete Ressource wird in den Videospeicher kopiert, wenn sie während des Renderings benötigt wird. Das Gerät kann mit einem Aufruf von IDirect3DDevice9::Resetwiederhergestellt werden, und solche Ressourcen funktionieren weiterhin normal, ohne dass sie mit Daten erneut geladen werden. Wenn das Gerät jedoch zerstört und neu erstellt werden muss, müssen alle Ressourcen neu erstellt werden.

Die Ressourcenverwaltung wird nicht für Ressourcen empfohlen, die sich mit hoher Häufigkeit ändern. Beispielsweise ändern Scheitelpunkt- und Indexpuffer, die zum Durchlaufen eines Szenendiagramms verwendet werden, bei jedem Frame, der nur die für den Benutzer sichtbare Geometrie rendert, jeden Frame. Da verwaltete Ressourcen durch Systemspeicher gesichert werden, müssen die konstanten Änderungen im Systemspeicher aktualisiert werden, was zu einer schwerwiegenden Leistungsbeeinträchtigung führen kann. Für dieses spezielle Szenario sollte D3DPOOL _ DEFAULT zusammen mit D3DUSAGE _ DYNAMIC verwendet werden.

Ein weiteres Beispiel, für das die Ressourcenverwaltung nicht empfohlen wird (und von der Laufzeit explizit nicht zugelassen wird), ist die Verwaltung einer Textur, die mit D3DUSAGE _ RENDERTARGETerstellt wurde. Wenn der von Renderzielen verwendete Arbeitsspeicher von der Laufzeit verwaltet wird, muss der Inhalt während des Renderings ständig in den Systemspeicher kopiert werden, was zu großen Leistungseinbußen führt. Aus diesem Grund müssen Renderziele im Standardpool erstellt werden. Wenn CPU-Zugriff auf die in einem Renderziel enthaltenen Daten erforderlich ist, müssen die Daten in eine Ressource kopiert werden, die in D3DPOOL _ SYSTEMMEM mit IDirect3DDevice9::UpdateTextureoder IDirect3DDevice9::UpdateSurface erstellt wurde.

Weitere Informationen zum Verlustzustand eines Geräts finden Sie unter Verlorene Geräte (Direct3D 9).

Direct3D-Ressourcen