ID3D10Device::CopySubresourceRegion 方法 (d3d10.h)
将区域从源资源复制到目标资源。
语法
void CopySubresourceRegion(
[in] ID3D10Resource *pDstResource,
[in] UINT DstSubresource,
[in] UINT DstX,
[in] UINT DstY,
[in] UINT DstZ,
[in] ID3D10Resource *pSrcResource,
[in] UINT SrcSubresource,
[in] const D3D10_BOX *pSrcBox
);
参数
[in] pDstResource
类型: ID3D10Resource*
指向目标资源的指针 (请参阅 ID3D10Resource) 。
[in] DstSubresource
类型: UINT
目标的子资源索引。
[in] DstX
类型: UINT
目标区域左上角的 x 坐标。
[in] DstY
类型: UINT
目标区域左上角的 y 坐标。
[in] DstZ
类型: UINT
目标区域左上角的 z 坐标。 对于 1D 或 2D 子资源,这必须为零。
[in] pSrcResource
类型: ID3D10Resource*
指向源资源的指针 (请参阅 ID3D10Resource) 。
[in] SrcSubresource
类型: UINT
源的子资源索引。
[in] pSrcBox
类型: const D3D10_BOX*
3D 框 (D3D10_BOX定义 可复制的源子资源的) 。 如果 为 NULL,则复制整个源子资源。 框必须适合源资源。
空框会导致无操作。 如果顶值大于或等于底部值,或者左值大于或等于右值,或者前值大于或等于后的值,则框为空。 当框为空时, CopySubresourceRegion 不执行复制操作。
返回值
无
备注
源框必须在源资源的大小范围内。 目标位置是绝对值 (不是) 的相对值。 目标位置可以与源位置偏移;但是,要复制的区域的大小 (包括目标位置) 必须适合目标资源。
如果资源是缓冲区,则所有坐标都以字节为单位;如果资源是纹理,则所有坐标都以纹素表示。
D3D10CalcSubresource 是用于计算子资源索引的帮助程序函数。
CopySubresourceRegion 在 GPU (上执行复制,类似于 CPU) 的 memcpy。 因此,源和目标资源必须满足以下条件:
- 必须是不同的子资源 (,尽管它们可以来自同一资源) 。
- 必须是同一 类型。
- 必须具有兼容的 格式 (格式必须相同或来自同一类型组) 。 例如,可以将DXGI_FORMAT_R32G32B32_FLOAT纹理复制到DXGI_FORMAT_R32G32B32_UINT纹理,因为这两种格式都位于DXGI_FORMAT_R32G32B32_TYPELESS组中。 从 Direct3D 10.1 开始, CopySubresourceRegion 可以在几个格式类型之间复制。 有关详细信息,请参阅 使用 Direct3D 10.1 进行格式转换。
- 当前可能未 映射。
如果应用需要复制整个资源,我们建议改用 ID3D10Device::CopyResource 。
CopySubresourceRegion 是运行时可以添加到命令缓冲区队列的异步调用。 此异步行为尝试删除复制数据时可能发生的管道停止。 有关更多详细信息,请参阅 性能注意事项 。
Direct3D 10 和 Direct3D 10.1 之间的差异: Direct3D 10 具有以下限制:
|
示例
以下代码片段将位于 (120,100) , (200,220) ) 的 (框复制到目标纹理中 (130,120) , (210,240) 的区域。
D3D10_BOX sourceRegion;
sourceRegion.left = 120;
sourceRegion.right = 200;
sourceRegion.top = 100;
sourceRegion.bottom = 220;
sourceRegion.front = 0;
sourceRegion.back = 1;
pd3dDevice->CopySubresourceRegion( pDestTexture, 0, 130, 120, 0, pSourceTexture, 0, &sourceRegion );
请注意,对于 2D 纹理,正面和背面始终分别设置为 0 和 1。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | d3d10.h |
Library | D3D10.lib |