テクスチャ管理は、特定の時点でのレンダリングに必要なテクスチャを決定し、それらのテクスチャがビデオ メモリに確実に読み込まれるプロセスです。 他のアルゴリズムと同様に、テクスチャ管理スキームは複雑さが異なりますが、テクスチャ管理に対するアプローチには次の重要なタスクが含まれます。
- 使用可能なテクスチャ メモリの量を追跡します。
- レンダリングに必要なテクスチャと必要でないテクスチャの計算。
- 別のテクスチャ イメージで再読み込みできる既存のテクスチャ リソースと、破棄して新しいテクスチャ リソースに置き換える必要があるサーフェスを決定します。
Direct3D では、最適なパフォーマンスを得るためにテクスチャが確実に読み込まれるように、システムでサポートされるテクスチャ管理が実装されています。 Direct3D が管理するテクスチャ リソースは、マネージド テクスチャと呼ばれます。
テクスチャ マネージャーは、テクスチャが最後に使用された日時を識別するタイムスタンプを使用してテクスチャを追跡します。 その後、最も最近使用されたアルゴリズムを使用して、削除するテクスチャを決定します。 テクスチャの優先順位は、2 つのテクスチャがメモリからの削除を対象としている場合に、タイ ブレーカーとして使用されます。 2 つのテクスチャの優先度値が同じ場合、最近使用したテクスチャが削除されます。 ただし、2 つのテクスチャに同じタイムスタンプがある場合は、優先順位の低いテクスチャが最初に削除されます。
テクスチャ サーフェスを作成するときに、テクスチャ サーフェスの自動テクスチャ管理を要求します。 C++ アプリケーションでマネージド テクスチャを取得するには、IDirect3DDevice9::CreateTexture を呼び出し、Pool パラメーターのD3DPOOL_MANAGEDを指定して、テクスチャ リソースを作成します。 テクスチャを作成する場所を指定することはできません。 マネージド テクスチャを作成するときに、D3DPOOL_DEFAULTフラグまたはD3DPOOL_SYSTEMMEM フラグを使用することはできません。 マネージド テクスチャを作成した後、IDirect3DDevice9::SetTexture メソッドを呼び出して、レンダリング デバイスのテクスチャ カスケードのステージに設定できます。
テクスチャ サーフェイスの IDirect3DResource9::SetPriority メソッドを呼び出すことで、マネージド テクスチャに優先順位を割り当てることができます。
Direct3D は、必要に応じてビデオ メモリにテクスチャを自動的にダウンロードします。 システムは、ローカルまたは非ローカルのビデオ メモリの可用性や他の要因に応じて、マネージド テクスチャをローカルまたは非ローカルのビデオ メモリにキャッシュする場合があります。 マネージド テクスチャのキャッシュの場所はアプリケーションに伝達されず、この情報は自動テクスチャ管理を使用するために必要ではありません。 アプリケーションでビデオ メモリに収まるよりも多くのテクスチャを使用している場合、Direct3D は古いテクスチャをビデオ メモリから削除して、新しいテクスチャのスペースを作ります。 削除されたテクスチャをもう一度使用すると、システムは元のシステム メモリ テクスチャ サーフェスを使用して、ビデオ メモリ キャッシュ内のテクスチャを再読み込みします。 テクスチャを再読み込みする必要がありますが、アプリケーションのパフォーマンスも低下します。
テクスチャ リソースを更新またはロックすることで、テクスチャの元のシステム メモリ コピーを動的に変更できます。 更新が完了した後、またはサーフェスのロックが解除されたときに、システムがダーティ サーフェスを検出すると、テクスチャ マネージャーはテクスチャのビデオ メモリ コピーを自動的に更新します。 発生したパフォーマンス ヒットは、削除されたテクスチャの再読み込みに似ています。
ゲームで新しいレベルに入るときに、(IDirect3DDevice9::EvictManagedResources呼び出すことによって) すべてのマネージド テクスチャをビデオ メモリからフラッシュすることがアプリケーションで必要になる場合があります。
リソース管理の詳細については、「リソースの管理 (Direct3D 9)」を参照してください。
関連トピック
-
Direct3D テクスチャ の