IDXGIFactory2::CreateSwapChainForComposition 方法 (dxgi1_2.h)
创建一个交换链,可用于将 Direct3D 内容发送到 DirectComposition API、 Windows.UI.Xaml 框架或 Windows UI 库 (WinUI) XAML 进行撰写。
语法
HRESULT CreateSwapChainForComposition(
[in] IUnknown *pDevice,
[in] const DXGI_SWAP_CHAIN_DESC1 *pDesc,
[in, optional] IDXGIOutput *pRestrictToOutput,
[out] IDXGISwapChain1 **ppSwapChain
);
参数
[in] pDevice
对于 Direct3D 11 和早期版本的 Direct3D,这是指向交换链的 Direct3D 设备的指针。 对于 Direct3D 12,这是指向直接命令队列的指针, (引用 ID3D12CommandQueue) 。 此参数不能为 NULL。 组合交换链不支持软件驱动程序 (如 D3D_DRIVER_TYPE_REFERENCE)。
[in] pDesc
指向交换链说明 DXGI_SWAP_CHAIN_DESC1 结构的指针。 此参数不能为 NULL。
必须在 DXGI_SWAP_CHAIN_DESC1 的 SwapEffect 成员中指定 DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL值, 因为 CreateSwapChainForComposition 仅支持 翻转演示文稿模型。
还必须在 DXGI_SWAP_CHAIN_DESC1 的 缩放 成员中指定 DXGI_SCALING_STRETCH值。
[in, optional] pRestrictToOutput
指向要限制内容的输出 的 IDXGIOutput 接口的指针。 还必须在 IDXGISwapChain1::P resent1 调用中传递 DXGI_PRESENT_RESTRICT_TO_OUTPUT 标志,以强制内容在任何其他输出上显示为黑屏。 如果要将内容限制为其他输出,则必须创建新的交换链。 但是,可以根据 DXGI_PRESENT_RESTRICT_TO_OUTPUT 标志有条件地限制内容。
如果不想将内容限制为输出目标,请将此参数设置为 NULL 。
[out] ppSwapChain
指向变量的指针,该变量接收指向 CreateSwapChainForComposition 创建的交换链的 IDXGISwapChain1 接口的指针。
返回值
CreateSwapChainForComposition 返回:
- S_OK成功创建交换链。
- E_OUTOFMEMORY内存不可用以完成操作。
- DXGI_ERROR_INVALID_CALL 调用应用程序是否提供了无效数据,例如,如果 pDesc 或 ppSwapChain 为 NULL。
- 可能是 DXGI_ERROR 主题中介绍的其他错误代码,这些错误代码由传递给 pDevice 的设备类型定义。
适用于 Windows 7 的平台更新: 在安装了适用于 Windows 7 的平台更新的 Windows 7 或 Windows Server 2008 R2 上, CreateSwapChainForComposition 失败,E_NOTIMPL。 有关适用于 Windows 7 的平台更新的详细信息,请参阅 适用于 Windows 7 的平台更新。
注解
可以将组合交换链与以下任一项结合使用:
- DirectComposition 的 IDCompositionVisual 接口,
- 系统 XAML 的 SwapChainPanel 或 SwapChainBackgroundPanel 类。
- Windows UI 库 (WinUI) 3 XAML 的 SwapChainPanel 或 SwapChainBackgroundPanel 类。
对于 DirectComposition,可以调用 IDCompositionVisual::SetContent 方法,将交换链设置为 可视对象的内容,然后允许您将交换链绑定到可视化树。 对于 XAML,SwapChainBackgroundPanel 类公开经典 COM 接口 ISwapChainBackgroundPanelNative。 可以使用 ISwapChainBackgroundPanelNative::SetSwapChain 方法绑定到 XAML UI 图。 有关如何将组合交换链与 XAML 的 SwapChainBackgroundPanel 类配合使用的信息,请参阅 DirectX 和 XAML 互操作。
IDXGISwapChain::SetFullscreenState、IDXGISwapChain::ResizeTarget、IDXGISwapChain::GetContainingOutput、IDXGISwapChain1::GetHwnd 和 IDXGISwapChain::GetCoreWindow 方法在此类型的交换链上无效。 如果在这种类型的交换链上调用任何这些方法,它们将失败。
有关如何为交换链的后台缓冲区选择格式的信息,请参阅 转换颜色空间的数据。
示例
有关演示如何使用 CreateSwapChainForComposition 的代码示例,请参阅 SwapChainPanel and gaming。
- 对于 WinRT XAML,ISwapChainPanelNative 和 ISwapChainBackgroundPanelNative 接口在 标头中
windows.ui.xaml.media.dxinterop.h
声明。 - 对于 Windows UI 库 (WinUI) XAML,ISwapChainPanelNative 和 ISwapChainBackgroundPanelNative 接口在 标头中
microsoft.ui.xaml.media.dxinterop.h
声明。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 适用于 Windows 7 的Windows 8和平台更新 [桌面应用 |UWP 应用] |
最低受支持的服务器 | 适用于 Windows Server 2008 R2 的Windows Server 2012和平台更新 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | dxgi1_2.h |
Library | Dxgi.lib |