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。
注解
要使 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 |