共用方式為


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 會計算自上次更新作業以來累積的內容,以擷取紋理的已變更部分。

基於效能考慮,只會記錄紋理層級零的已變更區域。 針對子層級,假設對應的 (縮放) 矩形或方塊也會遭到變更。 在呼叫 LockRect 或 IDirect3DVolumeTexture9::LockBox 時,系統會自動記錄未D3DLOCK_NO_DIRTY_UPDATE或D3DLOCK_READONLY。 此外, IDirect3DDevice9::UpdateSurface 的目的地介面會標示為已變更。

如果紋理屬於不同類型的紋理、其下層緩衝區的大小不同,或是其相符層級不相符,則此方法會失敗。 例如,請考慮具有下列維度的六層來源紋理。


32x16, 16x8, 8x4, 4x2, 2x1, 1x1

這六個層級的來源紋理可能是下列一層目的地的來源。


1x1

針對下列兩層目的地。


2x1, 1x1

或者,針對下列三層目的地。


4x2, 2x1, 1x1

此外,如果紋理的格式不同,這個方法將會失敗。 如果目的地紋理的層級少於來源,則只會複製相符的層級。 如果來源紋理的層級少於目的地,此方法將會失敗。

如果來源紋理有已變更的區域,則可以將複本限制為只有那些區域,以優化複本。 不保證只會複製標示為已變更的位元組。

以下是來源和目的地介面組合的可能性:

  • 如果 pSourceTexture 是非自動產生的 mipmap,而 pDestinationTexture 是自動產生的 mipmap,則只會更新最上層比對層級,並重新產生目的地子層級。 所有其他來源子層級都會被忽略。
  • 如果 pSourceTexture 和 pDestinationTexture 都是自動產生的 mipmaps,則只會更新最上層比對層級。 系統會忽略來源中的子層級,並重新產生目的地子層級。
  • 如果 pSourceTexture 是自動產生的 mipmap 和 pDestinationTexture 非自動產生的 mipmap,UpdateTexture 將會失敗。

需求

   
目標平台 Windows
標頭 d3d9.h (包含 D3D9.h)
程式庫 D3D9.lib

另請參閱

IDirect3D9::CreateDevice

IDirect3DDevice9