リソースの管理 (Direct3D 9)

リソース管理とは、リソースがシステムメモリストレージからデバイスからアクセス可能なストレージに昇格され、デバイスからアクセス可能なストレージから破棄されるプロセスです。 Direct3D ランタイムには、最近使用した優先度の手法に基づく独自の管理アルゴリズムがあります。 Direct3D は、最近使用した優先度の手法に切り替えます。これは、デバイスがアクセス可能なメモリで共存できるよりも多くのリソースが、 IDirect3DDevice9:: beginscene 呼び出しと IDirect3DDevice9:: endscene 呼び出しの間で1つのフレームで使用されることを検出した場合に使用されます。

作成時に D3DPOOL _ DEFAULT フラグを使用して、リソースが、指定されたリソースに対して要求される使用量に最も適したメモリプールに配置されるように指定します。 これは通常、ローカルビデオメモリと Accelerated Graphics Port (AGP) メモリの両方を含むビデオメモリです。 既定のプール内のリソースは、デバイスの失われた状態と操作中の状態の切り替えによって保持されません。 これらのリソースは、reset を呼び出す前に解放する必要があり、再作成する必要があります。

マネージリソースを指定するには、作成時に D3DPOOL _ マネージ フラグを使用します。 マネージリソースは、デバイスの失われた状態と操作中の状態の間の遷移を通じて保持されます。 これらのリソースは、ビデオとシステムメモリの両方に存在します。 レンダリング中に必要になったときに、マネージリソースがビデオメモリにコピーされます。 デバイスは IDirect3DDevice9:: Resetの呼び出しを使用して復元できます。このようなリソースは、データと共に再読み込みされることなく引き続き正常に機能します。 ただし、デバイスを破棄して再作成する必要がある場合は、すべてのリソースを再作成する必要があります。

高頻度で変更されるリソースにはリソース管理を使用しないことをお勧めします。 たとえば、シーングラフを走査するために使用される頂点バッファーとインデックスバッファーでは、ユーザーに表示されるジオメトリのみがすべてのフレームをレンダリングします。 マネージリソースはシステムメモリによってバックアップされるため、システムメモリ内で定数の変更を更新する必要があります。これにより、パフォーマンスが著しく低下する可能性があります。 この特定のシナリオでは、 D3DPOOL _ DEFAULTD3DUSAGE _ DYNAMIC を使用する必要があります。

別の例として、リソース管理が推奨されていない (かつ、ランタイムで明示的に許可されていない) 例として、 D3DUSAGE _ 作りで作成されたテクスチャの管理があります。 レンダーターゲットによって使用されるメモリがランタイムによって管理されている場合は、レンダリング時にその内容を常にシステムメモリにコピーする必要があるため、パフォーマンスが大幅に低下します。 このため、レンダーターゲットを既定のプールに作成する必要があります。 レンダーターゲットに含まれているデータの CPU アクセスが必要な場合は、 IDirect3DDevice9:: UpdateTextureまたは IDirect3DDevice9:: D3DPOOL を使用して、データを _ systemmemで作成したリソースにコピーする必要があります。

デバイスの失われた状態の詳細については、「紛失した デバイス (Direct3D 9)」を参照してください。

Direct3D リソース