自動紋理管理

d3d中的自動紋理管理

 

   紋理管理是在給定的時間確定哪些紋理需要渲染並保證那些紋理被加載到顯存的過程。紋理管理算法可能非常複雜,但是它基本上都會包含下面三個主要步驟:

1. 跟蹤可以獲取到的顯存的總量;

2.計算哪些紋理是渲染所必須的,哪些不是;

3.確定哪些顯存中的紋理資源需要被另外的紋理圖片替換;

 

    d3d實現了系統支持的紋理管理,保證了紋理加載的性能很快。d3d管理的紋理資源被叫做託管紋理。紋理管理通過給每個紋理加上時間戳即標記該紋理上次使用的時間,來管理紋理。它使用的是最近最少使用的算法來確定哪個紋理應該被刪除。如果兩個紋理的時間戳相同,則比較兩個紋理的優先級。

 

    在創建紋理的時候使用D3DPOOL_MANAGEED標記,就可以創建託管紋理。不允許在創建託管紋理的時候進行指定紋理存儲的位置,比如使用D3DPOOL_DEAFAULT和D3DPOOL_SYSTEMMEM標記。在創建完成後,可以調用SetTexture接口來制定紋理。

 

    可以通過IDirect3DResource9::SetPriority接口來爲紋理表面來設置優先級。

 

     d3d將自動地把託管紋理上傳到顯存中來顯示。對應用程序來說,託管紋理存儲在什麼位置是透明的,也就是不需要知道的信息。如果你的 應用程序需要的紋理內存大於顯存則,d3d將會自動把老紋理刪除。如果使用一個已經被刪除的紋理,則系統將會再次把原始的系統內存中的紋理加載到顯存中。雖然重新加載紋理是必須的,但是它會降低應用程序的性能。

 

     可以動態的修改系統內存中的紋理,通過調用updating 或 locking 資源。當系統在一個update完成之後或當表面被解鎖時檢測到一個dirtysurface,紋理管理會自動的更新顯存內容。當然這一個過程也會降低性能。

 

     當進入一個新的遊戲畫面時,可能需要更新所有的託管紋理,可以通過調用IDirect3DDevice9::EvictManagedResources接口來實現。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章