Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Zarządzanie zasobami (Direct3D 9)

Zarządzanie zasobami to proces, w którym zasoby są promowane z magazynu pamięci systemowej do magazynu dostępnego dla urządzenia i odrzucane z magazynu dostępnego dla urządzenia. Czas wykonywania Direct3D ma własny algorytm zarządzania oparty na technice priorytetyzowania najmniej ostatnio używanych elementów. Direct3D przełącza się na technikę priorytetu ostatnio używaną, gdy wykryje, że podczas jednej klatki używane jest więcej zasobów, niż może współistnieć w pamięci dostępnej dla urządzenia — pomiędzy wywołaniami IDirect3DDevice9::BeginScene i IDirect3DDevice9::EndScene.

Użyj flagi D3DPOOL_DEFAULT podczas tworzenia, aby określić, że zasób znajduje się w puli pamięci najbardziej odpowiedniej dla zestawu zastosowań żądanych dla danego zasobu. Zwykle jest to pamięć wideo, w tym lokalna pamięć wideo i przyspieszona pamięć portu graficznego (AGP). Zasoby w puli domyślnej nie są utrwalane podczas przejść między stanem utraconym a operacyjnym urządzenia. Te zasoby należy zwolnić przed wywołaniem resetowania, a następnie należy je ponownie utworzyć.

Użyj flagi D3DPOOL_MANAGED podczas tworzenia, aby określić zasób zarządzany. Zasoby zarządzane są utrwalane przez przejścia między stanami utraconymi i operacyjnymi urządzenia. Te zasoby istnieją zarówno w pamięci wideo, jak i systemowej. Zasób zarządzany zostanie skopiowany do pamięci wideo, gdy będzie potrzebny podczas renderowania. Urządzenie można przywrócić za pomocą wywołania IDirect3DDevice9::Reset, a takie zasoby nadal działają normalnie bez ponownego ładowania danych. Jeśli jednak urządzenie musi zostać zniszczone i utworzone ponownie, wszystkie zasoby muszą zostać ponownie utworzone.

Zarządzanie zasobami nie jest zalecane w przypadku zasobów, które zmieniają się z wysoką częstotliwością. Na przykład bufory wierzchołków i indeksów są używane, aby przechodzić przez graf sceny podczas renderowania każdej ramki, zmieniając się, aby uwzględnić tylko geometrię widoczną dla użytkownika w każdej ramce. Ponieważ zasoby zarządzane są wspierane przez pamięć systemową, stałe zmiany muszą zostać zaktualizowane w pamięci systemowej, co może spowodować poważne obniżenie wydajności. W tym konkretnym scenariuszu należy użyć D3DPOOL_DEFAULT wraz z D3DUSAGE_DYNAMIC.

Innym przykładem, dla którego zarządzanie zasobami nie jest zalecane (i jawnie niedozwolone przez środowisko uruchomieniowe) jest zarządzanie teksturą utworzoną za pomocą D3DUSAGE_RENDERTARGET. Jeśli pamięć używana przez obiekty docelowe renderowania była zarządzana przez środowisko uruchomieniowe, zawartość musiałaby być stale kopiowana do pamięci systemowej podczas renderowania, co powoduje duże kary za wydajność. Z tego powodu obiekty docelowe renderowania muszą zostać utworzone w puli domyślnej. Jeśli wymagany jest dostęp procesora CPU do danych zawartych w obiekcie docelowym renderowania, dane muszą zostać skopiowane do zasobu utworzonego w D3DPOOL_SYSTEMMEM za pomocą IDirect3DDevice9::UpdateTexturelub IDirect3DDevice9::UpdateSurface

Aby uzyskać więcej informacji na temat stanu zgubienia urządzenia, zobacz Lost Devices (Direct3D 9).

Zasoby Direct3D