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