次の方法で共有


テクスチャのダーティー領域

テクスチャのダーティー領域

アプリケーションでは、テクスチャ上にダーティー領域を指定して、テクスチャのある一部分だけをコピーすることによって最適化できる。ダーティー領域としてマークされた領域のみが、IDirect3DDevice9::UpdateTexture 呼び出しでコピーされる。ただし、ダーティー領域は、アラインメントを最適化するために拡大される場合がある。テクスチャ作成時には、テクスチャ全体がダーティーと見なされる。ダーティー状態のテクスチャに影響を与える処理は、以下の 5 つである。

  • テクスチャにダーティー領域を追加する。
  • テクスチャ内のバッファのいくつかをロックする。この処理では、ロックされた領域をダーティー領域として追加する。アプリケーションでは、実際のダーティー領域がよくわかっていれば、このダーティー領域の自動更新はオフにできる。
  • IDirect3DDevice9::UpdateSurface の転送先にテクスチャを使うと、テクスチャ全体がダーティーとしてマークされる。
  • IDirect3DDevice9::UpdateTexture の転送元にテクスチャを使うと、転送元テクスチャのダーティー領域がすべてクリアされる。
  • IDirect3DSurface9::GetDC を使ってデバイスのコンテキストを返す。

ダーティー領域はミップマップ テクスチャの最上位レベルに設定され、IDirect3DDevice9::UpdateTexture は、ダーティー領域をミップ チェーンまで拡大して各サブレベルでコピーされるバイト数を最小限に抑えることができる。サブレベル ダーティー領域の座標は外側に丸められる、つまり小数部分はテクスチャに最も近接するエッジに丸められることに注意すること。

テクスチャ タイプによってダーティー領域のタイプも異なるため、テキスチャ タイプごとにメソッドがある。2D テクスチャはダーティー矩形を、ボリューム テクスチャはボックスを使う。

上記メソッドの pDirtyRect または pDirtyBox パラメータに NULL を渡すと、ダーティー領域が拡大してテクスチャ全体を覆う。

各ロッキング メソッドは D3DLOCK_NO_DIRTY_UPDATE を取り、これによって、テクスチャのダーティー状態が変更されるのを防ぐことができる。詳細については、「リソースのロック」を参照すること。

アプリケーションは、ロック処理が可能な時に、領域の全セットに関する詳細情報が変更されたときは、D3DLOCK_NO_DIRTY_UPDATE を使う。最上位レベルまでロックまたはコピーしないでテクスチャのサブレベルのみをロックまたはコピーしても、そのテクスチャのダーティー領域は更新されないことに注意すること。アプリケーションでも、最上位レベルをロックせずに下位レベルをロックしても、ダーティー領域は更新されない。