テクスチャ ダーティ領域 (Direct3D 9)
アプリケーションでは、テクスチャに "ダーティ" 領域を指定することで、コピーするテクスチャのサブセットを最適化できます。 IDirect3DDevice9::UpdateTexture の呼び出しによってコピーされるのは、ダーティとしてマークされた領域のみです。 ただし、ダーティ領域を拡張して配置を最適化できます。 テクスチャが作成されると、テクスチャ全体がダーティと見なされます。 テクスチャのダーティ状態には、次の操作のみが影響します。
- テクスチャにダーティ領域を追加する。
- テクスチャ内のバッファーをロックする。 この操作により、ロックされたリージョンがダーティリージョンとして追加されます。 アプリケーションは、実際のダーティリージョンに関する知識が深い場合は、このダーティリージョンの自動更新をオフにすることができます。
- IDirect3DDevice9::UpdateSurface でテクスチャのサーフェス レベルを宛先として使用すると、テクスチャ全体がダーティとしてマークされます。
- IDirect3DDevice9::UpdateTexture でテクスチャをソースとして使用すると、ソース テクスチャのすべてのダーティ領域がクリアされます。
- IDirect3DSurface9::GetDC を使用してデバイス コンテキストを返す。
- IDirect3DBaseTexture9::GenerateMipSubLevels を呼び出すと、テクスチャ全体がダーティとしてマークされます。
- IDirect3DBaseTexture9::SetAutoGenFilterType を呼び出すと、テクスチャ全体がダーティとしてマークされます。
ダーティ領域は mipmapped テクスチャの最上位レベルに設定され、IDirect3DDevice9::UpdateTexture では、各サブレベルにコピーされたバイト数を最小限に抑えるために、mip チェーンの下にダーティ領域を展開できます。 サブレベルダーティ領域座標は外側に丸められます。つまり、小数部はテクスチャの最も近い端に向かって丸められます。
テクスチャの種類ごとに異なる種類のダーティ領域があるため、テクスチャの種類ごとにメソッドがあります。 2D テクスチャはダーティ四角形を使用し、ボリューム テクスチャはボックスを使用します。
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
上記のメソッドの pDirtyRect パラメーターまたは pDirtyBox パラメーターに NULL を渡すと、テクスチャ全体をカバーするようにダーティ領域が拡張されます。
各ロック メソッドはD3DLOCK_NO_DIRTY_UPDATEを受け取ることができ、テクスチャのダーティ状態に対する変更を防ぐことができます。 詳細については、「 リソースのロック (Direct3D 9)」を参照してください。
ロック操作中に変更された実際のリージョンのセットに関する詳細情報が利用可能な場合は、アプリケーションで D3DLOCK_NO_DIRTY_UPDATEを使用する必要があります。 ロックまたはテクスチャ サブレベルへのコピーのみ (つまり、ロックまたは最上位レベルへのコピーを行わない) では、そのテクスチャのダーティ領域は更新されないことに注意してください。 アプリケーションは、最上位レベルをロックせずに下位レベルをロックするときに、ダーティリージョンを更新する場合と同じ責任を負います。
関連トピック