Freigeben über


IDXGIFactory2::CreateSwapChainForCoreWindow-Methode (dxgi1_2.h)

Erstellt eine Swapchain, die dem CoreWindow-Objekt für das Ausgabefenster für die Swapchain zugeordnet ist.

Syntax

HRESULT CreateSwapChainForCoreWindow(
  [in]           IUnknown                    *pDevice,
  [in]           IUnknown                    *pWindow,
  [in]           const DXGI_SWAP_CHAIN_DESC1 *pDesc,
  [in, optional] IDXGIOutput                 *pRestrictToOutput,
  [out]          IDXGISwapChain1             **ppSwapChain
);

Parameter

[in] pDevice

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] pWindow

Ein Zeiger auf das CoreWindow-Objekt , das der Swapchain zugeordnet ist, die createSwapChainForCoreWindow erstellt.

[in] pDesc

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

[in, optional] pRestrictToOutput

Ein Zeiger auf die IDXGIOutput-Schnittstelle , auf die die Swapchain beschränkt ist. Wenn die Swapchain in eine andere Ausgabe verschoben wird, ist der Inhalt schwarz. Optional können Sie diesen Parameter auf ein Ausgabeziel festlegen, das DXGI_PRESENT_RESTRICT_TO_OUTPUT verwendet, um den Inhalt dieser Ausgabe einzuschränken. Wenn Sie diesen Parameter nicht zum Einschränken von Inhalten auf einem Ausgabeziel festlegen, können Sie ihn auf NULL festlegen.

[out] ppSwapChain

Ein Zeiger auf eine Variable, die einen Zeiger auf die IDXGISwapChain1-Schnittstelle für die Von CreateSwapChainForCoreWindow erstellte Swapchain empfängt.

Rückgabewert

CreateSwapChainForCoreWindow gibt Folgendes zurück:

  • S_OK, wenn eine Swapchain erfolgreich erstellt wurde.
  • E_OUTOFMEMORY, wenn kein Arbeitsspeicher verfügbar ist, um den Vorgang abzuschließen.
  • DXGI_ERROR_INVALID_CALL , wenn die aufrufende Anwendung ungültige Daten bereitgestellt hat, z. B. wenn pDesc oder ppSwapChainNULL ist.
  • Möglicherweise weitere Fehlercodes, die im Thema DXGI_ERROR beschrieben werden, die durch den Gerätetyp definiert sind, den Sie an pDevice übergeben.

Plattformupdate für Windows 7: Unter Windows 7 oder Windows Server 2008 R2 mit installiertem Plattformupdate für Windows 7 schlägt CreateSwapChainForCoreWindow mit E_NOTIMPL fehl. Weitere Informationen zum Plattformupdate für Windows 7 finden Sie unter Plattformupdate für Windows 7.

Hinweise

Hinweis Verwenden Sie diese Methode in Windows Store-Apps anstelle von IDXGIFactory2::CreateSwapChainForHwnd.
 
Wenn Sie die Breite, Höhe oder beides (Width - und Height-Elemente von DXGI_SWAP_CHAIN_DESC1 , auf die pDesc zeigt) der Swapchain als Null angeben, ruft die Laufzeit die Größe aus dem Ausgabefenster ab, das der pWindow-Parameter angibt.

Anschließend können Sie die IDXGISwapChain1::GetDesc1-Methode aufrufen, um den zugewiesenen Width- oder Height-Wert abzurufen.

Da Sie einem CoreWindow jeweils nur eine Swapchain des Flip-Präsentationsmodells (pro Schicht) zuordnen können, kann die Microsoft Direct3D 11-Richtlinie zum Zurückstellen der Zerstörung von Objekten Probleme verursachen, wenn Sie versuchen, eine Swapchain des Flip-Präsentationsmodells zu zerstören und durch eine andere Swapchain zu ersetzen. Weitere Informationen zu dieser Situation finden Sie unter Verzögerte Zerstörungsprobleme mit Flip-Präsentations-Swapchains.

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

Überlappende Swapchains

Ab Windows 8.1 ist es möglich, eine zusätzliche Swapchain in der Vordergrundebene zu erstellen. Eine Vordergrund-Swapchain kann verwendet werden, um UI-Elemente in nativer Auflösung zu rendern und gleichzeitig das Echtzeitrendering in der Swapchain im Hintergrund (z. B. Gameplay) hochzuskalieren. Dies ermöglicht Szenarien, in denen Rendering mit niedrigerer Auflösung für schnellere Füllraten erforderlich ist, ohne jedoch die Qualität der Benutzeroberfläche zu beeinträchtigen.

Vordergrund-Swapchains werden erstellt, indem das DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER Swapchainflag in der DXGI_SWAP_CHAIN_DESC1 festgelegt wird, auf die pDesc zeigt. Vordergrund-Swapchains müssen auch den DXGI_ALPHA_MODE_PREMULTIPLIED Alphamodus und DXGI_SCALING_NONE verwenden. Prämultipliziertes Alpha bedeutet, dass die Farbwerte jedes Pixels bereits mit dem Alphawert multipliziert werden, bevor der Frame angezeigt wird. Ein BGRA-Pixel mit 100 % Weiß und einem Alpha von 50 % wird beispielsweise auf (0,5, 0,5, 0,5, 0,5) festgelegt. Der Alphaprämultiplizierungsschritt kann in der Ausgabezusammenführungsphase ausgeführt werden, indem ein App-Mischzustand (siehe ID3D11BlendState) angewendet wird, wobei das SrcBlend-Feld der D3D11_RENDER_TARGET_BLEND_DESC-Struktur auf D3D11_SRC_ALPHA festgelegt ist. Wenn der Schritt der Alphaprämultiplikation nicht erfolgt, erscheinen Farben für die Vordergrund-Swapchain heller als erwartet.

Die Vordergrund-Swapchain verwendet Mehrplanenüberlagerungen, wenn sie von der Hardware unterstützt wird. Rufen Sie IDXGIOutput2::SupportsOverlays auf, um den Adapter auf Overlayunterstützung abzufragen.

Im folgenden Beispiel wird eine Vordergrund-Swapchain für einen CoreWindow erstellt:


DXGI_SWAP_CHAIN_DESC1 swapChainDesc = { 0 };

swapChainDesc.Width = static_cast<UINT>(m_d3dRenderTargetSize.Width);
swapChainDesc.Height = static_cast<UINT>(m_d3dRenderTargetSize.Height);
swapChainDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
swapChainDesc.Stereo = false;
swapChainDesc.SampleDesc.Count = 1; // Don't use multi-sampling.
swapChainDesc.SampleDesc.Quality = 0;
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.BufferCount = 2;
swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
swapChainDesc.Flags = DXGI_SWAP_CHAIN_FLAG_FOREGROUND_LAYER;
swapChainDesc.AlphaMode = DXGI_ALPHA_MODE_PREMULTIPLIED;
swapChainDesc.Scaling = DXGI_SCALING_NONE;

ComPtr<IDXGISwapChain1> swapChain;
HRESULT hr = dxgiFactory->CreateSwapChainForCoreWindow(
    m_d3dDevice.Get(),
    reinterpret_cast<IUnknown*>(m_window.Get()),
    &swapChainDesc,
    nullptr,
    &swapChain
    );

Präsentieren Sie beide Swapchains nach Abschluss des Renderings zusammen.

Im folgenden Beispiel werden beide Swapchains dargestellt:


HRESULT hr = m_swapChain->Present(1, 0);

if (SUCCEEDED(hr) && m_foregroundSwapChain)
{
    m_foregroundSwapChain->Present(1, 0);
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 8 und Plattformupdate für Windows 7 [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows Server 2012 und Plattformupdate für Windows Server 2008 R2 [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile dxgi1_2.h
Bibliothek Dxgi.lib

Weitere Informationen

CoreWindow

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

IDXGIFactory2