IDXGISwapChain::ResizeBuffers-Methode (dxgi.h)
Ändert die Größe, das Format und die Anzahl der Puffer der Swapchain. Dies sollte aufgerufen werden, wenn die Größe des Anwendungsfensters geändert wird.
Syntax
HRESULT ResizeBuffers(
UINT BufferCount,
UINT Width,
UINT Height,
DXGI_FORMAT NewFormat,
UINT SwapChainFlags
);
Parameter
BufferCount
Typ: UINT
Die Anzahl der Puffer in der Swapchain (einschließlich aller Back- und Frontpuffer). Diese Zahl kann sich von der Anzahl der Puffer unterscheiden, mit denen Sie die Swapchain erstellt haben. Diese Zahl darf nicht größer als DXGI_MAX_SWAP_CHAIN_BUFFERS sein. Legen Sie diese Zahl auf 0 fest, um die vorhandene Anzahl von Puffern in der Swapchain beizubehalten. Sie können nicht weniger als zwei Puffer für das Flip-Präsentationsmodell angeben.
Width
Typ: UINT
Die neue Breite des Hintergrundpuffers. Wenn Sie null angeben, verwendet DXGI die Breite des Clientbereichs des Zielfensters. Sie können die Breite nicht als Null angeben, wenn Sie die IDXGIFactory2::CreateSwapChainForComposition-Methode aufgerufen haben, um die Swapchain für eine Kompositionsoberfläche zu erstellen.
Height
Typ: UINT
Die neue Höhe des Rückpuffers. Wenn Sie null angeben, verwendet DXGI die Höhe des Clientbereichs des Zielfensters. Sie können die Höhe nicht als Null angeben, wenn Sie die IDXGIFactory2::CreateSwapChainForComposition-Methode aufgerufen haben, um die Swapchain für eine Kompositionsoberfläche zu erstellen.
NewFormat
Typ: DXGI_FORMAT
Ein DXGI_FORMAT typisierter Wert für das neue Format des Rückpuffers. Legen Sie diesen Wert auf DXGI_FORMAT_UNKNOWN fest, um das vorhandene Format des Hintergrundpuffers beizubehalten. Das Flip-Präsentationsmodell unterstützt einen eingeschränkteren Satz von Formaten als das Bitblockübertragungsmodell (Bitblt).
SwapChainFlags
Typ: UINT
Eine Kombination aus DXGI_SWAP_CHAIN_FLAG typisierten Werten, die mithilfe einer bitweisen OR-Operation kombiniert werden. Der resultierende Wert gibt Optionen für das Swapchainverhalten an.
Rückgabewert
Typ: HRESULT
Gibt bei erfolgreicher Ausführung S_OK zurück. andernfalls ein Fehlercode. Eine Liste der Fehlercodes finden Sie unter DXGI_ERROR.
Hinweise
Sie können die Größe einer Swapchain nur ändern, wenn Sie alle ausstehenden Verweise auf die zugehörigen Backpuffer freigeben. Sie müssen alle direkten und indirekten Verweise auf die Hintergrundpuffer freigeben, damit ResizeBuffers erfolgreich ist.
Direkte Verweise werden von der Anwendung gespeichert, nachdem addRef für eine Ressource aufgerufen wurde.
Indirekte Verweise werden von Ansichten an eine Ressource gespeichert, die eine Ansicht der Ressource an einen Gerätekontext bindet, eine Befehlsliste, die die Ressource verwendet, eine Befehlsliste, die eine Ansicht für diese Ressource verwendet, eine Befehlsliste, die eine andere Befehlsliste ausgeführt hat, die die Ressource verwendet hat usw.
Stellen Sie vor dem Aufrufen von ResizeBuffers sicher, dass die Anwendung alle Verweise (durch Aufrufen der entsprechenden Anzahl von Releaseaufrufen ) für die Ressourcen, alle Ansichten der Ressource und alle Befehlslisten freigibt, die entweder die Ressourcen oder Ansichten verwenden, und stellen Sie sicher, dass weder die Ressource noch eine Sicht an einen Gerätekontext gebunden ist. Sie können ID3D11DeviceContext::ClearState verwenden, um sicherzustellen, dass alle Verweise freigegeben werden. Wenn eine Ansicht an einen verzögerten Kontext gebunden ist, müssen Sie auch die teilweise erstellte Befehlsliste verwerfen (durch Aufrufen von ID3D11DeviceContext::ClearState, dann ID3D11DeviceContext::FinishCommandList und dann Release in der Befehlsliste). Nachdem Sie ResizeBuffers aufgerufen haben, können Sie Schnittstellen über IDXGISwapChain::GetBuffer erneut abfragen.
Rufen Sie für Swapchains, die Sie mit DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE erstellt haben, vor dem Aufrufen von ResizeBuffers auch IDXGISurface1::ReleaseDC auf der Backpufferoberfläche der Swapchain auf, um sicherzustellen, dass keine ausstehenden GDI-Gerätekontexte (DCs) geöffnet sind.
Es wird empfohlen, ResizeBuffers aufzurufen, wenn die Größe eines Clientfensters geändert wird (d. a. wenn eine Anwendung eine WM_SIZE Nachricht empfängt).
Der einzige Unterschied zwischen IDXGISwapChain::ResizeBuffers in Windows 8 und Windows 7 ist die Verwendung von Flip-Präsentationsmodell-Swapchains, die Sie mit festgelegtem DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL oder DXGI_SWAP_EFFECT_FLIP_DISCARD Wert erstellen. In Windows 8 müssen Sie ResizeBuffers aufrufen, um einen Übergang zwischen Vollbildmodus und Fenstermodus zu realisieren. Andernfalls schlägt der nächste Aufruf der IDXGISwapChain::P resent-Methode fehl.
Anforderungen
Zielplattform | Windows |
Kopfzeile | dxgi.h |
Bibliothek | DXGI.lib |