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
描述要创建的捕获图面类型的 DXGI_OUTDUPL_FLAG 枚举值的位域。
[in] SupportedFormatsCount
类型: UINT
指定支持的格式数。
[in] pSupportedFormats
类型: const DXGI_FORMAT*
指定长度为 SupportedFormatsCount 的数组 DXGI_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 达到最大并发重复应用程序数限制,则DXGI_ERROR_NOT_CURRENTLY_AVAILABLE (默认为四个) 。 因此,在其他应用程序关闭之前,调用应用程序无法创建任何桌面重复接口。
- 如果 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 |