管理資源 (Direct3D 9)
資源管理是資源從系統記憶體儲存體升級至可存取裝置的儲存體,並從裝置可存取的儲存體捨棄的程式。 Direct3D 執行時間有自己的管理演算法,以最近使用的優先順序技術為基礎。 當 Direct3D 在偵測到比裝置存取記憶體中可以共存的資源多於單一框架中使用時,Direct3D 會切換至最近使用的優先順序技術, 在 IDirect3DDevice9::BeginScene 和 IDirect3DDevice9::EndScene 呼叫之間。
在建立時使用 D3DPOOL_DEFAULT 旗標,指定資源放在記憶體集區中,最適合指定資源所要求的使用量集。 這通常是視訊記憶體,包括本機視訊記憶體和高速圖形連接埠 (AGP) 記憶體。 預設集區中的資源不會透過裝置遺失和操作狀態之間的轉換來保存。 這些資源必須先釋放,才能呼叫重設,然後必須重新建立。
在建立時使用 D3DPOOL_MANAGED 旗標來指定受控資源。 受控資源會透過裝置遺失和操作狀態之間的轉換持續保存。 這些資源同時存在於視訊和系統記憶體中。 轉譯期間需要受控資源時,將會複製到視訊記憶體中。 您可以透過呼叫 IDirect3DDevice9::Reset來還原裝置,而這類資源會繼續正常運作,而不會重載資料。 不過,如果裝置必須終結並重新建立,則必須重新建立所有資源。
不建議使用高頻率變更的資源使用資源管理。 例如,用來周遊場景圖形的頂點和索引緩衝區,每個畫面只呈現使用者可看見的幾何變更每個畫面格。 由於 Managed 資源受到系統記憶體支援,因此必須在系統記憶體中更新常數變更,這可能會導致效能嚴重降低。 針對此特定案例,應該使用 D3DPOOL_DEFAULT 以及 D3DUSAGE_DYNAMIC 。
不建議使用資源管理的另一個範例 (,而且執行時間) 明確不允許管理使用 D3DUSAGE_RENDERTARGET建立的紋理。 如果轉譯目標所使用的記憶體是由執行時間所管理,則其內容必須在轉譯期間持續複製到系統記憶體,因而造成大量的效能損失。 因此,必須在預設集區中建立轉譯目標。 如果需要轉譯目標中包含的資料的 CPU 存取,則必須使用IDirect3DDevice9::UpdateTexture或IDirect3DDevice9::UpdateSurface,將資料複製到D3DPOOL_SYSTEMMEM中建立的資源
如需裝置遺失狀態的詳細資訊,請參閱 遺失裝置 (Direct3D 9) 。
相關主題