Win32 API 日本語リファレンス
ホームGraphics.Direct3D10 › D3D10_MAP

D3D10_MAP

列挙型
基底型i4

メンバー 5

名前10進16進説明
D3D10_MAP_READ10x1リソースは読み取り用にマップされます。リソースは読み取りアクセスを指定して作成されている必要があります (D3D10_CPU_ACCESS_READ を参照してください)。
D3D10_MAP_WRITE20x2リソースは書き込み用にマップされます。リソースは書き込みアクセスを指定して作成されている必要があります (D3D10_CPU_ACCESS_WRITE を参照してください)。
D3D10_MAP_READ_WRITE30x3リソースは読み取りおよび書き込み用にマップされます。リソースは読み取りアクセスと書き込みアクセスを指定して作成されている必要があります (D3D10_CPU_ACCESS_READ および D3D10_CPU_ACCESS_WRITE を参照してください)。
D3D10_MAP_WRITE_DISCARD40x4リソースは書き込み用にマップされます。リソースの以前の内容は未定義になります。リソースは書き込みアクセスを指定して作成されている必要があります (D3D10_CPU_ACCESS_WRITE を参照してください)。
D3D10_MAP_WRITE_NO_OVERWRITE50x5リソースは書き込み用にマップされます。リソースの既存の内容を上書きすることはできません (「解説」を参照してください)。このフラグは頂点バッファーおよびインデックスバッファーでのみ有効です。リソースは書き込みアクセスを指定して作成されている必要があります (D3D10_CPU_ACCESS_WRITE を参照してください)。D3D10_BIND_CONSTANT_BUFFER フラグを指定して作成されたリソースには使用できません。

公式ドキュメント

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

解説(Remarks)

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

D3D10_MAP_WRITE_NO_OVERWRITE の意味

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

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

さまざまな利用段階にある頂点データの図 しかし、GPU が現在処理しているフレームは CPU より数フレーム遅れていることが多いため、これを保証するのは困難な場合があります。2 ~ 5 フレーム前に行われた呼び出しによってリソースのどの部分が使用されているかを追跡するのは難しく、間違いが起こりやすくなります。このため、D3D10_MAP_WRITE_NO_OVERWRITE を使用する場合は、リソースの未初期化の部分にのみ書き込むことをお勧めします。

D3D10_MAP_WRITE_DISCARDD3D10_MAP_WRITE_NO_OVERWRITE の一般的な使用方法

D3D10_MAP_WRITE_DISCARDD3D10_MAP_WRITE_NO_OVERWRITE は、通常、動的なインデックスバッファーや頂点バッファーと組み合わせて使用されますが、動的テクスチャで使用することもできます。

これら 2 つのフラグの一般的な用途としては、カメラの現在の位置から見えるジオメトリで動的なインデックスバッファーや頂点バッファーを埋める処理があります。あるフレームで最初にデータをバッファーに入力するときは、D3D10_MAP_WRITE_DISCARD を指定して Map を呼び出します。これにより、バッファーの以前の内容は無効になります。その後、バッファーには利用可能なすべてのデータが格納されます。

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

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での定義

列挙メンバーの定義。HSP タブは #define global(値は16進)。

typedef enum D3D10_MAP : int {
    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;
public enum D3D10_MAP : int
{
    D3D10_MAP_READ = 1,
    D3D10_MAP_WRITE = 2,
    D3D10_MAP_READ_WRITE = 3,
    D3D10_MAP_WRITE_DISCARD = 4,
    D3D10_MAP_WRITE_NO_OVERWRITE = 5,
}
Public Enum D3D10_MAP As Integer
    D3D10_MAP_READ = 1
    D3D10_MAP_WRITE = 2
    D3D10_MAP_READ_WRITE = 3
    D3D10_MAP_WRITE_DISCARD = 4
    D3D10_MAP_WRITE_NO_OVERWRITE = 5
End Enum
import enum

class D3D10_MAP(enum.IntEnum):
    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
pub const D3D10_MAP_READ: i32 = 1;
pub const D3D10_MAP_WRITE: i32 = 2;
pub const D3D10_MAP_READ_WRITE: i32 = 3;
pub const D3D10_MAP_WRITE_DISCARD: i32 = 4;
pub const D3D10_MAP_WRITE_NO_OVERWRITE: i32 = 5;
// D3D10_MAP
const (
	D3D10_MAP_READ int32 = 1
	D3D10_MAP_WRITE int32 = 2
	D3D10_MAP_READ_WRITE int32 = 3
	D3D10_MAP_WRITE_DISCARD int32 = 4
	D3D10_MAP_WRITE_NO_OVERWRITE int32 = 5
)
const
  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
pub const D3D10_MAP_READ: i32 = 1;
pub const D3D10_MAP_WRITE: i32 = 2;
pub const D3D10_MAP_READ_WRITE: i32 = 3;
pub const D3D10_MAP_WRITE_DISCARD: i32 = 4;
pub const D3D10_MAP_WRITE_NO_OVERWRITE: i32 = 5;
const
  D3D10_MAP_READ* = 1
  D3D10_MAP_WRITE* = 2
  D3D10_MAP_READ_WRITE* = 3
  D3D10_MAP_WRITE_DISCARD* = 4
  D3D10_MAP_WRITE_NO_OVERWRITE* = 5
enum D3D10_MAP : int {
    D3D10_MAP_READ = 1,
    D3D10_MAP_WRITE = 2,
    D3D10_MAP_READ_WRITE = 3,
    D3D10_MAP_WRITE_DISCARD = 4,
    D3D10_MAP_WRITE_NO_OVERWRITE = 5,
}
#define global D3D10_MAP_READ               0x1
#define global D3D10_MAP_WRITE              0x2
#define global D3D10_MAP_READ_WRITE         0x3
#define global D3D10_MAP_WRITE_DISCARD      0x4
#define global D3D10_MAP_WRITE_NO_OVERWRITE 0x5