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 运行时调用用户模式显示驱动程序的 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