PFND3D11DDI_SETRENDERTARGETS回调函数 (d3d10umddi.h)

SetRenderTargets (D3D11) 函数设置呈现目标图面。

语法

PFND3D11DDI_SETRENDERTARGETS Pfnd3d11ddiSetrendertargets;

void Pfnd3d11ddiSetrendertargets(
  [in] D3D10DDI_HDEVICE unnamedParam1,
  [in] const D3D10DDI_HRENDERTARGETVIEW *unnamedParam2,
  [in] UINT NumRTVs,
  [in] UINT ClearSlots,
  [in] D3D10DDI_HDEPTHSTENCILVIEW unnamedParam5,
  [in] const D3D11DDI_HUNORDEREDACCESSVIEW *unnamedParam6,
  [in] const UINT *unnamedParam7,
       UINT UAVStartSlot,
  [in] UINT NumUAVs,
  [in] UINT UAVRangeStart,
  [in] UINT UAVRangeSize
)
{...}

参数

[in] unnamedParam1

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

[in] unnamedParam2

phRenderTargetView:呈现目标视图的句柄数组, (RTV) 要设置的对象。 请注意,某些句柄值可以为 NULL

[in] NumRTVs

phRenderTargetView 中提供的数组中供 RTV 设置的元素数。

[in] ClearSlots

要取消绑定的 RTV 对象数;也就是说,以前绑定但不再需要绑定的呈现目标视图对象。

[in] unnamedParam5

hDepthStencilView:要设置的深度模具缓冲区的句柄。

[in] unnamedParam6

phUnorderedAccessView:要设置的无序访问视图 (UAV) 对象的句柄数组。

[in] unnamedParam7

pUAVInitialCounts:追加和使用缓冲区偏移量的数组。 此参数仅与 phUnorderedAccessView 数组的 UAV 相关,这些 UAV 是在创建 UAV 时在 D3D11DDIARG_BUFFER_UNORDEREDACCESSVIEW 结构的 Flags 成员中设置D3D11_DDI_BUFFER_UAV_FLAG_APPENDD3D11_DDI_BUFFER_UAV_FLAG_COUNTER;否则,将忽略它。 如果此数组中的元素设置为 -1,则应保留该追加和消耗缓冲区的当前偏移量。 任何其他值都会导致驱动程序为该 UAV 追加和使用缓冲区设置隐藏计数器。

UAVStartSlot

要绑定的第一个 UAV 的索引。 UAVStartSlot 必须至少与 NumRTV 参数一样大。

注意

RTV 和 UAV 仅存在一组共享绑定点。 首先绑定 RTV,然后绑定 UAV。

[in] NumUAVs

要绑定的 UAV 数。

[in] UAVRangeStart

所有更新的 UAV 集合中的第一个 UAV (,其中包括) NULL 绑定。

[in] UAVRangeSize

所有更新的 UAV 集中的 UAV 数, (包括 null 绑定) 。

返回值

备注

必须绑定 RTV 和 UAV 等资源描述符 (放入 输入槽) ,着色器才能访问它们进行读取或写入。

下图显示了包含五个资源的示例。

RTV 和 UAV 示例。

在上述示例中:

  • NumRTV = 2
  • UAVStartSlot = 2
  • NumUAV = 3

NumUAVUAVStartSlot 指定 UAV 数组中的哪个范围包含与以前绑定的状态相关的更改。 请注意,范围中的点可能 保持不变

UAVRangeStartUAVRangeSize 参数是一种方便,可揭示实际更改的跨度,因为 Direct3D DDI 始终绑定所有 (包括未更改) 的内容。 D3D11 运行时代表应用程序将它们作为驱动程序编写器的附加信息,作为可能的优化提示。 通常,D3D11 运行时将使用 UAVRangeStartUAVRangeSize 值调用此函数,以指示整个范围。 请使用上面的示例:

  • 若要选择整个范围 (认为不会) 发生任何更改, UAVRangeStart = 2 且 UAVRangeSize = 3。
  • 若要指示第一个 UAV 可能已更改, UAVRangeStart = 2 且 UAVRangeSize = 1。

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

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

要求

要求
最低受支持的客户端 从 Windows 7 操作系统开始支持 SetRenderTargets (D3D11) 。
目标平台 桌面
标头 d3d10umddi.h (包括 D3d10umddi.h)

另请参阅

D3D11DDIARG_BUFFER_UNORDEREDACCESSVIEW

D3D11DDI_DEVICEFUNCS

pfnSetErrorCb