IDirect3DDevice9::UpdateTexture メソッド
IDirect3DDevice9::UpdateTexture メソッド
構文
HRESULT UpdateTexture(
IDirect3DBaseTexture9 *pSourceTexture,
IDirect3DBaseTexture9 *pDestinationTexture
);
パラメータ
- pSourceTexture
[in] IDirect3DBaseTexture9 インターフェイスへのポインタ。 転送元テクスチャを表す。転送元テクスチャはシステム メモリ内 (D3DPOOL_SYSTEMMEM) になければならない。 - pDestinationTexture
[in] IDirect3DBaseTexture9 インターフェイスへのポインタ。 転送先テクスチャを表す。転送先テクスチャは D3DPOOL_DEFAULT メモリ プールになければならない。
戻り値
成功した場合は、D3D_OK を返す。
失敗した場合は、D3DERR_INVALIDCALL を返す。
注意
テクスチャの一部分をダーティーにするには、その部分をロックするか、または次のいずれかのメソッドを呼び出す。
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
- IDirect3DDevice9::UpdateSurface
IDirect3DDevice9::UpdateTexture は、最後の更新処理以降に蓄積された処理を計算することで、テクスチャのダーティー部分を取得する。
パフォーマンス上の理由から、ダーティー領域はテクスチャのレベル 0 についてのみ記録する。サブレベルについては、対応する (スケーリングされた) 矩形またはボックスもダーティであるものと想定する。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 は失敗する。
参照