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 指定的格式属性。 然后,驱动程序应再次调用 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) |