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::UpdateSurface、 IDirect3DDevice9::UpdateTexture、 IDirect3DDevice9::GetFrontBufferData 和 IDirect3DDevice9::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::UpdateSurface 或 IDirect3DDevice9::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 更新视频内存纹理。
要求 | 值 |
---|---|
标头 |
|