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_APPEND或D3D11_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 等资源描述符 (放入 输入槽) ,着色器才能访问它们进行读取或写入。
下图显示了包含五个资源的示例。
在上述示例中:
- NumRTV = 2
- UAVStartSlot = 2
- NumUAV = 3
NumUAV 和 UAVStartSlot 指定 UAV 数组中的哪个范围包含与以前绑定的状态相关的更改。 请注意,范围中的点可能 保持不变。
UAVRangeStart 和 UAVRangeSize 参数是一种方便,可揭示实际更改的跨度,因为 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) |