IDXGIFactory::CreateSwapChain 方法 (dxgi.h)
[从 Direct3D 11.1 开始,建议不要再使用 CreateSwapChain 来创建交换链。 请改用 CreateSwapChainForHwnd、 CreateSwapChainForCoreWindow 或 CreateSwapChainForComposition ,具体取决于要如何创建交换链。]
创建交换链。
语法
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 如果 pDesc 或 ppSwapChain 为 NULL,则DXGI_STATUS_OCCLUDED请求全屏模式且不可用,或者E_OUTOFMEMORY。 也可能返回由传入的设备类型定义的其他错误代码。
注解
如果缓冲区宽度或缓冲区高度为零,将从交换链说明中的输出窗口大小推断大小。
由于在创建交换链时无法显式选择目标输出,因此建议不要创建全屏交换链。 如果交换链大小和输出窗口大小不匹配,这可能会降低演示性能。 下面是确保大小匹配的两种方法:
- 创建窗口交换链,然后使用 IDXGISwapChain::SetFullscreenState 将其全屏设置。
- 创建后立即保存指向交换链的指针,并在WM_SIZE事件期间使用它获取输出窗口大小。 然后在从窗口转换为全屏期间,使用 IDXGISwapChain::ResizeBuffers) (调整交换链缓冲区的大小。
运行时全屏呈现初始帧后,运行时可能会在调用 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_EFFECT和DXGI_SWAP_CHAIN_FLAG值。 通过这些值,可以使用预Windows 8 API 使用翻转模型演示和内容保护等功能。
但是,若要使用立体声演示并更改翻转模型的大小行为,应用程序必须使用 IDXGIFactory2::CreateSwapChainForHwnd 方法。 否则,后台缓冲区内容会隐式缩放以适应呈现目标大小;也就是说,无法关闭缩放。
Windows 应用商店应用说明
如果 Windows 应用商店应用在指定了全屏的情况下调用 CreateSwapChain , 则 CreateSwapChain 将失败。Windows 应用商店应用调用 IDXGIFactory2::CreateSwapChainForCoreWindow 方法来创建交换链。
有关如何为交换链的后台缓冲区选择格式的信息,请参阅 转换颜色空间的数据。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | dxgi.h |
Library | DXGI.lib |