次の方法で共有


D3D10_MAP

CPU による読み取りおよび書き込みとしてアクセスされるリソースを識別します。アプリケーションはこれらのフラグを組み合わせることができます。

typedef enum D3D10_MAP
{
    D3D10_MAP_READ = 1,
    D3D10_MAP_WRITE = 2,
    D3D10_MAP_READ_WRITE = 3,
    D3D10_MAP_WRITE_DISCARD = 4,
    D3D10_MAP_WRITE_NO_OVERWRITE = 5,
} D3D10_MAP;

定数

  • D3D10_MAP_READ
    リソースは読み取り用にマップされます。リソースは、読み取りアクセス許可付きで作成しておく必要があります (D3D10_CPU_ACCESS_READ を参照してください)。
  • D3D10_MAP_WRITE
    リソースは書き込み用にマップされます。リソースは、書き込みアクセス付きで作成しておく必要があります (D3D10_CPU_ACCESS_WRITE を参照してください)。
  • D3D10_MAP_READ_WRITE
    リソースは読み取りおよび書き込み用にマップされます。リソースは、読み取りおよび書き込みアクセス許可付き作成しておく必要があります (D3D10_CPU_ACCESS_READ および D3D10_CPU_ACCESS_WRITE を参照してください)。
  • D3D10_MAP_WRITE_DISCARD
    リソースは書き込み用にマップされます。リソースの以前の内容は未定義になります。リソースは、書き込みアクセス付きで作成しておく必要があります (D3D10_CPU_ACCESS_WRITE を参照してください)。
  • D3D10_MAP_WRITE_NO_OVERWRITE
    リソースは書き込み用にマップされます。リソースの既存の内容を上書きすることはできません (「解説」を参照してください)。このフラグは、頂点バッファーとインデックス バッファーのみで有効です。リソースは、書き込みアクセス付きで作成しておく必要があります (D3D10_CPU_ACCESS_WRITE を参照してください)。D3D10_BIND_CONSTANT_BUFFER フラグを使用して作成されたリソースでは使用できません。

解説 

この列挙型は、ID3D10Buffer::MapID3D10Texture1D::MapID3D10Texture2D::Map、および ID3D10Texture3D::Map で使用されます。

これらの解説は、次のトピックに分かれています。

  • D3D10_MAP_WRITE_NO_OVERWRITE の意味
  • D3D10_MAP_WRITE_DISCARD と D3D10_MAP_WRITE_NO_OVERWRITE を組み合わせて使用する一般的な方法
D3D10_MAP_WRITE_NO_OVERWRITE の意味

D3D10_MAP_WRITE_NO_OVERWRITE は、入力アセンブラー (IA) ステージが使用しているデータに対してアプリケーションが書き込みを行わないことを示します。代わりに GPU は、同じバッファーの他の部分に書き込むことをアプリケーションに対して許可します。アプリケーションは、IA ステージで使用中のデータには絶対に上書きしないようにする必要があります。

たとえば、図 1 に示すバッファーについて考えてみます。頂点 4 ~ 6 を使用する Draw 呼び出しが発行された場合、このバッファーに対する Map を呼び出すアプリケーションは、Draw 呼び出しのレンダリング中にアクセスされる頂点には絶対に書き込まないようにする必要があります。

図形 1.  さまざまな使用ステージにおける頂点データ

Bb205318.d3d10_map_nooverwrite(ja-jp,VS.85).gif

ただし、GPU は、現在処理中のフレームに関連して CPU の背後で多数のフレームを抱えていることが多いため、これを徹底することは容易ではありません。2 ~ 5 フレーム前の呼び出しによって現在使用されているリソースもあることから、リソースの現在使用中のセクションを追跡するのは困難であり、エラーが生じやすくなります。このため、D3D10_MAP_WRITE_NO_OVERWRITE を使用するときには、リソースの初期化されていない部分のみにアプリケーションで書き込むことをお奨めします。

D3D10_MAP_WRITE_DISCARD と D3D10_MAP_WRITE_NO_OVERWRITE を組み合わせて使用する一般的な方法

D3D10_MAP_WRITE_DISCARD および D3D10_MAP_WRITE_NO_OVERWRITE は通常、動的インデックス/頂点バッファーと組み合わせて使用されます。ただし、動的テクスチャーと併用することもできます。

この 2 つのフラグの一般的な使用方法として、カメラの現在の位置から見えるジオメトリを動的インデックス/頂点バッファーに書き込むというものがあります。あるフレーム上のバッファーに初めてデータを入力すると、D3D10_MAP_WRITE_DISCARD が設定された Map が呼び出されます。これによって、バッファーの以前の内容は無効になります。その後で、使用可能なすべてのデータがバッファーに書き込まれます。

同じフレーム内のバッファーに対する以降の書き込みでは、D3D10_MAP_WRITE_NO_OVERWRITE を使用する必要があります。これにより、前述の制約が守られている限り、GPU で使用されている可能性のあるリソースに CPU がアクセスできるようになります。

要件

ヘッダー: D3D10.h 宣言

関連項目

リソース列挙型