Метод 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. Также могут быть возвращены другие коды ошибок, определенные типом передаваемого устройства.

Комментарии

Примечание При вызове этого API в процессе сеанса 0 он возвращает DXGI_ERROR_NOT_CURRENTLY_AVAILABLE.
 
Если вы пытаетесь создать цепочку буферов в полноэкранном режиме, а полноэкранный режим недоступен, цепочка буферов будет создана в оконном режиме и будет возвращена DXGI_STATUS_OCCLUDED.

Если ширина буфера или высота буфера равна нулю, размеры будут выведены из размера окна вывода в описании цепочки буферов.

Так как при создании цепочки буферов не удается явно выбрать целевой выход, рекомендуется не создавать полноэкранную цепочку буферов. Это может снизить производительность презентации, если размер цепочки буферов и размер окна вывода не совпадают. Ниже приведены два способа убедиться, что размеры совпадают.

  • Создайте оконную цепочку буферов, а затем настройте ее в полноэкранный режим с помощью IDXGISwapChain::SetFullscreenState.
  • Сохраните указатель на цепочку буферов сразу после создания и используйте его для получения размера окна вывода во время события WM_SIZE. Затем измените размер буферов цепочки буферов (с помощью IDXGISwapChain::ResizeBuffers) во время перехода из оконного режима в полноэкранный режим.
Если цепочка буферов находится в полноэкранном режиме, перед ее освобождением необходимо использовать setFullscreenState , чтобы переключить ее в оконный режим. Дополнительные сведения о выпуске цепочки буферов см. в разделе "Уничтожение цепочки буферов" статьи Обзор DXGI.

После того как среда выполнения отрисовывает начальный кадр в полноэкранном режиме, среда выполнения может неожиданно выйти из полноэкранного режима во время вызова 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

Для достижения оптимальной производительности используйте модель переворачивания DXGI.

IDXGIFactory