IDirect3DDevice9::UpdateTexture 方法 (d3d9helper.h)
汇报纹理的脏部分。
语法
HRESULT UpdateTexture(
[in] IDirect3DBaseTexture9 *pSourceTexture,
[in] IDirect3DBaseTexture9 *pDestinationTexture
);
参数
[in] pSourceTexture
指向 IDirect3DBaseTexture9 接口的指针,表示源纹理。 源纹理必须位于系统内存 (D3DPOOL_SYSTEMMEM) 中。
[in] pDestinationTexture
指向 IDirect3DBaseTexture9 接口的指针,表示目标纹理。 目标纹理必须位于D3DPOOL_DEFAULT内存池中。
返回值
类型: HRESULT
如果方法成功,则返回值D3D_OK。 如果 方法失败,则可以D3DERR_INVALIDCALL返回值。
注解
可以通过锁定纹理或调用以下方法之一来脏纹理的一部分。
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
- IDirect3DDevice9::UpdateSurface
出于性能原因,脏区域仅记录纹理的零级。 对于子级别,假定也脏相应的 (缩放) 矩形或框。 在没有D3DLOCK_NO_DIRTY_UPDATE或D3DLOCK_READONLY的情况下调用 LockRect 或 IDirect3DVolumeTexture9::LockBox 时,会自动记录脏区域。 此外,IDirect3DDevice9::UpdateSurface 的目标图面标记为脏。
如果纹理类型不同、底层缓冲区大小不同或匹配级别不匹配,此方法将失败。 例如,请考虑具有以下维度的六级源纹理。
32x16, 16x8, 8x4, 4x2, 2x1, 1x1
此六级源纹理可以是以下一级目标的源。
1x1
对于以下两级目标。
2x1, 1x1
或者,对于以下三级目标。
4x2, 2x1, 1x1
此外,如果纹理采用不同的格式,此方法将失败。 如果目标纹理的级别少于源,则仅复制匹配的级别。 如果源纹理的级别少于目标,则 方法将失败。
如果源纹理具有脏区域,可以通过将复制限制为仅这些区域来优化复制。 不能保证仅复制标记为脏的字节。
下面是源图面和目标图面组合的可能性:
- 如果 pSourceTexture 是非自动生成的 mipmap,而 pDestinationTexture 是自动生成的 mipmap,则仅更新最顶层的匹配级别,并重新生成目标子级别。 将忽略所有其他源子级别。
- 如果 pSourceTexture 和 pDestinationTexture 都是自动生成的 mipmap,则只会更新最顶层的匹配级别。 将忽略源中的子级别,并重新生成目标子级别。
- 如果 pSourceTexture 是自动生成的 mipmap,而 pDestinationTexture 是非自动生成的 mipmap,则 UpdateTexture 将失败。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | d3d9helper.h (包括 D3D9.h) |
Library | D3D9.lib |