ID3D10Texture1D::Map 方法 (d3d10.h)

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

语法

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

参数

[in] Subresource

类型: UINT

子资源的索引号。 有关更多详细信息 ,请参阅 D3D10CalcSubresource

[in] MapType

类型: D3D10_MAP

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

[in] MapFlags

类型: UINT

指定 CPU 在 GPU 繁忙时应执行的操作的标志。 此标志是可选的。

[out] ppData

类型: void**

指向纹理资源数据的指针。

返回值

类型: HRESULT

如果此函数成功,则返回S_OK。 有关其他限制以及任何 Map 方法可返回的错误值列表,请参阅备注。

注解

映射纹理使 CPU 能够直接访问纹理子资源中的基础数据。 要使方法成功,必须使用相应的标志创建正在映射的纹理 (D3D10_CPU_ACCESS_FLAG) ,并且其指定用法 (请参阅 D3D10_USAGE) 必须是D3D10_USAGE_DYNAMIC或D3D10_USAGE_STAGING。

Map 方法的常见失败由以下返回值指示:

说明
DXGI_ERROR_WAS_STILL_DRAWING 如果 MapFlags 指定D3D10_MAP_FLAG_DO_NOT_WAIT并且 GPU 尚未使用资源完成, 则 Map 返回DXGI_ERROR_WAS_STILL_DRAWING。
DXGI_ERROR_DEVICE_REMOVED 如果 MapType 允许任何 CPU 读取访问并且已删除视频卡,则 Map 将返回DXGI_ERROR_DEVICE_REMOVED。
 

有关上述返回值的详细信息,请参阅 DXGI_ERROR

映射 具有以下限制:

  • 单个子资源不能多次映射;换句话说,不要在已映射的子资源上调用 Map
  • 在执行 ID3D10Device::D raw () 之前,必须取消映射绑定到管道的任何子资源,然后才能执行任何呈现操作(即 ID3D10Device::D raw )。
应用程序必须将 void pData 指针强制转换为适当的类型,以有意义的方式访问基础子资源数据。 例如,以下代码演示如何读取 1D 子资源的每个纹素。 假定纹理是使用 DXGI_FORMAT_R32G32B32A32_FLOAT 创建的,并且 pData 是指向成功调用此方法后纹理资源数据输出的指针。

FLOAT* pTexels = (FLOAT*)pData;
for( UINT col = 0; col < width; col++ )
{
  pTexels[col*4 + 0]; // Alpha
  pTexels[col*4 + 1]; // Blue
  pTexels[col*4 + 2]; // Green
  pTexels[col*4 + 3]; // Red
}

Direct3D 9 与 Direct3D 10 之间的差异:

Direct3D 10 中的映射类似于 Direct3D 9 中的资源

要求

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

另请参阅

ID3D10Texture1D 接口