IDirect3DDevice9::UpdateTexture 方法 (d3d9.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
基於效能考慮,只會記錄紋理層級零的已變更區域。 針對子層級,假設對應的 (縮放) 矩形或方塊也會遭到變更。 在呼叫 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 |