リソースの管理

リソースの管理

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

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

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

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

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