ID3D11DeviceContext::CopySubresourceRegion 方法 (d3d11.h)
将区域从源资源复制到目标资源。
语法
void CopySubresourceRegion(
[in] ID3D11Resource *pDstResource,
[in] UINT DstSubresource,
[in] UINT DstX,
[in] UINT DstY,
[in] UINT DstZ,
[in] ID3D11Resource *pSrcResource,
[in] UINT SrcSubresource,
[in, optional] const D3D11_BOX *pSrcBox
);
参数
[in] pDstResource
类型:ID3D11Resource*
指向目标资源的指针(请参阅 ID3D11Resource)。
[in] DstSubresource
类型:UINT
目标子资源索引。
[in] DstX
类型:UINT
目标区域的左上角的 x 坐标。
[in] DstY
类型:UINT
目标区域的左上角的 y 坐标。 对于 1D 子资源,这必须为零。
[in] DstZ
类型:UINT
目标区域的左上角的 z 坐标。 对于 1D 或 2D 子资源,这必须为零。
[in] pSrcResource
类型:ID3D11Resource*
指向源资源的指针(请参阅 ID3D11Resource)。
[in] SrcSubresource
类型:UINT
源子资源索引。
[in, optional] pSrcBox
类型:常 D3D11_BOX*
指向 3D 框(见 D3D11_BOX)的指针,用于定义可以复制的源子资源。 如果 NULL,则会复制整个源子资源。 该框必须适合源资源。
空框生成 no-op。 如果顶部值大于或等于底部值,或者左侧值大于或等于右侧值,或者前值大于或等于后退值,则框为空。 当框为空时,CopySubresourceRegion 不执行复制操作。
返回值
没有
言论
源框必须位于源资源的大小内。 目标偏移量(x、y 和 z),允许在写入目标资源时将源框偏移;但是,源框和偏移量的尺寸必须位于资源的大小内。 如果尝试在目标资源外部复制或指定大于源资源的源框,则未定义 CopySubresourceRegion 的行为。 如果创建了支持 调试层的设备,则调试输出将报告此无效 CopySubresourceRegion 调用的错误。 CopySubresourceRegion 无效的参数会导致未定义的行为,并可能导致呈现、剪辑、无复制甚至删除呈现设备。
如果资源是缓冲区,则所有坐标都以字节为单位;如果资源是纹理,则所有坐标都采用纹素。 D3D11CalcSubresource 是用于计算子资源索引的帮助程序函数。
CopySubresourceRegion 在 GPU 上执行复制(类似于 CPU 的 memcpy)。 因此,源资源和目标资源:
- 必须是不同的子资源(尽管它们可能来自同一资源)。
- 必须是同一类型。
- 必须具有兼容的 DXGI 格式(相同或来自同一类型组)。 例如,可以将DXGI_FORMAT_R32G32B32_FLOAT纹理复制到DXGI_FORMAT_R32G32B32_UINT纹理,因为这两种格式都位于DXGI_FORMAT_R32G32B32_TYPELESS组中。
CopySubresourceRegion 可以在几种格式类型之间复制。 有关详细信息,请参阅使用 Direct3D 10.1
格式转换。 - 当前可能未映射。
CopySubresourceRegion 仅支持复制;它不支持任何拉伸、颜色键或混合。
CopySubresourceRegion 可以重新解释几个格式类型之间的资源数据。 有关详细信息,请参阅使用 Direct3D 10.1
如果你的应用需要复制整个资源,我们建议改用 ID3D11DeviceContext::CopyResource。
CopySubresourceRegion 是一个异步调用,它可以添加到命令缓冲区队列中,这会尝试删除复制数据时可能发生的管道停止。 有关管道停止的详细信息,请参阅 性能注意事项。
示例
以下代码片段将一个框(位于 (120,100),(200,220)从源纹理复制到目标纹理中的区域(10,20),(90,140)。D3D11_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;
pd3dDeviceContext->CopySubresourceRegion( pDestTexture, 0, 10, 20, 0, pSourceTexture, 0, &sourceRegion );
请注意,对于 2D 纹理,前部和后部分别设置为 0 和 1。
要求
要求 | 价值 |
---|---|
目标平台 | 窗户 |
标头 | d3d11.h |
库 | D3D11.lib |