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

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

[in] ClearSlots

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

[in] unnamedParam5

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

[in] unnamedParam6

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

[in] unnamedParam7

pUAVInitialCounts:追加数组并使用缓冲区偏移量。 此参数仅适用于在创建 UAV 时,phUnorderedAccessView 数组的 UAV,该数组在 标志D3D11DDIARG_BUFFER_UNORDEREDACCESSVIEW 结构的成员中设置 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 运行时将使用 UAVRangeStart 调用此函数,并 UAVRangeSize 值来指示整个范围。 使用上面的示例:

  • 若要选择整个范围(不会发生任何变化),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