IDirect3DDevice9::UpdateTexture
HRESULT
UpdateTexture(
IDirect3DBaseTexture9 * pSourceTexture,
IDirect3DBaseTexture9 * pDestinationTexture
);
パラメータ
- pSourceTexture
ソース テクスチャーを表す IDirect3DBaseTexture9 インターフェイスへのポインターです。ソース テクスチャーは、システム メモリー (D3DPOOL_SYSTEMMEM) にある必要があります。 - pDestinationTexture
IDirect3DBaseTexture9 インターフェイスへのポインターです。出力先テクスチャーを示します。デスティネーション テクスチャーは D3DPOOL_DEFAULT メモリー プールにある必要があります。
戻り値
メソッドが成功した場合は、D3D_OK を返します。失敗した場合は、D3DERR_INVALIDCALL を返します。
解説
ロックするか、以下のいずれかのメソッドを呼び出してテクスチャーの部分をダーティにすることができます。
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
- IDirect3DDevice9::UpdateSurface
IDirect3DDevice9::UpdateTexture は、前回の更新処理以降に蓄積されたものを計算することで、テクスチャーのダーティ部分を取得します。
パフォーマンス上の理由から、ダーティ領域はレベル ゼロのテクスチャーについてのみ記録されます。サブレベルの場合、対応する (倍率設定された) 矩形またはボックスもダーティであることを前提としています。D3DLOCK_NO_DIRTY_UPDATE または D3DLOCK_READONLY なしで LockRect または IDirect3DVolumeTexture9::LockBox を呼び出した場合、ダーティ領域は自動的に記録されます。また、IDirect3DDevice9::UpdateSurface のデスティネーション サーフェスもダーティとしてマークされます。
テクスチャーが別のタイプであったり、最下位レベルのバッファーが別のサイズであったり、一致レベルが一致しない場合、このメソッドは失敗します。たとえば、以下の次元を持つ 6 レベルのソース テクスチャーを考えてみましょう。
32x16, 16x8, 8x4, 4x2, 2x1, 1x1
この 6 レベル ソース テクスチャーは、以下の 1 レベル デスティネーションのソースであることができます。
1x1
以下の 2 レベル デスティネーション。
2x1, 1x1
以下の 3 レベル デスティネーション。
4x2, 2x1, 1x1
さらに、テクスチャーが別のフォーマットである場合、このメソッドは失敗します。デスティネーション テクスチャーがソースよりも少ないレベルを持っている場合、一致しているレベルがコピーされます。ソース テクスチャーがデスティネーションよりも少ないレベルを持っている場合、このメソッドは失敗します。
ソース テクスチャーにダーティ領域がある場合は、コピーをこれらの領域に制限することでコピーを最適化できます。ダーティとマークされている領域のみがコピーされるかは保証されません。
ソース サーフェスとデスティネーション サーフェスの可能性のある組み合わせを以下に示します。
- pSourceTexture が自動生成以外のミップマップであり、pDestinationTexture が自動生成されたミップマップである場合、最上位の一致しているレベルのみが更新され、デスティネーションのサブレベルが再生成されます。元のテクスチャーの他のサブレベルはすべて無視されます。
- pSourceTexture および pDestinationTexture が自動生成されたミップマップである場合、最上位の一致しているレベルが更新されます。元のテクスチャーのサブレベルは無視され、対象となるテクスチャーのサブレベルは再生成されます。
- pSourceTexture が自動生成されたミップマップであり、pDestinationTexture が自動生成以外のミップマップである場合、UpdateTexture は失敗します。
要件
ヘッダー: D3D9.h 宣言
ライブラリ: D3D9.lib 内容