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_SYTEMMEM とは別で、デバイスによるアクセスに最適なメモリーにリソースを配置するよう指定します。D3DPOOL_DEFAULT は、このリソースに対応するメモリー プールのタイプとして D3DPOOL_MANAGED または D3DPOOL_SYSTEMMEM を指定することはないことに注意してください。D3DPOOL_DEFAULT プールに配置されたテクスチャーは、ダイナミック テクスチャーか、プライベートな FOURCC ドライバー フォーマットでない限り、ロックすることはできません。ロックできないテクスチャーにアクセスするには、IDirect3DDevice9::UpdateSurfaceIDirect3DDevice9::UpdateTextureIDirect3DDevice9::GetFrontBufferDataIDirect3DDevice9::GetRenderTargetData のような関数を使用する必要があります。ほとんどのアプリケーションには、D3DPOOL_DEFAULT よりも D3DPOOL_MANAGED の方が適しているでしょう。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 が記載されている場合は適切な組み合わせ、記載されていない場合は不適切な組み合わせを表しています。

プール 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」を参照してください。

同じリソースに含まれる異なるオブジェクト (ミップマップ内のミップ レベル) 用のプールを混在させることはできません。また、一度選択したプールを変更することはできません。

アプリケーションが失われたデバイスを扱わなくて済むよう、ほとんどの静的リソースに対しては、アプリケーションは D3DPOOL_MANAGED を使うべきです(マネージ リソースはランタイムで復元されます)。これは、ユニファイド メモリー アーキテクチャ (UMA) システムでは特に大きな利点となります。その他の動的なリソースには、D3DPOOL_MANAGED は適しません。インデックス バッファーと頂点バッファーは、D3DPOOL_MANAGED と D3DUSAGE_DYNAMIC を組み合わせて作成することはできません。

ダイナミック テクスチャーでは、ビデオ メモリーとシステム メモリーのテクスチャーを組み合わせ、ビデオ メモリーは D3DPOOL_DEFAULT を使って、システム メモリーは D3DPOOL_SYSTEMMEM を使って割り当てることが望ましい場合もあります。システム メモリーのテクスチャーのビットは、ロック用メソッドを使ってロックしたり変更したりすることができます。そして、IDirect3DDevice9::UpdateTexture を使用すると、ビデオ メモリー テクスチャーを更新することができます。

要件

ヘッダー: D3D9Types.h 宣言

関連項目

D3DUSAGE, IDirect3DDevice9::CreateCubeTexture, IDirect3DDevice9::CreateIndexBuffer, IDirect3DDevice9::CreateTexture, IDirect3DDevice9::CreateVolumeTexture, IDirect3DDevice9::CreateVertexBuffer, D3DINDEXBUFFER_DESC, D3DSURFACE_DESC, D3DVERTEXBUFFER_DESC, D3DVOLUME_DESC