POOL

說一下內存池的問題,一般有這三種:D3DPOOL_DEFAULT   D3DPOOL_MANAGEDD3DPOOL_SYSTEMMEMD3DPOOL_DEFAULT   在顯存中創建對象,這裏的顯存包括真正的顯存和AGP內存。D3DPOOL_MANAGED   在顯存中創建對象,同時在內存中創建一個備份。D3DPOOL_SYSTEMMEM只在系統內存中創建對象。   如果使用D3DPOOL_DEFAULT再加上   D3DUSAGE_DYNAMIC,那麼系統就會強制把對象創建到AGP中。AGP本身就是內存的一部分,程序訪問起來和內存對象沒有什麼區別,而且GPU訪問的時候速度還很快,所以適合於創建頻繁更新的數據,可能最多的是渲染到貼圖的貼圖對象

 

 

特別需求要把資源放在D3DPOOL_DEFAULT(比如說,TENDER_TARGET)就有這樣的要求)

 

 

細節:

 D3DPOOL_MANAGED
        資源存儲位置:由D3D內部管理此資源,此類資源通常被創建在系統內存中。在顯卡需要此資源時,D3D將它從內存拷貝到顯存。
       當設備丟失時,D3D會自動恢復顯存中的數據。
       適用情況:由於D3D自己的資源管理方案很高效、使用簡單,遊戲中大部分資源都可以使用此標識創建。
       例子:遊戲中使用的大部分紋理貼圖,靜態模型。

      D3DPOOL_DEFAULT
     資源存儲位置:此類資源不由D3D管理,通常被創建在顯存或AGP Aperture中。
             當設備丟失時,必需手動恢復資源,增加了代碼複雜度。
             適用情況:有時候我們希望將某些資源一直放在顯存裏,以提高訪問速度。同時使用D3DUSAGE_WRITEONLY標記會提高效率。
       例子:遊戲中使用的光標貼圖,在遊戲運行過程中一直要使用,可以直接創建在顯存中。
       如果數據需要高頻率更新(不斷的Lock, Unlock),也需要使用D3DPOOL_DEFAULT,同時使用D3DUSAGE_DYNAMIC標記。這意味着此資源會被創建在AGP Aperture中。
       例子:使用CPU進行物理運算的粒子系統、使用CPU計算蒙皮的骨骼動畫。

     D3DPOOL_DEFAUL是不能LOCK的,除非是動態

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