PFND3D10DDI_RESOURCECOPYREGION回调函数 (d3d10umddi.h)

ResourceCopyRegion 函数将源子资源区域复制到目标子资源上的位置。

语法

PFND3D10DDI_RESOURCECOPYREGION Pfnd3d10ddiResourcecopyregion;

void Pfnd3d10ddiResourcecopyregion(
  D3D10DDI_HDEVICE unnamedParam1,
  D3D10DDI_HRESOURCE unnamedParam2,
  UINT unnamedParam3,
  UINT unnamedParam4,
  UINT unnamedParam5,
  UINT unnamedParam6,
  D3D10DDI_HRESOURCE unnamedParam7,
  UINT unnamedParam8,
  const D3D10_DDI_BOX *unnamedParam9
)
{...}

参数

unnamedParam1

hDevice [in]

显示设备的句柄 (图形上下文) 。

unnamedParam2

hDstResource [in]

要复制到的目标资源的句柄。

unnamedParam3

DstSubresource [in]

指示要复制到的目标子资源的索引。

unnamedParam4

DstX [in]

目标子资源的 x 坐标。

unnamedParam5

DstY [in]

目标子资源的 y 坐标。 对于一维 (一维) 子资源, DstY 设置为零。

unnamedParam6

DstZ [in]

目标子资源的 z 坐标。 对于一维 (一维) 和二维 (二维) 子资源, DstZ 设置为零。

unnamedParam7

hSrcResource [in]

要从中复制的源资源的句柄。

unnamedParam8

SrcSubresource [in]

一个索引,指示要从中复制的源子资源。

unnamedParam9

pSrcBox [in, optional]

指向 D3D10_DDI_BOX 结构的指针,该结构指定适合源或目标子资源的框。 如果 pSrcBoxNULL,驱动程序应将整个源子对象复制到目标。

如果 D3D10_DDI_BOX 结构的成员为 left>=righttop>=bottomfront>=back,则 pSrcBox 被视为空, ResourceCopyRegion 不得执行任何复制操作。

返回值

备注

驱动程序可以使用 pfnSetErrorCb 回调函数来设置错误代码。

Microsoft Direct3D 运行时调用用户模式显示驱动程序的 ResourceCopyRegion 函数,通知驱动程序从指定的源子资源区域复制到指定目标子资源上的位置。 源子资源和目标子资源不能是同一资源的同一子资源。 源资源和目标资源必须是同一类型的资源,并且必须具有可相互转换) (DXGI_FORMAT 类型值的格式类型。

对于缓冲区,所有坐标都必须以字节为单位;而对于纹理,所有坐标都必须以像素为单位。 pSrcBox 参数指向的框不得扩展到源子资源区域或目标子资源的边缘。 当前不得映射源和目标资源。 此外,资源创建标志限制资源是否可以参与复制操作。

驱动程序不应遇到任何错误,D3DDDIERR_DEVICEREMOVED除外。 因此,如果驱动程序在调用 pfnSetErrorCb 函数时传递除D3DDDIERR_DEVICEREMOVED以外的任何错误,则 Direct3D 运行时将确定错误严重。 即使删除了设备,驱动程序也不需要返回D3DDDIERR_DEVICEREMOVED;但是,如果设备删除干扰了 ResourceCopyRegion (的操作,这通常不应) 发生,驱动程序可能会返回D3DDDIERR_DEVICEREMOVED。

注意 以下部分仅适用于 Microsoft Direct3D 版本 10.1 及更高版本 (,即具有 Service Pack 1 (SP1 的 Windows Vista) 及更高版本以及 Windows Server 2008 及更高版本) 。
 
驱动程序可以实现 ResourceCopyRegion 函数,该函数可以包含用于处理复制和转换的 switch 语句。 也就是说,驱动程序可以实现一个 ResourceCopyRegion,并且可以将 D3D10_1DDI_DEVICEFUNCS 结构的 pfnResourceConvertRegion 成员设置为与 D3D10_1DDI_DEVICEFUNCS 的 pfnResourceCopyRegion 成员一起指向 ResourceCopyRegion。 但是,为了提高性能,驱动程序可以实现单独的 ResourceCopyRegionResourceConvertRegion 函数。

对于调用驱动程序的 CreateResource (D3D10) 函数中创建的源和目标资源的 D3D10DDIARG_CREATERESOURCE 的 ResourceDimension 成员,ResourceCopyRegionDirect3D 10.1 版本与 Direct3D 10.0 版本的主要功能不同。 对于 Direct3D 10.0 版本的 ResourceCopyRegion,源和目标资源的 D3D10DDIARG_CREATERESOURCE 的 ResourceDimension 成员必须匹配。 借助 Direct3D 10.1 版 ResourceCopyRegion ,源和目标资源的 D3D10DDIARG_CREATERESOURCE 的 ResourceDimension 成员稍有放宽。 Direct3D 10.1 版本的 ResourceCopyRegion 允许复制 TexCube 目标资源上的 Tex2D 源资源,或在 Tex2D 目标资源上复制 TexCube 源资源。 此外,在资源级别上 TexCube 之间的区别在 Direct3D 版本 10.1 中消失。 ResourceCopyRegion 的 Direct3D 10.1 版本仅表示是否可以复制 TexCube。 在 Direct3D 版本 10.0 中,复制资源、验证多个呈现目标等 (即,要求资源类型相同) 各种操作都包含 TexCube 的区别,以纳入资源类型。 在 Direct3D 版本 10.1 中,运行时只能确定 Tex2D。

以下部分列出了复制和转换的条件:

复制

对于复制, ResourceCopyRegion 确保在以下条件下通过驱动程序的 CreateResource (D3D10) 函数创建源和目标资源:

  • 目标资源不是使用在 D3D10DDIARG_CREATERESOURCE 结构的 Usage 成员中设置 D3D10_DDI_USAGE_IMMUTABLE 值创建的。
  • 如果源或目标资源在 D3D10DDIARG_CREATERESOURCE 的 BindFlags 成员中设置了D3D10_DDI_BIND_DEPTH_STENCIL位,或者是多采样资源, 则 ResourceCopyRegion 将验证 pSrcBox 参数是否为 NULL,而 DstXDstYDstZ 参数是否为 0。
  • 子资源索引在范围内。
  • 对齐限制适用于坐标。
  • 源资源和目标资源不属于完全相同的子资源。
  • D3D10DDIARG_CREATERESOURCE 的 Format 成员中指定的每个源和目标资源格式都位于同一个无类型组中。
  • 源资源和目标资源必须具有相同数量的样本和质量级别:单采样资源除外,其样本数必须相同。
ResourceCopyRegion 不确保目标偏移量的源框完全适合资源。 ResourceCopyRegion 也不确保当前未映射任何子资源。

转换

对于转换, ResourceCopyRegion 确保在以下条件下通过驱动程序的 CreateResource (D3D10) 函数创建源和目标资源:

  • 目标资源不是使用在 D3D10DDIARG_CREATERESOURCE 结构的 Usage 成员中设置 D3D10_DDI_USAGE_IMMUTABLE 值创建的。
  • 如果源或目标资源在 D3D10DDIARG_CREATERESOURCE 的 BindFlags 成员中设置了D3D10_DDI_BIND_DEPTH_STENCIL位,或者是多采样资源, 则 ResourceCopyRegion 将验证 pSrcBox 参数是否为 NULL,而 DstXDstYDstZ 参数是否为 0。
  • 子资源索引在范围内。
  • 对齐限制适用于坐标。
  • 源资源和目标资源不属于完全相同的子资源。
  • D3D10DDIARG_CREATERESOURCE 的 Format 成员中指定的每个源和目标资源格式都位于同一个无类型组中。
  • D3D10DDIARG_CREATERESOURCE 的 Format 成员中指定的每个源和目标资源格式都支持相应的转换操作。
  • 源资源和目标资源必须具有相同数量的样本和质量级别:单采样资源除外,其样本数必须相同。
ResourceCopyRegion 不确保当前未映射任何子资源。 ResourceCopyRegion 也不确保目标偏移量的源框完全适合资源。

要求

要求
最低受支持的客户端 在 Windows Vista 和更高版本的 Windows 操作系统中可用。
目标平台 桌面
标头 d3d10umddi.h (包括 D3d10umddi.h)

另请参阅

D3D10DDI_DEVICEFUNCS

D3D10_DDI_BOX

pfnSetErrorCb