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 运行时调用用户模式显示驱动程序 SetDisplayModeSetDisplayModeDXGI 函数以将主图面设置为要扫描出来后,用户模式显示驱动程序将调用 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)

另请参阅

D3DDDICB_SETDISPLAYMODE

D3DDDI_DEVICECALLBACKS

SetDisplayMode

SetDisplayModeDXGI