PFND3D10DDI_SETVIEWPORTS回调函数 (d3d10umddi.h)
SetViewports 函数设置视区。
语法
PFND3D10DDI_SETVIEWPORTS Pfnd3d10ddiSetviewports;
void Pfnd3d10ddiSetviewports(
D3D10DDI_HDEVICE unnamedParam1,
[in] UINT NumViewports,
[in] UINT ClearViewports,
const D3D10_DDI_VIEWPORT *unnamedParam4
)
{...}
参数
unnamedParam1
hDevice [in]
显示设备的句柄 (图形上下文) 。
[in] NumViewports
pViewports 参数指定的视区总数。
[in] ClearViewports
NumViewports 指定设置为 NULL 的视区数之后的视区数。 此数字表示以前视区数 ((即 Microsoft Direct3D 运行时以前调用 SetViewports) 时)和新视区数之间的差异。
请注意, ClearViewports 指定的数字只是优化辅助,因为用户模式显示驱动程序可以计算此数字。
unnamedParam4
pViewports [in]
要设置的视区 D3D10_DDI_VIEWPORT 结构的数组。
返回值
无
备注
驱动程序可以使用 pfnSetErrorCb 回调函数来设置错误代码。
视区指定输出呈现目标和深度模具资源的转换后剪辑。 在 对 SetViewports 的调用中未定义的任何视区都设置为 NULL。 NULL 视区的定义如下。
struct D3D10_DDI_VIEWPORT {
FLOAT TopLeftX = NaN;
FLOAT TopLeftY = NaN;
FLOAT Width = NaN;
FLOAT Height = NaN;
FLOAT MinDepth = NaN;
FLOAT MaxDepth = NaN;
} D3D10_DDI_VIEWPORT;</pre>
此定义意味着视区已关闭。
用户模式显示驱动程序必须以原子方式将所有视区设置为一个操作。
尽管 NumViewports 参数指定 pViewports 参数指定的数组中的视区数,但数组中的某些值可以为 NULL。
NumViewports 指定的数字与允许的最大视区数之间的视区范围需要包含所有 NULL 或未绑定值。 ClearViewports 参数指定的数字通知驱动程序驱动程序必须清除多少个视区才能执行当前原子操作。
如果上一次对 SetViewports 的 调用在 NumViewports 参数中传递了值 2,而当前对 SetViewports 的 调用在 NumViewports 中传递值 4,则对 SetViewports 的 当前调用还会在 ClearViewports 参数中传递值 0。 如果对 SetViewports 的下一个连续调用在 NumViewports 中传递值 1,则连续调用还会在 ClearViewports 中传递值 3 (4 - 1) 。
在用户模式查询操作期间请求清除视区的值时,该值是最大视区数和视区值之间的差值。
SetViewports 可确保视区有效。 也就是说, SetViewports 确保视区的尺寸在 (D3D10_VIEWPORT_BOUNDS_MIN、D3D10_VIEWPORT_BOUNDS_MAX、D3D10_MIN_DEPTH和D3D10_MAX_DEPTH) 范围内。 SetViewports 还确保没有坐标为 NaN,并将非规范化的浮点值刷新为零。
驱动程序不应遇到任何错误,D3DDDIERR_DEVICEREMOVED除外。 因此,如果驱动程序在调用 pfnSetErrorCb 函数时传递除D3DDDIERR_DEVICEREMOVED以外的任何错误,Microsoft Direct3D 运行时将确定错误严重。 即使删除了设备,驱动程序也不需要返回D3DDDIERR_DEVICEREMOVED;但是,如果设备移除干扰了 SetViewports (通常不应) 的操作,驱动程序可能会返回D3DDDIERR_DEVICEREMOVED。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Vista 和更高版本的 Windows 操作系统中可用。 |
目标平台 | 桌面 |
标头 | d3d10umddi.h (包括 D3d10umddi.h) |