日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

D3DPOOL(资源池)

發布時間:2025/5/22 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 D3DPOOL(资源池) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

D3DPOOL定義了資源對應的內存類型,資源可以是texture surface, vertex buffer等,從內存的角度來看,資源有以下幾種類型。

D3DPOOL_DEFAULT

D3DPOOL_MANAGED

D3DPOOL_SYSTEMMEM

D3DPOOL_SCRATCH

D3DPOOL_FORCE_DWORD

D3DPOOL_DEFAULT

資源被存儲在最適合給定資源訪問的內存中,這通常是顯存,包括本地顯內存和AGP內存,D3DPOOL_DEFAULT不同于D3DPOOL_MANAGED和D3DPOOL_SYSTEMMEM,它指出了資源被存儲在最適合設備訪問的內存中,D3DPOOL_DEFAULT指出D3DPOOL_MANAGED和D3DPOOL_SYSTEMMEM永遠都不會作為資源內存的備選類型,使用D3DPOOL_DEFAULT分配的紋理資源是無法鎖定的,除非該紋理是動態紋理或者是私有的FOURCC driver 格式。想要訪問無法所定的紋理資源,必須使用如下函數

IDirect3DDevice9::UpdateSurface

IDirect3DDevice9::UpdateTexture

IDirect3DDevice9::GetFrontBufferData

IDirect3DDevice9::GetRenderTargetData

對大多數應用程序來說,使用D3DPOOL_MANAGED是一個更好的選擇。一些使用driver特有的像素格式創建的紋理,無法被Direct3D runtime識別,也是可以鎖定的。與texture不同的是,swap chain back buffers, render targets, vertex buffers和index buffers都是可以鎖定的,當設備丟失時,所有使用D3DPOOL_DEFAULT創建的資源必須在調用Reset函數前釋放掉,使用D3DPOOL_DEFAULT創建資源時,如果內存不夠用,那么managed resource會釋放一些內存空間來滿足需要。

D3DPOOL_MANAGED

資源按需自動被拷貝到設備能訪問的內存中。托管資源由系統內存備份,所以設備丟失時無需重建。托管資源可以被鎖定,只有系統備份的那份內存能直接被修改。Direct3D按需將修改拷貝到設備可訪問的內存中。

D3DPOOL_SYSTEMMEM

資源被分配在不能被設備直接訪問的內存中。這些內存消耗系統的RAM但是并不減少可分頁的RAM。這些資源不必在設備丟失時重建。這種資源也可以被鎖定,并且可以用作函數IDirect3DDevice9::UpdateSurface或IDirect3DDevice9::UpdateTexture的源,這兩個函數的操作目標都是D3DPOOL_DEFAULT類型的資源。

D3DPOOL_SCRATCH

資源分配在系統RAM中并且無需在設備丟失時重建。這種資源不受設備大小和格式的限制。因此,這種資源不能被Direct3D設備使用,也不能設置為紋理或者Render targets,盡管如此,這種資源也可以被創建,鎖定和拷貝。

D3DPOOL_FORCE_DWORD

強制該類型編譯為32bit大小,沒有這個值,一些編譯器將會把這個枚舉類型編譯為非32bit大小的類型,該值暫未使用。

所有的內存類型適用于所有的資源類型,包括Vertex Buffers, Index Buffers, textures和Surfaces

下面的表指出了資源的內存類型及用法之間的兼容關系,x表示兼容


同一個資源中的不同對象間的資源池不能混合(mip levels in a mipmap),并且當一個資源池被選中時就不能被改變了。

對于大多數靜態資源,應用程序應該使用D3DPOOL_MANAGED,因為這使得應用程序不必處理設備丟失。這在統一內存架構的系統(UMA)上顯得尤為有益。其他動態資源類型并不適合使用D3DPOOL_MANAGED,實際上,index buffers和vertex buffers不能同時使用D3DPOOL_MANAGED和D3DUSAGE_DYNAMIC創建。

對于動態紋理,有時需要使用一對內存,一個是使用D3DPOOL_DEFAULT分配的顯存,另一個是使用D3DPOOL_SYSTEMMEM分配的系統內存。可以用鎖定的方法在系統內存上修改紋理,并使用函數IDirect3DDevice9::UpdateTexture將修改更新到顯存中。


本文轉自zdd博客園博客,原文鏈接:http://www.cnblogs.com/graphics/archive/2011/02/13/1953083.html,如需轉載請自行聯系原作者

總結

以上是生活随笔為你收集整理的D3DPOOL(资源池)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。