ID3D10Buffer::Map 方法 (d3d10.h)

获取指向资源中包含的数据的指针,并拒绝 GPU 访问资源。

语法

HRESULT Map(
  [in]  D3D10_MAP MapType,
  [in]  UINT      MapFlags,
  [out] void      **ppData
);

参数

[in] MapType

类型: D3D10_MAP

指定 CPU 对资源的读取和写入权限的标志。 有关可能的值,请参阅 D3D10_MAP

[in] MapFlags

类型: UINT

指定 GPU 繁忙时 CPU 应执行的操作的标志, (看到 D3D10_MAP_FLAG) 。 此标志是可选的。

[out] ppData

类型: void**

指向缓冲区资源数据的指针。

返回值

类型: HRESULT

如果此函数成功,则返回S_OK。 以下列表包含 Map 可能失败的一些原因:

  • 如果 MapFlags 指定D3D10_MAP_FLAG_DO_NOT_WAIT并且 GPU 尚未完成资源, 则 ID3D10Buffer::Map 返回DXGI_ERROR_WAS_STILL_DRAWING。
  • 如果 MapType 包含允许读取的任何标志,并且硬件设备 (即视频卡) 已删除,则 ID3D10Buffer::Map 返回DXGI_ERROR_DEVICE_REMOVED。
有关上述返回值的详细信息,请参阅 DXGI_ERROR

注解

要使 CPU 写入资源的内容,必须使用动态使用情况标志创建资源,D3D10_USAGE_DYNAMIC。 若要读取和写入这些内容,必须使用暂存使用标志创建资源,D3D10_USAGE_STAGING。 (有关这些标志的详细信息,请参阅 D3D10_USAGE.) ID3D10Buffer::Map 将检索指向资源数据的指针。 有关如何高效访问资源的讨论,请参阅 复制和访问资源数据 (Direct3D 10)

调用 ID3D10Buffer::Unmap 表示应用程序已完成资源访问。

ID3D10Buffer::Map 还有其他一些限制。 例如:

  • 无法多次映射同一缓冲区;换句话说,不要对已映射的缓冲区调用 ID3D10Buffer::Map
  • 必须先取消映射绑定到管道的任何缓冲区,然后才能执行任何呈现操作, (ID3D10Device::D raw) 。
Direct3D 9 与 Direct3D 10 之间的差异:

Direct3D 10 中的 ID3D10Buffer::Map 类似于 Direct3D 9 中的资源

要求

   
目标平台 Windows
标头 d3d10.h
Library D3D10.lib

另请参阅

ID3D10Buffer 接口