IDirect3DDevice9::UpdateTexture

HRESULT 
UpdateTexture(
  IDirect3DBaseTexture9 * pSourceTexture,
  IDirect3DBaseTexture9 * pDestinationTexture
);

パラメータ

  • pSourceTexture
    ソース テクスチャーを表す IDirect3DBaseTexture9 インターフェイスへのポインターです。ソース テクスチャーは、システム メモリー (D3DPOOL_SYSTEMMEM) にある必要があります。
  • pDestinationTexture
    IDirect3DBaseTexture9 インターフェイスへのポインターです。出力先テクスチャーを示します。デスティネーション テクスチャーは D3DPOOL_DEFAULT メモリー プールにある必要があります。

戻り値

メソッドが成功した場合は、D3D_OK を返します。失敗した場合は、D3DERR_INVALIDCALL を返します。

解説 

ロックするか、以下のいずれかのメソッドを呼び出してテクスチャーの部分をダーティにすることができます。

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 内容

関連項目

IDirect3D9::CreateDevice