Метод 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**
Указатель на переменную, получающую указатель на интерфейс IDXGISwapChain для цепочки буферов, создаваемой CreateSwapChain .
Возвращаемое значение
Тип: HRESULT
DXGI_ERROR_INVALID_CALL , если pDesc или ppSwapChain имеет значение NULL, DXGI_STATUS_OCCLUDED, если вы запрашиваете полноэкранный режим и он недоступен или E_OUTOFMEMORY. Также могут быть возвращены другие коды ошибок, определенные типом передаваемого устройства.
Комментарии
Если ширина буфера или высота буфера равна нулю, размеры будут выведены из размера окна вывода в описании цепочки буферов.
Так как при создании цепочки буферов не удается явно выбрать целевой выход, рекомендуется не создавать полноэкранную цепочку буферов. Это может снизить производительность презентации, если размер цепочки буферов и размер окна вывода не совпадают. Ниже приведены два способа убедиться, что размеры совпадают.
- Создайте оконную цепочку буферов, а затем настройте ее в полноэкранный режим с помощью IDXGISwapChain::SetFullscreenState.
- Сохраните указатель на цепочку буферов сразу после создания и используйте его для получения размера окна вывода во время события WM_SIZE. Затем измените размер буферов цепочки буферов (с помощью IDXGISwapChain::ResizeBuffers) во время перехода из оконного режима в полноэкранный режим.
После того как среда выполнения отрисовывает начальный кадр в полноэкранном режиме, среда выполнения может неожиданно выйти из полноэкранного режима во время вызова IDXGISwapChain::P resent. Чтобы обойти эту проблему, мы рекомендуем выполнить следующий код сразу после вызова CreateSwapChain для создания цепочки буферов в полноэкранном режиме (элемент WindowedDXGI_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);
}
В описании цепочки буферов можно указать DXGI_SWAP_EFFECT и DXGI_SWAP_CHAIN_FLAG значения, на которые указывает pDesc . Эти значения позволяют использовать такие функции, как представление модели переворачивания и защита содержимого с помощью API предварительного Windows 8.
Однако для использования стереопрезентации и изменения изменения размера для модели flip приложения должны использовать метод IDXGIFactory2::CreateSwapChainForHwnd . В противном случае содержимое обратного буфера неявно масштабируется в соответствии с целевым размером презентации; то есть вы не можете отключить масштабирование.
Заметки для приложений Магазина Windows
Если приложение Магазина Windows вызывает CreateSwapChain с указанным в полноэкранном режиме, createSwapChain завершается ошибкой .Приложения Магазина Windows вызывают метод IDXGIFactory2::CreateSwapChainForCoreWindow для создания цепочки буферов.
Сведения о том, как выбрать формат обратного буфера цепочки буферов, см. в разделе Преобразование данных для цветового пространства.
Требования
Требование | Значение |
---|---|
Целевая платформа | Windows |
Header | dxgi.h |
Библиотека | DXGI.lib |
См. также раздел
Для достижения оптимальной производительности используйте модель переворачивания DXGI.