PFND3DDDI_SETDISPLAYMODECB回调函数 (d3dumddi.h)
pfnSetDisplayModeCb 函数设置用于扫描到显示器的分配。
语法
PFND3DDDI_SETDISPLAYMODECB Pfnd3dddiSetdisplaymodecb;
HRESULT Pfnd3dddiSetdisplaymodecb(
HANDLE hDevice,
D3DDDICB_SETDISPLAYMODE *unnamedParam2
)
{...}
参数
hDevice
显示设备的句柄 (图形上下文) 。
unnamedParam2
pData [in, out]
指向描述用于扫描的分配 的D3DDDICB_SETDISPLAYMODE 结构的指针。
返回值
pfnSetDisplayModeCb 返回以下值之一:
返回代码 | 说明 |
---|---|
S_OK | 已成功设置显示模式。 |
E_INVALIDARG | 参数已验证,确定为不正确。 |
D3DDDIERR_INCOMPATIBLEPRIVATEFORMAT | 用户模式显示驱动程序必须将 与 D3DDDICB_SETDISPLAYMODE 的 hPrimaryAllocation 成员指定的分配关联的图面的格式转换为D3DDDICB_SETDISPLAYMODE的 PrivateDriverFormatAttributember 指定的 format 属性。 然后,驱动程序应再次调用 pfnSetDisplayModeCb。 驱动程序可以分配新的分配, (bitblt) 从旧的主图面传输到新的位块,然后销毁旧的主数据库,前提是驱动程序对所有后续操作使用此分配的新分配句柄。 驱动程序应重复此过程,直到 pfnSetDisplayModeCb 返回不同的返回值。 |
此函数还可能返回其他 HRESULT 值。
注解
在 Microsoft Direct3D 运行时调用用户模式显示驱动程序的 SetDisplayMode 或 SetDisplayModeDXGI 函数来设置要扫描到显示器的主图面之后,用户模式显示驱动程序调用 pfnSetDisplayModeCb 函数来设置用于扫描输出的基础主分配。
注意 在用户模式显示驱动程序调用 pfnSetDisplayModeCb 设置使用扩展格式和/或多采样方法的新显示模式之前,驱动程序必须确保当前 GDI 显示模式具有与新显示模式相同的分辨率;否则, pfnSetDisplayModeCb 返回E_INVALIDARG。
Direct3D 版本 11 注意: 有关驱动程序如何调用 pfnSetDisplayModeCb 的详细信息,请参阅 Direct3D 10 中的更改。
示例
下面的代码示例演示如何设置用于扫描到显示器的分配。
HRESULT CD3DContext::SetDisplayMode(CONST D3DDDIARG_SETDISPLAYMODE* pSetDisplayMode) {
DWORD dwSrcSurf = ((DWORD)(DWORD_PTR)pSetDisplayMode->hResource) + pSetDisplayMode->SubResourceIndex;
HRESULT hr;
// Timestamp the source surface
m_RTbl[dwSrcSurf].m_qwBatch = m_qwBatch;
// Send the presentation request to the display miniport driver
D3DDDICB_SETDISPLAYMODE SetDisplayModeCBData = {0};
SetDisplayModeCBData.hPrimaryAllocation = R200GetSurfaceAllocHandle(m_pR200Ctx,
dwSrcSurf);
hr = m_d3dCallbacks.pfnSetDisplayModeCb(m_hD3D, &SetDisplayModeCBData);
return (hr);
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 在 Windows Vista 和更高版本的 Windows 操作系统中可用。 |
目标平台 | 桌面 |
标头 | d3dumddi.h (包括 D3dumddi.h) |