D3D10_MAP 枚举 (d3d10.h)

标识要由 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_READ
值:1
资源已映射以供读取。 必须创建具有读取访问权限的资源, (查看 D3D10_CPU_ACCESS_READ) 。
D3D10_MAP_WRITE
值: 2
资源已映射以供写入。 必须已创建具有写入访问权限的资源, (请参阅 D3D10_CPU_ACCESS_WRITE) 。
D3D10_MAP_READ_WRITE
值: 3
资源映射用于读取和写入。 必须创建具有读取和写入访问权限的资源, (查看 D3D10_CPU_ACCESS_READ和D3D10_CPU_ACCESS_WRITE) 。
D3D10_MAP_WRITE_DISCARD
值: 4
资源映射用于写入;资源以前的内容将未定义。 必须已创建具有写入访问权限的资源, (请参阅 D3D10_CPU_ACCESS_WRITE) 。
D3D10_MAP_WRITE_NO_OVERWRITE
值: 5
资源映射用于写入;无法覆盖资源的现有内容, (请参阅备注) 。 此标志仅在顶点缓冲区和索引缓冲区上有效。 必须已创建具有写入访问权限的资源, (请参阅 D3D10_CPU_ACCESS_WRITE) 。 不能在使用 D3D10_BIND_CONSTANT_BUFFER 标志创建的资源上使用。

注解

此枚举用于 ID3D10Buffer::MapID3D10Texture1D::MapID3D10Texture2D::MapID3D10Texture3D::Map

D3D10_MAP_WRITE_NO_OVERWRITE的含义

D3D10_MAP_WRITE_NO_OVERWRITE表示应用程序承诺不会写入 输入汇编程序 (IA) 阶段使用的数据。 GPU 允许应用程序写入同一缓冲区的其他部分。 应用程序必须确保它不会写入 IA 阶段使用的任何数据。

例如,请考虑下图中所示的缓冲区。 如果发出了使用顶点 4-6 的 Draw 调用,则在此缓冲区上调用 Map 的应用程序必须确保它不会写入绘图调用在呈现期间将访问的顶点。

处于不同使用阶段的顶点数据的示意图 但是,确保这一点可能很困难,因为 GPU 在 CPU 当前正在处理的帧方面通常落后许多帧。 跟踪由于 2 到 5 帧前调用而使用的资源的哪些部分很难且容易出错。 因此,建议应用程序在使用 D3D10_MAP_WRITE_NO_OVERWRITE 时仅写入资源的未初始化部分。

D3D10_MAP_WRITE_NO_OVERWRITE D3D10_MAP_WRITE_DISCARD的常见用法

D3D10_MAP_WRITE_DISCARD和D3D10_MAP_WRITE_NO_OVERWRITE通常与动态索引/顶点缓冲区结合使用,尽管它们也可用于动态纹理。

这两个标志的常见用法涉及使用可从相机当前位置看到的几何图形填充动态索引/顶点缓冲区。 首次将数据输入给定帧上的缓冲区时,使用 D3D10_MAP_WRITE_DISCARD 调用 Map;这样做会使缓冲区的先前内容失效。 然后,用所有可用数据填充缓冲区。

对同一帧内缓冲区的后续写入应使用 D3D10_MAP_WRITE_NO_OVERWRITE。 只要遵守前面所述的限制,CPU 就会访问 GPU 可能正在使用的资源。

要求

要求
Header d3d10.h

另请参阅

资源枚举