D3DPOOL 枚举

定义用于保存资源缓冲区的内存类。

语法

typedef enum D3DPOOL { 
  D3DPOOL_DEFAULT      = 0,
  D3DPOOL_MANAGED      = 1,
  D3DPOOL_SYSTEMMEM    = 2,
  D3DPOOL_SCRATCH      = 3,
  D3DPOOL_FORCE_DWORD  = 0x7fffffff
} D3DPOOL, *LPD3DPOOL;

常量

D3DPOOL_DEFAULT

资源放置在内存池中,最适合为给定资源请求的一组用法。 这通常是视频内存,包括本地视频内存和 AGP 内存。 D3DPOOL_DEFAULT池与D3DPOOL_MANAGED和D3DPOOL_SYSTEMMEM是分开的,它指定将资源放置在设备访问的首选内存中。 请注意,D3DPOOL_DEFAULT永远不会指示应选择D3DPOOL_MANAGED或D3DPOOL_SYSTEMMEM作为此资源的内存池类型。 无法锁定放置在D3DPOOL_DEFAULT池中的纹理,除非它们是动态纹理,或者它们是私有的、FOURCC 的驱动程序格式。 若要访问可解锁的纹理,必须使用 IDirect3DDevice9::UpdateSurfaceIDirect3DDevice9::UpdateTextureIDirect3DDevice9::GetFrontBufferDataIDirect3DDevice9::GetRenderTargetData 等函数。 对于大多数应用程序,D3DPOOL_MANAGED可能是比D3DPOOL_DEFAULT更好的选择。 请注意,可以锁定以驱动程序专有像素格式创建的一些纹理(Direct3D 运行时未知)。 另请注意,交换链后台缓冲区、呈现目标、顶点缓冲区和索引缓冲区可以锁定(与纹理不同)。 设备丢失时,必须先释放使用 D3DPOOL_DEFAULT 创建的资源,然后再调用 IDirect3DDevice9::Reset。 有关详细信息,请参阅 丢失的设备 (Direct3D 9)

使用 D3DPOOL_DEFAULT 创建资源时,如果已提交视频卡内存,则会逐出托管资源,以释放足够的内存来满足请求。

D3DPOOL_MANAGED

资源会根据需要自动复制到设备可访问的内存中。 托管资源由系统内存提供支持,设备丢失时无需重新创建。 有关详细信息 ,请参阅管理 Direct3D 9) (资源 。 可以锁定托管资源。 仅直接修改系统内存副本。 Direct3D 根据需要将更改复制到驱动程序可访问的内存。

Direct3D 9 和 Direct3D 9Ex 之间的差异:
D3DPOOL_MANAGED对 IDirect3DDevice9 有效;但是,它在 IDirect3DDevice9Ex 中无效。

 

D3DPOOL_SYSTEMMEM

资源放置在通常不能由 Direct3D 设备访问的内存中。 此内存分配消耗系统 RAM,但不会减少可分页 RAM。 设备丢失时,无需重新创建这些资源。 此池中的资源可以锁定,并可用作使用 D3DPOOL_DEFAULT 创建的内存资源的 IDirect3DDevice9::UpdateSurfaceIDirect3DDevice9::UpdateTexture 操作的源。

D3DPOOL_SCRATCH

资源放置在系统 RAM 中,设备丢失时无需重新创建。 这些资源不受设备大小或格式限制的约束。 因此,Direct3D 设备无法访问这些资源,也无法将其设置为纹理或呈现目标。 但是,始终可以创建、锁定和复制这些资源。

D3DPOOL_FORCE_DWORD

强制此枚举编译为大小为 32 位。 如果没有此值,某些编译器将允许此枚举编译为 32 位以外的大小。 不使用此值。

备注

所有池类型对所有资源都有效,包括顶点缓冲区、索引缓冲区、纹理和图面。

下表指示对池类型的呈现目标、深度模具以及动态和 mipmap 用法的限制。 x 表示兼容的组合;缺少 x 表示不兼容。

D3DUSAGE_RENDERTARGET D3DUSAGE_DEPTHSTENCIL
D3DPOOL_DEFAULT x x
D3DPOOL_MANAGED
D3DPOOL_SCRATCH
D3DPOOL_SYSTEMMEM

 

D3DUSAGE_DYNAMIC D3DUSAGE_AUTOGENMIPMAP
D3DPOOL_DEFAULT x x
D3DPOOL_MANAGED x
D3DPOOL_SCRATCH
D3DPOOL_SYSTEMMEM x

 

有关使用类型的详细信息,请参阅 D3DUSAGE

对于 mipmap) 中的一个资源中包含的不同对象,池不能混合 (mip 级别,并且当选择池时,无法更改它。

应用程序应对大多数静态资源使用 D3DPOOL_MANAGED,因为这可避免应用程序不得不处理丢失的设备。 (托管资源由 runtime 还原。) 这对于统一内存体系结构 (UMA) 系统特别有用。 其他动态资源不适合D3DPOOL_MANAGED。 事实上,索引缓冲区和顶点缓冲区不能与D3DUSAGE_DYNAMIC一起使用D3DPOOL_MANAGED来创建。

对于动态纹理,有时最好使用一对视频内存和系统内存纹理,使用D3DPOOL_DEFAULT分配视频内存,使用D3DPOOL_SYSTEMMEM分配系统内存。 可以使用锁定方法锁定和修改系统内存纹理的位。 然后,可以使用 IDirect3DDevice9::UpdateTexture 更新视频内存纹理。

要求

要求
标头
D3D9Types.h

请参阅

Direct3D 枚举

D3DUSAGE

IDirect3DDevice9::CreateCubeTexture

IDirect3DDevice9::CreateIndexBuffer

IDirect3DDevice9::CreateTexture

IDirect3DDevice9::CreateVolumeTexture

IDirect3DDevice9::CreateVertexBuffer

D3DINDEXBUFFER_DESC

D3DSURFACE_DESC

D3DVERTEXBUFFER_DESC

D3DVOLUME_DESC