Microsoft DirectX 8.0 (C++)

リソースの管理

リソース管理は、リソースをシステム メモリ ストレージからデバイスがアクセス可能なストレージに移し、デバイスがアクセス可能なストレージから破棄するプロセスである。Microsoft® Direct3D® ランタイムには、LRU (least-recently-used) 優先方式に基づく独自の管理アルゴリズムがある。1 つのフレーム (IDirect3DDevice8::BeginScene 呼び出しと IDirect3DDevice8::EndScene 呼び出しの間) 内で、デバイスがアクセス可能なメモリに共存できるリソース数より多くのリソースが検出されると、most-recently-used 優先方式に切り替わる。

管理リソースを指定するには、作成時に D3DPOOL_MANAGED フラグを使用する。管理リソースは、デバイスの消失状態と処理可能状態との間のトランジションでも保持される。デバイスは、IDirect3DDevice8::Reset 呼び出しによって復元でき、このようなリソースはアートワークに再ロードしなくても正常に機能し続ける。ただし、デバイスを破棄して作成し直す必要がある場合、D3DPOOL_MANAGED を使用して作成されたリソースはすべて作成し直す必要がある。

リソースをデフォルトのプールに配置することを指定するには、作成時に D3DPOOL_DEFAULT フラグを使用する。デフォルトのプール内のリソースは、デバイスの消失状態と処理可能状態間のトランジションでは保持されない。これらのリソースは Reset を呼び出す前に解放し、その後で作成し直す必要がある。

デバイスの消失状態の詳細については、「消失したデバイス」を参照すること。

リソース管理は、すべてのタイプおよび使用に対してサポートされているわけではないので注意すること。たとえば、D3DUSAGE_RENDERTARGET フラグで作成されたオブジェクトはサポートされていない。また、高い頻度で内容が変更されるオブジェクトに対しては、リソース管理は奨励しない。たとえば、すべてのフレームを変更する管理頂点バッファの場合、何らかのハードウェアのパフォーマンスを大きく低下させることがある。ただし、これはテクスチャ リソースに関する問題ではない。