IDXGIOutput5::D uplicateOutput1 方法 (dxgi1_5.h)

允许指定 IDXGIOutputDuplication 对象可返回的全屏图面支持格式的列表。

语法

HRESULT DuplicateOutput1(
  [in]  IUnknown               *pDevice,
        UINT                   Flags,
  [in]  UINT                   SupportedFormatsCount,
  [in]  const DXGI_FORMAT      *pSupportedFormats,
  [out] IDXGIOutputDuplication **ppOutputDuplication
);

参数

[in] pDevice

类型: IUnknown*

指向 Direct3D 设备接口的指针,可用于处理桌面映像。 必须从输出连接到的适配器创建此设备。

Flags

类型: UINT

留待将来使用;必须为零。

[in] SupportedFormatsCount

类型: UINT

指定支持的格式数。

[in] pSupportedFormats

类型: const DXGI_FORMAT*

指定一个数组,其长度为 SupportedFormatsCountDXGI_FORMAT 条目。

[out] ppOutputDuplication

类型: IDXGIOutputDuplication**

指向接收新 IDXGIOutputDuplication 接口的变量的指针。

返回值

类型: HRESULT

  • 如果 DuplicateOutput1 已成功创建桌面重复接口,S_OK。
  • E_INVALIDARG以下原因之一:
    • 指定的设备 (pDevice) 无效,未在正确的适配器上创建,或者不是从 IDXGIFactory1 (或更高版本的 DXGI 工厂接口(继承自 IDXGIFactory1) )创建的。
    • 调用应用程序已在复制此桌面输出。
  • 如果应用程序对当前桌面映像没有访问权限,则E_ACCESSDENIED。 例如,只有LOCAL_SYSTEM运行的应用程序才能访问安全桌面。
  • 如果创建的 IDXGIOutputDuplication 接口不支持当前桌面模式或方案,DXGI_ERROR_UNSUPPORTED。 例如,不支持 8bpp 和非 DWM 桌面模式。

    如果 DuplicateOutput1 失败并出现DXGI_ERROR_UNSUPPORTED,应用程序可以等待桌面切换和模式更改的系统通知,然后在此类通知发生后再次调用 DuplicateOutput1 。 有关详细信息,请参阅桌面切换 (EVENT_SYSTEM_DESKTOPSWITCH) 和模式更改通知 (WM_DISPLAYCHANGE) 。

  • DXGI_ERROR_NOT_CURRENTLY_AVAILABLE如果 DXGI 达到并发重复应用程序的最大数量限制,则 (默认为 4 个) 。 因此,在其他应用程序关闭之前,调用应用程序无法创建任何桌面重复接口。
  • 如果 DuplicateOutput1 由于会话当前已断开连接而失败,则DXGI_ERROR_SESSION_DISCONNECTED。
  • DXGI_ERROR主题中介绍了其他错误代码。

备注

此方法允许直接接收正在运行的全屏应用程序使用的原始后台缓冲区格式。 为了进行比较,使用原始 DuplicateOutput 函数始终将全屏表面转换为 32 位 BGRA 格式。 如果当前全屏应用程序使用不同的缓冲区格式,则转换为 32 位 BGRA 会产生性能损失。 除了能够跳过格式转换的性能优势外,使用 DuplicateOutput1 还可以在显示 R10G10B10A2) 等高颜色格式 (的情况下接收全色色域。

pSupportedFormats 数组应仅包含显示扫描输出格式。 有关每个功能级别所需的扫描输出格式,请参阅 Direct3D 功能级别 11.0 硬件的格式支持 。 如果 pSupportedFormats 数组中不包含当前全屏缓冲区格式,DXGI 将选取所提供的格式之一,并在从 IDXGIOutputDuplication::AcquireNextFrame 返回之前将全屏缓冲区转换为该格式。 支持的格式列表应始终包含DXGI_FORMAT_B8G8R8A8_UNORM,因为这是桌面最常见的格式。

要求

   
目标平台 Windows
标头 dxgi1_5.h
Library Dxgi.lib
DLL Dxgi.dll

请参阅

DuplicateOutput

IDXGIOutput5