IDirect3DDevice9::UpdateTexture 方法 (d3d9.h)

汇报纹理的脏部分。

语法

HRESULT UpdateTexture(
  [in] IDirect3DBaseTexture9 *pSourceTexture,
  [in] IDirect3DBaseTexture9 *pDestinationTexture
);

参数

[in] pSourceTexture

类型: IDirect3DBaseTexture9*

指向表示源纹理的 IDirect3DBaseTexture9 接口的指针。 源纹理必须位于系统内存 (D3DPOOL_SYSTEMMEM) 中。

[in] pDestinationTexture

类型: IDirect3DBaseTexture9*

指向 IDirect3DBaseTexture9 接口的指针,表示目标纹理。 目标纹理必须位于D3DPOOL_DEFAULT内存池中。

返回值

类型: HRESULT

如果该方法成功,则返回值D3D_OK。 如果方法失败,则可以D3DERR_INVALIDCALL返回值。

备注

可以通过锁定纹理或调用以下方法之一来脏纹理的一部分。

IDirect3DDevice9::UpdateTexture 通过计算自上次更新操作以来累积的内容来检索纹理的脏部分。

出于性能原因,仅针对纹理的零级记录脏区域。 对于子级别,假定相应的 (缩放) 矩形或框也脏。 在没有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
标头 d3d9.h (包括 D3D9.h)
Library D3D9.lib

请参阅

IDirect3D9::CreateDevice

IDirect3DDevice9