D3DPOOL列挙
リソースのバッファーを保持するメモリ クラスを定義します。
typedef enum D3DPOOL {
D3DPOOL_DEFAULT = 0,
D3DPOOL_MANAGED = 1,
D3DPOOL_SYSTEMMEM = 2,
D3DPOOL_SCRATCH = 3,
D3DPOOL_FORCE_DWORD = 0x7fffffff
} D3DPOOL, *LPD3DPOOL;
-
D3DPOOL_DEFAULT
-
リソースは、特定のリソースに対して要求された一連の使用量に最も適したメモリ プールに配置されます。 これは通常、ローカル ビデオ メモリと AGP メモリの両方を含むビデオ メモリです。 D3DPOOL_DEFAULT プールは、D3DPOOL_MANAGEDおよびD3DPOOL_SYSTEMMEMとは別であり、リソースがデバイス アクセス用の優先メモリに配置されることを指定します。 D3DPOOL_DEFAULTは、このリソースのメモリ プールの種類としてD3DPOOL_MANAGEDまたはD3DPOOL_SYSTEMMEMを選択する必要があることを示すことはありません。 D3DPOOL_DEFAULT プールに配置されたテクスチャは、動的なテクスチャであるか、プライベート、FOURCC、ドライバー形式でない限りロックできません。 ロック解除可能なテクスチャにアクセスするには、 IDirect3DDevice9::UpdateSurface、 IDirect3DDevice9::UpdateTexture、 IDirect3DDevice9::GetFrontBufferData、 IDirect3DDevice9::GetRenderTargetData などの関数を使用する必要があります。 D3DPOOL_MANAGEDは、ほとんどのアプリケーションでD3DPOOL_DEFAULTよりも優れた選択肢です。 ドライバー独自のピクセル形式で作成されたテクスチャの中には、Direct3D ランタイムに不明なテクスチャがロックされる場合があることに注意してください。 また、テクスチャとは異なり、スワップ チェーン バック バッファー、レンダー ターゲット、頂点バッファー、インデックス バッファーをロックできることにも注意してください。 デバイスが失われた場合、 IDirect3DDevice9::Reset を呼び出す前に、D3DPOOL_DEFAULTを使用して作成されたリソースを解放する必要があります。 詳細については、「 紛失したデバイス (Direct3D 9)」を参照してください。
D3DPOOL_DEFAULTを使用してリソースを作成するときに、ビデオ カードメモリが既にコミットされている場合、要求を満たすのに十分なメモリを解放するためにマネージド リソースが削除されます。
-
D3DPOOL_MANAGED
-
リソースは、必要に応じてデバイスからアクセス可能なメモリに自動的にコピーされます。 マネージド リソースはシステム メモリによってサポートされるため、デバイスが失われたときに再作成する必要はありません。 詳細については、「 リソースの管理 (Direct3D 9)」 を参照してください。 マネージド リソースはロックできます。 システム メモリ のコピーのみが直接変更されます。 Direct3D は、必要に応じて、ドライバーがアクセス可能なメモリに変更をコピーします。
Direct3D 9 と Direct3D 9Ex の違い:
D3DPOOL_MANAGEDは IDirect3DDevice9 で有効です。ただし、 IDirect3DDevice9Ex では無効です。 -
D3DPOOL_SYSTEMMEM
-
リソースは、通常 Direct3D デバイスからアクセスできないメモリに配置されます。 このメモリ割り当てはシステム RAM を消費しますが、ページング可能な RAM は削減されません。 これらのリソースは、デバイスが失われたときに再作成する必要はありません。 このプール内のリソースはロックでき、D3DPOOL_DEFAULTで作成されたメモリ リソースに対する IDirect3DDevice9::UpdateSurface または IDirect3DDevice9::UpdateTexture 操作のソースとして使用できます。
-
D3DPOOL_SCRATCH
-
リソースはシステム RAM に配置され、デバイスが失われたときに再作成する必要はありません。 これらのリソースは、デバイスのサイズや形式の制限によって制限されません。 このため、これらのリソースに Direct3D デバイスからアクセスしたり、テクスチャやレンダー ターゲットとして設定したりすることはできません。 ただし、これらのリソースは常に作成、ロック、コピーできます。
-
D3DPOOL_FORCE_DWORD
-
この列挙を強制的に 32 ビットのサイズにコンパイルします。 この値がないと、一部のコンパイラでは、この列挙を 32 ビット以外のサイズにコンパイルできます。 この値は使用されません。
すべてのプールの種類は、頂点バッファー、インデックス バッファー、テクスチャ、サーフェスなど、すべてのリソースで有効です。
次の表は、レンダー ターゲット、深度ステンシル、および動的およびミップマップの使用に対するプールの種類に関する制限を示しています。 x は互換性のある組み合わせを示します。x がない場合は、互換性がないことを示します。
プール | D3DUSAGE_RENDERTARGET | D3DUSAGE_DEPTHSTENCIL |
---|---|---|
D3DPOOL_DEFAULT | x | x |
D3DPOOL_MANAGED | ||
D3DPOOL_SCRATCH | ||
D3DPOOL_SYSTEMMEM |
プール | D3DUSAGE_DYNAMIC | D3DUSAGE_AUTOGENMIPMAP |
---|---|---|
D3DPOOL_DEFAULT | x | x |
D3DPOOL_MANAGED | x | |
D3DPOOL_SCRATCH | ||
D3DPOOL_SYSTEMMEM | x |
使用法の種類の詳細については、「 D3DUSAGE」を参照してください。
プールは、1 つのリソース内に含まれる異なるオブジェクト (mipmap 内の mip レベル) に対して混合することはできません。また、プールを選択した場合は、変更できません。
アプリケーションでは、ほとんどの静的リソースに対してD3DPOOL_MANAGEDを使用する必要があります。これは、アプリケーションが紛失したデバイスに対処する必要がなくなるためです。 (マネージド リソースはランタイムによって復元されます)。これは、統合メモリ アーキテクチャ (UMA) システムに特に役立ちます。 その他の動的リソースは、D3DPOOL_MANAGEDに適していません。 実際、インデックス バッファーと頂点バッファーは、D3DUSAGE_DYNAMICと共にD3DPOOL_MANAGEDを使用して作成することはできません。
動的テクスチャの場合は、ビデオ メモリとシステム メモリ テクスチャのペアを使用し、D3DPOOL_DEFAULTを使用してビデオ メモリを割り当て、D3DPOOL_SYSTEMMEMを使用してシステム メモリを割り当てることが望ましい場合があります。 ロック方法を使用して、システム メモリ テクスチャのビットをロックおよび変更できます。 その後、 IDirect3DDevice9::UpdateTexture を使用してビデオ メモリ テクスチャを更新できます。
要件 | 値 |
---|---|
ヘッダー |
|