Direct3D 9) (纹理脏区域

应用程序可以通过在纹理上指定“脏”区域来优化复制纹理的子集。 只有标记为 脏 的区域才会通过调用 IDirect3DDevice9::UpdateTexture 进行复制。 但是,可以扩展脏区域以优化对齐方式。 创建纹理时,会将整个纹理视为脏。 只有以下操作会影响纹理的脏状态:

脏区域在 mipmapped 纹理的顶层设置,IDirect3DDevice9::UpdateTexture 可以在 mip 链中向下扩展脏区域,以最大程度地减少为每个子级别复制的字节数。 请注意,子级别脏区域坐标向外舍入,也就是说,它们的小数部分向纹理的最靠近边缘舍入。

由于每种类型的纹理具有不同类型的脏区域,因此每种纹理类型都有方法。 2D 纹理使用脏矩形,而体积纹理使用框。

为上述方法的 pDirtyRect 或 pDirtyBox 参数传递 NULL 会扩展脏区域以覆盖整个纹理。

每个锁定方法都可以采用D3DLOCK_NO_DIRTY_UPDATE,从而防止对纹理脏状态进行任何更改。 有关详细信息,请参阅 将资源锁定 (Direct3D 9)

如果提供了有关在锁定操作期间更改的真实区域集的详细信息,应用程序应使用 D3DLOCK_NO_DIRTY_UPDATE。 请注意,锁或复制到纹理子级别仅 (,即,不锁定或复制到顶级) 不会更新该纹理的脏区域。 当应用程序锁定较低级别而不锁定最顶层时,应用程序在更新脏区域时承担相同的责任。

基本纹理概念