IDXGIFactory::CreateSwapChain-Methode (dxgi.h)

[Ab Direct3D 11.1 wird empfohlen, createSwapChain nicht mehr zum Erstellen einer Swapchain zu verwenden. Verwenden Sie stattdessen CreateSwapChainForHwnd, CreateSwapChainForCoreWindow oder CreateSwapChainForComposition , je nachdem, wie Sie die Swapchain erstellen möchten.]

Erstellt eine Swapchain.

Syntax

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

Parameter

[in] pDevice

Typ: IUnknown*

Für Direct3D 11 und frühere Versionen von Direct3D ist dies ein Zeiger auf das Direct3D-Gerät für die Swapchain. Für Direct3D 12 ist dies ein Zeiger auf eine direkte Befehlswarteschlange (siehe ID3D12CommandQueue). Dieser Parameter darf nicht NULL sein.

[in] pDesc

Typ: DXGI_SWAP_CHAIN_DESC*

Ein Zeiger auf eine DXGI_SWAP_CHAIN_DESC-Struktur für die Swapchainbeschreibung. Dieser Parameter darf nicht NULL sein.

[out] ppSwapChain

Typ: IDXGISwapChain**

Ein Zeiger auf eine Variable, die einen Zeiger auf die IDXGISwapChain-Schnittstelle für die von CreateSwapChain erstellte Swapchain empfängt.

Rückgabewert

Typ: HRESULT

DXGI_ERROR_INVALID_CALL , wenn pDesc oder ppSwapChainNULL ist, DXGI_STATUS_OCCLUDED, wenn Sie den Vollbildmodus anfordern und nicht verfügbar ist, oder E_OUTOFMEMORY. Andere Fehlercodes, die durch den Typ des übergebenen Geräts definiert sind, können ebenfalls zurückgegeben werden.

Hinweise

Hinweis Wenn Sie diese API in einem Sitzung 0-Prozess aufrufen, wird DXGI_ERROR_NOT_CURRENTLY_AVAILABLE zurückgegeben.
 
Wenn Sie versuchen, eine Swapchain im Vollbildmodus zu erstellen und der Vollbildmodus nicht verfügbar ist, wird die Swapchain im Fenstermodus erstellt und DXGI_STATUS_OCCLUDED zurückgegeben.

Wenn die Pufferbreite oder die Pufferhöhe null ist, werden die Größen aus der Ausgabefenstergröße in der Swapchainbeschreibung abgeleitet.

Da die Zielausgabe beim Erstellen der Swapchain nicht explizit ausgewählt werden kann, wird empfohlen, keine Vollbild-Swapchain zu erstellen. Dies kann die Präsentationsleistung verringern, wenn die Swapchaingröße und die Ausgabefenstergröße nicht übereinstimmen. Es gibt zwei Möglichkeiten, um sicherzustellen, dass die Größen übereinstimmen:

  • Erstellen Sie eine Swapchain mit Fenstern, und legen Sie sie dann mit IDXGISwapChain::SetFullscreenState im Vollbildmodus fest.
  • Speichern Sie unmittelbar nach der Erstellung einen Zeiger auf die Swapchain, und verwenden Sie ihn, um die Ausgabefenstergröße während eines WM_SIZE-Ereignisses abzurufen. Ändern Sie dann die Größe der Swapchainpuffer (mit IDXGISwapChain::ResizeBuffers) während des Übergangs von Fenstern zu Vollbild.
Wenn sich die Swapchain im Vollbildmodus befindet, müssen Sie vor der Freigabe SetFullscreenState verwenden, um sie in den Fenstermodus zu wechseln. Weitere Informationen zum Freigeben einer Swapchain finden Sie im Abschnitt "Zerstören einer Swapchain" der DXGI-Übersicht.

Nachdem die Runtime den ersten Frame im Vollbildmodus gerendert hat, kann die Laufzeit während eines Aufrufs von IDXGISwapChain::P resent unerwartet den Vollbildmodus beenden. Um dieses Problem zu umgehen, wird empfohlen, den folgenden Code direkt nach dem Aufrufen von CreateSwapChain auszuführen, um eine Vollbild-Swapchain zu erstellen (Windowed member of DXGI_SWAP_CHAIN_DESC auf FALSE festgelegt).


// 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);
}

Sie können DXGI_SWAP_EFFECT - und DXGI_SWAP_CHAIN_FLAG-Werte in der Swapchainbeschreibung angeben, auf die pDesc verweist. Mit diesen Werten können Sie Features wie Flip-Modellpräsentation und Inhaltsschutz mithilfe von ApIs vor Windows 8 verwenden.

Um jedoch die Stereodarstellung zu verwenden und das Größenänderungsverhalten für das Flip-Modell zu ändern, müssen Anwendungen die IDXGIFactory2::CreateSwapChainForHwnd-Methode verwenden. Andernfalls wird der Inhalt des Rückpuffers implizit entsprechend der Größe des Präsentationsziels skaliert. Das heißt, Sie können die Skalierung nicht deaktivieren.

Hinweise für Windows Store-Apps

Wenn eine Windows Store-App CreateSwapChain mit Dem Vollbildmodus aufruft, schlägt CreateSwapChain fehl.

Windows Store-Apps rufen die IDXGIFactory2::CreateSwapChainForCoreWindow-Methode auf, um eine Swapchain zu erstellen.

Informationen zum Auswählen eines Formats für den Rückpuffer der Swapchain finden Sie unter Konvertieren von Daten für den Farbraum.

Anforderungen

Anforderung Wert
Zielplattform Windows
Kopfzeile dxgi.h
Bibliothek DXGI.lib

Weitere Informationen

DXGI-Schnittstellen

Verwenden Sie das DXGI-Flip-Modell, um eine optimale Leistung zu erzielen.

IDXGIFactory