IDXGIFactory::CreateSwapChain 方法 (dxgi.h)

[从 Direct3D 11.1 开始,建议不要再使用 CreateSwapChain 来创建交换链。 请改用 CreateSwapChainForHwndCreateSwapChainForCoreWindowCreateSwapChainForComposition ,具体取决于要如何创建交换链。]

创建交换链。

语法

HRESULT CreateSwapChain(
  [in]  IUnknown             *pDevice,
  [in]  DXGI_SWAP_CHAIN_DESC *pDesc,
  [out] IDXGISwapChain       **ppSwapChain
);

参数

[in] pDevice

类型: IUnknown*

对于 Direct3D 11 和早期版本的 Direct3D,这是指向交换链的 Direct3D 设备的指针。 对于 Direct3D 12,这是指向直接命令队列的指针, (引用 ID3D12CommandQueue) 。 此参数不能为 NULL

[in] pDesc

类型: DXGI_SWAP_CHAIN_DESC*

指向交换链说明 DXGI_SWAP_CHAIN_DESC 结构的指针。 此参数不能为 NULL

[out] ppSwapChain

类型: IDXGISwapChain**

指向变量的指针,该变量接收指向 CreateSwapChain 创建的交换链的 IDXGISwapChain 接口的指针。

返回值

类型: HRESULT

DXGI_ERROR_INVALID_CALL 如果 pDescppSwapChainNULL,则DXGI_STATUS_OCCLUDED请求全屏模式且不可用,或者E_OUTOFMEMORY。 也可能返回由传入的设备类型定义的其他错误代码。

注解

注意 如果在会话 0 进程中调用此 API,它将返回 DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
 
如果尝试在全屏模式下创建交换链,并且全屏模式不可用,则将在窗口模式下创建交换链,并返回DXGI_STATUS_OCCLUDED。

如果缓冲区宽度或缓冲区高度为零,将从交换链说明中的输出窗口大小推断大小。

由于在创建交换链时无法显式选择目标输出,因此建议不要创建全屏交换链。 如果交换链大小和输出窗口大小不匹配,这可能会降低演示性能。 下面是确保大小匹配的两种方法:

如果交换链处于全屏模式,在释放它之前,必须使用 SetFullscreenState 将其切换到窗口模式。 有关释放交换链的详细信息,请参阅 DXGI 概述的“销毁交换链”部分。

运行时全屏呈现初始帧后,运行时可能会在调用 IDXGISwapChain::P resent 期间意外退出全屏。 若要解决此问题,建议在调用 CreateSwapChain 后立即执行以下代码,以创建全屏交换链 (DXGI_SWAP_CHAIN_DESC设置为 FALSE) 。


// Detect if newly created full-screen swap chain isn't actually full screen.
IDXGIOutput* pTarget; BOOL bFullscreen;
if (SUCCEEDED(pSwapChain->GetFullscreenState(&bFullscreen, &pTarget)))
{
   pTarget->Release();
}
else
   bFullscreen = FALSE;
// If not full screen, enable full screen again.
if (!bFullscreen)
{
   ShowWindow(hWnd, SW_MINIMIZE);
   ShowWindow(hWnd, SW_RESTORE);
   pSwapChain->SetFullscreenState(TRUE, NULL);
}

可以在 pDesc 指向的交换链说明中指定DXGI_SWAP_EFFECTDXGI_SWAP_CHAIN_FLAG值。 通过这些值,可以使用预Windows 8 API 使用翻转模型演示和内容保护等功能。

但是,若要使用立体声演示并更改翻转模型的大小行为,应用程序必须使用 IDXGIFactory2::CreateSwapChainForHwnd 方法。 否则,后台缓冲区内容会隐式缩放以适应呈现目标大小;也就是说,无法关闭缩放。

Windows 应用商店应用说明

如果 Windows 应用商店应用在指定了全屏的情况下调用 CreateSwapChain则 CreateSwapChain 将失败。

Windows 应用商店应用调用 IDXGIFactory2::CreateSwapChainForCoreWindow 方法来创建交换链。

有关如何为交换链的后台缓冲区选择格式的信息,请参阅 转换颜色空间的数据

要求

要求
目标平台 Windows
标头 dxgi.h
Library DXGI.lib

另请参阅

DXGI 接口

为了获得最佳性能,请使用 DXGI 翻转模型

IDXGIFactory