復雜的游戲會運用大量紋理和3D網格等資源,但是其中的大多數并不需要總是置于顯存中供GPU使用房蝉。例如微渠,讓我們來構想這樣一個場景資源:在野外森林中有一個巨大的洞穴。在玩家進入洞穴前逞盆,繪制畫面并不會用到與洞穴相關的資源;當玩家進入洞穴后云芦,又不再需要森林數據資源。
在Direct3D 12中桌肴,應用程序通過控制資源的在顯存中的去留琉历,主動管理資源的駐留情況(即residency。無論資源是否已位于顯存中旗笔,都可以對其管理,都可對其進行管理蝇恶。在Direct3D 11中則有系統自動管理)。該技術的基本思路為使用程序占用最小的顯存空間的猛。這是因為顯存的空間有限想虎,很可能不足以容下整個游戲的所有資源,或者用戶還有運行中的程序也在同時使用顯存岂却。這里給出一條與性能相關的提示:程序應當避免在短時間內于顯存中交換進出相同的資源,這會引起過高的開銷躏哩。最理想的情況時,所清出的資源在短時間內不會再次使用筋栋。游戲關卡或游戲場景的切換是關于常駐資源的好例子正驻。
一般來說,資源在創(chuàng)建時就會駐留再顯存中姑曙,而當它被銷毀時則清出。但是通過下面的方法伤靠,我們就可以自己來控制資源的駐留。
HRESULT ID3D12Device::MakeResident(
UINT NumObjects,
ID3D12Pageable* const* ppObjects);
HRESULT ID3D12Device::Evict(
UINT NUmObjects,
ID3D12Pageable* const* ppObjects);
這兩種方法的第二個參數都是ID3D12Pageable 資源數據焕梅,第一個參數則表述該數組中資源數量卦洽。