D3DPOOL Enumeration
typedef enum D3DPOOL {
D3DPOOL_DEFAULT = 0,
D3DPOOL_MANAGED = 1,
D3DPOOL_SYSTEMMEM = 2,
D3DPOOL_SCRATCH = 3,
D3DPOOL_FORCE_DWORD = 0x7fffffff
} D3DPOOL, *LPD3DPOOL;
资源被放置在内存池(最适合给定资源的内存池)中.
D3DPOOL_DEFAULT 区别于 D3DPOOL_MANAGED和D3DPOOL_SYSTEMEM, 它将资源放在 设备可进入的首选内存。
注意 D3DPOOL_DEFAULT从不检测D3DPOOL_MANAGED或D3DPOOL_MANAGED应该被选做内存池类型.
纹理 放在 D3DPOOL_DEFAULT池中,不能被锁上, 除非他们是异步纹理 或 私有。
进入 没锁的 纹理, 你必须使用函数 UpdateSurface, UpdateTexture, GetFrontBufferData,GetRenderTargetData等。
D3DPOOL_MANAGED比D3DPOLL_DEFAULT适合更多的程序。
注意一些纹理创建使用的是驱动专有像素格式 , 不像D3D runtime, 可以被锁定.
注意-不像纹理-swap chain back buffers, render targets, vertex buffers, index buffers可以被锁定。
当一个设备丢失, D3DPOOL_DEFAULT创建的资源都将 在IDirect3DDevice9::Reset前被释放。 更多信息见 Lost Devices (Direct3D 9).
当用D3DPOOL_DEFAULT创建资源, 如果video card memory 已经提交, D3DPOOL_MANAGED资源将被释放掉, 以满足D3DPOOL_DEFAULT申请的需求。
D3DPOOL_MANAGED
资源自动被拷贝到 “设备可进入内存” 随着需要。
资源管理 会备份 系统内存 并且 不当device丢失时, 不需要重新申请。细节查看
Managing Resources (Direct3D 9)。
Managed resources 可以被 locked.
只有系统内存副本 可以 直接修改。
D3D副本
D3DPOOL_SYSTEMMEM
资源被放在 非D3D设备典型进入的 内存区。
这部分内存分配 占用 系统RAM 但是不会减少 RAM的分页能力。
这部分资源 不需要重新创建, 当设备丢失时。
这个区的资源可以被locked, 可以被用作 UpdateSurface 和 UpdteTexture的资源参数
D3DPOOL_SCRATCH
Remarks
池 不能 为同一资源中的 不同对象 提供不同的池选择,一但池选定, 就固定了。
应用程序应该使用D3DPOOL_MANAGED为多数静态资源,使得在device丢失时,还能够使用这些资源。
这对同一资源管理(UMA)系统非常有利。
异步资源 与 D3DPOOL_MANAGED不能很好匹配。
实际上, 顶点索引 和 顶点缓存 不能同时使用D3DPOOL_MANAGED一起创建携带D3DUSAGE_DYNAMIC.
对于异步纹理, 有时可能希望 同时使用video memeory 和 system memory 纹理,
分配video memory 使用D3DPOOL_DEFAULT,
分配system memory 使用D3DPOLL_SYSTEMMEM.
你可以lock 和 modify system memory纹理使用locking方法。
然后你可以更新video memory 纹理使用UpdateTexture.
浙公网安备 33010602011771号