IDirect3DDevice9::UpdateTexture 方法 (d3d9helper.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 都是自動產生的 mipmap,則只會更新最上層的相符層級。 來源的子層級會被忽略,並重新產生目的地子層級。
  • 如果 pSourceTexture 是自動產生的 mipmap 和 pDestinationTexture 非自動產生的 mipmap,UpdateTexture 將會失敗。

規格需求

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

另請參閱

IDirect3D9::CreateDevice

IDirect3DDevice9