Auf dieser Seite

QRhiSwapChain Class

Swapchain-Ressource. Mehr...

Überschrift: #include <rhi/qrhi.h>
CMake: find_package(Qt6 REQUIRED COMPONENTS GuiPrivate)
target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate)
qmake: QT += gui-private
Seit: Qt 6.6
Erbt von: QRhiResource

Öffentliche Typen

enum Flag { SurfaceHasPreMulAlpha, SurfaceHasNonPreMulAlpha, sRGB, UsedAsTransferSource, NoVSync, MinimalBufferCount }
flags Flags
enum Format { SDR, HDRExtendedSrgbLinear, HDR10, HDRExtendedDisplayP3Linear }
enum StereoTargetBuffer { LeftBuffer, RightBuffer }

Öffentliche Funktionen

virtual bool createOrResize() = 0
virtual QRhiCommandBuffer *currentFrameCommandBuffer() = 0
virtual QRhiRenderTarget *currentFrameRenderTarget() = 0
virtual QRhiRenderTarget *currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)
QSize currentPixelSize() const
QRhiRenderBuffer *depthStencil() const
QRhiSwapChain::Flags flags() const
QRhiSwapChain::Format format() const
virtual QRhiSwapChainHdrInfo hdrInfo()
virtual bool isFormatSupported(QRhiSwapChain::Format f) = 0
virtual QRhiRenderPassDescriptor *newCompatibleRenderPassDescriptor() = 0
QRhiSwapChainProxyData proxyData() const
QRhiRenderPassDescriptor *renderPassDescriptor() const
int sampleCount() const
void setDepthStencil(QRhiRenderBuffer *ds)
void setFlags(QRhiSwapChain::Flags f)
void setFormat(QRhiSwapChain::Format f)
void setProxyData(const QRhiSwapChainProxyData &d)
void setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)
void setSampleCount(int samples)
(since 6.9) void setShadingRateMap(QRhiShadingRateMap *map)
void setWindow(QWindow *window)
(since 6.9) QRhiShadingRateMap *shadingRateMap() const
virtual QSize surfacePixelSize() = 0
QWindow *window() const

Neu implementierte öffentliche Funktionen

virtual QRhiResource::Type resourceType() const override

Ausführliche Beschreibung

Eine Swapchain ermöglicht die Darstellung von Rendering-Ergebnissen auf einer Oberfläche. Eine Swapchain wird in der Regel durch eine Reihe von Farbpuffern unterstützt. Von diesen wird jeweils nur einer angezeigt.

Im Folgenden wird ein typisches Muster zum Erstellen und Verwalten einer Swapchain sowie einiger zugehöriger Ressourcen beschrieben, um auf eine „ QWindow “ zu rendern:

void init()
{
    sc = rhi->newSwapChain();
    ds = rhi->newRenderBuffer(QRhiRenderBuffer::DepthStencil,
                              QSize(), // no need to set the size here due to UsedWithSwapChainOnly
                              1,
                              QRhiRenderBuffer::UsedWithSwapChainOnly);
    sc->setWindow(window);
    sc->setDepthStencil(ds);
    rp = sc->newCompatibleRenderPassDescriptor();
    sc->setRenderPassDescriptor(rp);
    resizeSwapChain();
}

void resizeSwapChain()
{
    hasSwapChain = sc->createOrResize();
}

void render()
{
    if (!hasSwapChain || notExposed)
        return;

    if (sc->currentPixelSize() != sc->surfacePixelSize() || newlyExposed) {
        resizeSwapChain();
        if (!hasSwapChain)
            return;
        newlyExposed = false;
    }

    rhi->beginFrame(sc);
    // ...
    rhi->endFrame(sc);
}

Vermeiden Sie es, sich bei der Größenanpassung von Swapchains auf Größenänderungsereignisse der „ QWindow “ zu verlassen, insbesondere da die Oberflächengrößen möglicherweise nicht immer vollständig mit den von „ QWindow “ gemeldeten Abmessungen übereinstimmen. Der sichere, plattformübergreifende Ansatz besteht darin, die Überprüfung über „ surfacePixelSize()“ durchzuführen, wann immer ein neuer Frame gestartet wird.

Das Freigeben der Swapchain muss erfolgen, während das ` QWindow ` und das zugrunde liegende native Fenster vollständig aktiv und betriebsbereit sind. Aufbauend auf dem vorherigen Beispiel:

void releaseSwapChain()
{
    if (hasSwapChain) {
        sc->destroy();
        hasSwapChain = false;
    }
}

// assuming Window is our QWindow subclass
bool Window::event(QEvent *e)
{
    switch (e->type()) {
    case QEvent::UpdateRequest: // for QWindow::requestUpdate()
        render();
        break;
    case QEvent::PlatformSurface:
        if (static_cast<QPlatformSurfaceEvent *>(e)->surfaceEventType() == QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed)
            releaseSwapChain();
        break;
    default:
        break;
    }
    return QWindow::event(e);
}

Die Initialisierung der Swapchain und der Beginn des Renderns des ersten Frames können nicht zu einem beliebigen Zeitpunkt erfolgen. Der sichere, plattformübergreifende Ansatz besteht darin, sich auf „expose“-Ereignisse zu verlassen. „ QExposeEvent “ ist ein lose spezifiziertes Ereignis, das je nach Plattform immer dann gesendet wird, wenn ein Fenster zugeordnet, verdeckt oder in der Größe angepasst wird.

void Window::exposeEvent(QExposeEvent *)
{
    // initialize and start rendering when the window becomes usable for graphics purposes
    if (isExposed() && !running) {
        running = true;
        init();
    }

    // stop pushing frames when not exposed or size becomes 0
    if ((!isExposed() || (hasSwapChain && sc->surfacePixelSize().isEmpty())) && running)
        notExposed = true;

    // continue when exposed again and the surface has a valid size
    if (isExposed() && running && notExposed && !sc->surfacePixelSize().isEmpty()) {
        notExposed = false;
        newlyExposed = true;
    }

    if (isExposed() && !sc->surfacePixelSize().isEmpty())
        render();
}

Sobald das Rendern begonnen hat, ist „ QWindow::requestUpdate()“ eine einfache Möglichkeit, ein neues Bild anzufordern. Während dies auf einigen Plattformen lediglich ein kleiner Timer ist, hat es auf anderen eine spezifische Implementierung: Auf macOS oder iOS kann es beispielsweise auf CVDisplayLink basieren. Das obige Beispiel ist bereits für Aktualisierungsanforderungen vorbereitet, indem es „ QEvent::UpdateRequest “ verarbeitet.

Während QRhiSwapChain als „ QRhiRenderTarget “ fungiert, verwaltet es auch einen „ QRhiCommandBuffer “. Der Aufruf von ` QRhi::endFrame()` übermittelt die aufgezeichneten Befehle und stellt zudem eine „ present “-Anforderung in die Warteschlange. Standardmäßig erfolgt dies mit einem Swap-Intervall von 1, was bedeutet, dass die Synchronisation mit der vertikalen Bildwiederholfrequenz des Bildschirms aktiviert ist. Daher wird der Rendering-Thread, der `beginFrame()` und `endFrame()` aufruft, an die Vsync-Frequenz angepasst. Bei einigen Backends lässt sich dies deaktivieren, indem in ` flags()` `QRhiSwapChain:NoVSync ` übergeben wird.

Multisampling (MSAA) wird für die Anwendungen transparent gehandhabt, wenn es über ` setSampleCount()` angefordert wird. Sofern zutreffend, übernimmt `QRhiSwapChain` die Erstellung zusätzlicher Farbpuffer und die Ausgabe eines Multisample-Resolve-Befehls am Ende eines Frames. Für OpenGL ist es erforderlich, die entsprechende Sample-Anzahl ebenfalls über „ QSurfaceFormat “ anzufordern, indem vor der Initialisierung von „ QRhi “ die Funktion „ QSurfaceFormat::setDefaultFormat()“ aufgerufen wird.

Hinweis: Hierbei handelt es sich um eine RHI-API mit eingeschränkten Kompatibilitätsgarantien; weitere Informationen finden Sie unter QRhi.

Dokumentation zu Mitgliedstypen

enum QRhiSwapChain::Flag
flags QRhiSwapChain::Flags

Flag-Werte zur Beschreibung der Eigenschaften der Swapchain

KonstanteWertBeschreibung
QRhiSwapChain::SurfaceHasPreMulAlpha1 << 0Gibt an, dass die Zieloberfläche Transparenz mit vormultipliziertem Alpha aufweist. Dies wird beispielsweise von ` Qt Quick ` verwendet, wenn der Alphakanal auf der Ziel- QWindow aktiviert ist, da der Scenegraph-Renderer Fragmente stets mit in die Rot-, Grün- und Blauwerte multipliziertem Alpha ausgibt. Um ein plattformübergreifend identisches Verhalten zu gewährleisten, setzen Sie „ QSurfaceFormat::alphaBufferSize()“ auf der Ziel- QWindow immer auf einen Wert ungleich Null, sobald dieses Flag in der Swapchain gesetzt ist.
QRhiSwapChain::SurfaceHasNonPreMulAlpha1 << 1Gibt an, dass die Zieloberfläche Transparenz mit nicht vorvervielfachtem Alpha aufweist. Beachten Sie, dass dies auf einigen Systemen möglicherweise nicht unterstützt wird, wenn der System-Compositor stets Inhalte mit vorvervielfachtem Alpha erwartet. In diesem Fall entspricht das Verhalten bei gesetztem Flag voraussichtlich dem von `SurfaceHasPreMulAlpha`.
QRhiSwapChain::sRGB1 << 2Fordert an, ein sRGB-Format für die Farbpuffer und/oder Render-Zielansichten der Swapchain zu wählen, sofern zutreffend. Beachten Sie, dass dies bedeutet, dass die Aktualisierung und Überblendung des sRGB-Framebuffers für alle Inhalte, die auf diese Swapchain abzielen, aktiviert werden und eine Deaktivierung nicht möglich ist. Für OpenGL muss zusätzlich „ sRGBColorSpace “ im „ QSurfaceFormat “ des „ QWindow “ gesetzt werden. Gilt nur, wenn das Swapchain-Format auf „ QRhiSwapChain::SDR “ gesetzt ist.
QRhiSwapChain::UsedAsTransferSource1 << 3Gibt an, dass die Swapchain als Quelle für ein Readback in ` QRhiResourceUpdateBatch::readBackTexture()` verwendet wird.
QRhiSwapChain::NoVSync1 << 4Fordert an, das Warten auf die vertikale Synchronisation zu deaktivieren, wodurch auch eine Drosselung des Rendering-Threads vermieden wird. Das Verhalten ist backend-spezifisch und gilt nur dort, wo dies gesteuert werden kann. Einige Backends ignorieren diese Anforderung möglicherweise vollständig. Versuchen Sie bei OpenGL stattdessen, das Swap-Intervall in QWindow über QSurfaceFormat::setSwapInterval() auf 0 zu setzen.
QRhiSwapChain::MinimalBufferCount1 << 5Fordert an, die Swapchain mit der minimalen Anzahl an Puffern zu erstellen, was in der Praxis 2 ist, es sei denn, die Grafikimplementierung hat eine höhere Mindestanzahl als diese. Gilt nur für Backends, bei denen eine solche Steuerung über die Grafik-API verfügbar ist, zum Beispiel bei Vulkan. Standardmäßig liegt es im Ermessen des Backends, zu entscheiden, wie viele Puffer es anfordert (in der Praxis sind dies fast immer entweder 2 oder 3), und dies ist nicht Sache der Anwendung. Bei Vulkan beispielsweise wird das Backend jedoch wahrscheinlich die höhere Anzahl (3) bevorzugen, um beispielsweise seltsame Leistungsprobleme bei einigen Vulkan-Implementierungen auf mobilen Geräten zu vermeiden. Es könnte sein, dass es sich auf einigen Plattformen als vorteilhaft erweist, die geringere Pufferanzahl (2) zu erzwingen; dieses Flag ermöglicht es, dies zu erzwingen. Beachten Sie, dass all dies keinen Einfluss auf die Anzahl der in der Warteschlange befindlichen Frames hat; daher bereitet die CPU (QRhi) weiterhin höchstens N - 1 Frames vor der GPU vor, selbst wenn die Anzahl der Swapchain-Bildpuffer größer ist als N. (N = QRhi::FramesInFlight und typischerweise 2).

Der Typ „Flags“ ist ein `typedef` für ` QFlags<Flag>`. Er speichert eine ODER-Kombination von `Flag`-Werten.

enum QRhiSwapChain::Format

Beschreibt das Swapchain-Format. Das Standardformat ist SDR.

Diese Enumeration wird mit ` isFormatSupported()` verwendet, um vorab zu prüfen, ob die Erstellung der Swapchain im angegebenen Format von der Plattform und dem zugehörigen Bildschirm des Fensters unterstützt wird, sowie mit ` setFormat()`, um das gewünschte Format in der Swapchain festzulegen, bevor ` createOrResize()` zum ersten Mal aufgerufen wird.

KonstanteWertBeschreibung
QRhiSwapChain::SDR08-Bit-RGBA oder BGRA, je nach Backend und Plattform. Insbesondere bei OpenGL ES kann es vorkommen, dass die Plattform weniger als 8 Bit bereitstellt (z. B. aufgrund von EGL und der Auswahl eines 565- oder 444-Formats durch „ QSurfaceFormat “ – dies liegt außerhalb des Einflussbereichs von „ QRhi “). Standard-Dynamikbereich. Kann mit der Einstellung des Flags „ QRhiSwapChain::sRGB “ kombiniert werden.
QRhiSwapChain::HDRExtendedSrgbLinear116-Bit-Float-RGBA, hoher Dynamikbereich, erweiterter linearer sRGB-Farbraum (scRGB). Dies umfasst Rec. 709-Primärfarben (wie bei SDR/sRGB) und lineare Farben. Die Konvertierung in den nativen Farbraum des Displays (z. B. HDR10) erfolgt durch das Fenstersystem. Unter Windows ist dies der kanonische Farbraum des System-Compositors und stellt generell das empfohlene Format für HDR-Swapchains auf Desktop-Plattformen dar.
QRhiSwapChain::HDR10210-Bit-unsigned-int-RGB oder BGR mit 2-Bit-Alpha, hoher Dynamikbereich, HDR10 (Rec. 2020)-Farbraum mit einer ST2084-PQ-Übertragungsfunktion.
QRhiSwapChain::HDRExtendedDisplayP3Linear316-Bit-Float-RGBA, hoher Dynamikbereich, erweiterter linearer Display-P3-Farbraum. Die erste Wahl für HDR auf Plattformen wie iOS und VisionOS.

enum QRhiSwapChain::StereoTargetBuffer

Wählt den Backbuffer aus, der mit einer stereoskopischen Swapchain verwendet werden soll.

KonstanteWert
QRhiSwapChain::LeftBuffer0
QRhiSwapChain::RightBuffer1

Dokumentation der Mitgliedsfunktionen

[pure virtual] bool QRhiSwapChain::createOrResize()

Erstellt die Swapchain, falls dies noch nicht geschehen ist, und passt die Größe der Swapchain-Puffer an die aktuelle Größe der Zieloberfläche an. Rufen Sie diese Funktion immer dann auf, wenn sich die Größe der Zieloberfläche gegenüber zuvor geändert hat.

Hinweis: Rufen Sie ` destroy()` nurauf , wenn die Swapchain vollständig freigegeben werden muss, typischerweise bei ` QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed`. Um die Größe anzupassen, rufen Sie einfach `createOrResize()` auf.

Gibt bei Erfolg ` true ` zurück, bei einem Fehler einer Grafikoperation ` false `. Unabhängig vom Rückgabewert ist der Aufruf von ` destroy()` immer sicher.

[pure virtual] QRhiCommandBuffer *QRhiSwapChain::currentFrameCommandBuffer()

Gibt einen Befehlspuffer zurück, in dem Rendering-Befehle und Ressourcenaktualisierungen innerhalb eines Blocks „ beginFrame – endFrame “ aufgezeichnet werden können, vorausgesetzt, beginFrame() wurde mit dieser Swapchain aufgerufen.

Hinweis: Das zurückgegebene Objekt ist auch nach endFrame() bis zum nächsten beginFrame() gültig, der zurückgegebene Befehlspuffer sollte dann jedoch nicht mehr zum Aufzeichnen von Befehlen verwendet werden. Stattdessen kann er genutzt werden, um Daten abzufragen, die während des Frames (oder in vorherigen Frames) gesammelt wurden, beispielsweise durch Aufruf von lastCompletedGpuTime().

Hinweis: Der Wert darf nicht zwischengespeichert und zwischen Frames wiederverwendet werden. Der Aufrufer sollte das zurückgegebene Objekt nicht weiter behalten, sobald „ beginFrame()“ erneut aufgerufen wird. Stattdessen sollte das Befehlspuffer-Objekt durch erneuten Aufruf dieser Funktion erneut abgefragt werden.

[pure virtual] QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget()

Gibt ein Renderziel zurück, das mit `beginPass()` verwendet werden kann, um den aktuellen Backbuffer der Swapchain zu rendern. Nur gültig innerhalb eines Blocks aus ` QRhi::beginFrame()` – ` QRhi::endFrame()`, in dem `beginFrame()` mit dieser Swapchain aufgerufen wurde.

Hinweis: Der Wert darf nicht zwischengespeichert und zwischen den Frames wiederverwendet werden.

[virtual] QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)

Gibt ein Renderziel zurück, das mit `beginPass()` verwendet werden kann, um in den linken oder rechten Backbuffer der Swapchain zu rendern. Diese Überladung sollte nur beim stereoskopischen Rendering verwendet werden, d. h. wenn die zugehörige ` QWindow ` durch zwei Farbpuffer gestützt wird – einen für jedes Auge – statt nur durch einen.

Wenn stereoskopisches Rendering nicht unterstützt wird, ist der Rückgabewert das Standard-Renderziel. Es wird von allen Hardware-Backends mit Ausnahme von Metal in Kombination mit ` QSurfaceFormat::StereoBuffers` unterstützt, vorausgesetzt, es wird vom Grafik- und Anzeigetreiber-Stack zur Laufzeit unterstützt. Die Backends „Metal“ und „Null“ geben bei dieser Überladung das Standard-Renderziel zurück.

Hinweis: Der Wert darf nicht zwischengespeichert und zwischen den Frames wiederverwendet werden.

QSize QRhiSwapChain::currentPixelSize() const

Gibt die Größe zurück, mit der die Swapchain zuletzt erfolgreich erstellt wurde. Verwenden Sie diese Angabe, um zu entscheiden, ob ` createOrResize()` erneut aufgerufen werden muss: Wenn ` currentPixelSize() != surfacePixelSize() ` ist, muss die Swapchain in ihrer Größe angepasst werden.

Hinweis: Typische Rendering-Logik ruft diese Funktion auf, um die Ausgabegröße zu ermitteln, wenn mit der Vorbereitung eines neuen Frames begonnen wird, und stützt abhängige Berechnungen (wie z. B. den Viewport) auf die von dieser Funktion zurückgegebene Größe.

Zwar entspricht der Wert in vielen Fällen dem von ` QWindow::size() * QWindow::devicePixelRatio()`, doch ist nicht garantiert, dass die von ` QWindow` gemeldete Größe auf allen Plattformen und bei allen Implementierungen der Grafik-API korrekt ist. Die Verwendung dieser Funktion wird daher dringend empfohlen, wann immer die Abmessungen der Ausgabeebene oder -fläche in Pixeln ermittelt werden müssen.

Dies hat zudem den zusätzlichen Vorteil, dass potenzielle Datenkonflikte vermieden werden, wenn „ QRhi “ in einem dedizierten Rendering-Thread verwendet wird, da der Aufruf von „ QWindow “-Funktionen, die möglicherweise auf im Hauptthread aktualisierte Daten zugreifen, vermieden wird.

Siehe auch surfacePixelSize().

QRhiRenderBuffer *QRhiSwapChain::depthStencil() const

Gibt den aktuell zugeordneten Renderbuffer für Depth-Stencil zurück.

Siehe auch „ setDepthStencil()“.

QRhiSwapChain::Flags QRhiSwapChain::flags() const

Gibt die aktuell gesetzten Flags zurück.

Siehe auch setFlags().

QRhiSwapChain::Format QRhiSwapChain::format() const

Gibt das aktuell eingestellte Format zurück.

Siehe auch „ setFormat()“.

[virtual] QRhiSwapChainHdrInfo QRhiSwapChain::hdrInfo()

Gibt die HDR-Informationen für das zugehörige Display zurück.

Gehen Sie nicht davon aus, dass dies ein ressourcenschonender Vorgang ist. Je nach Plattform führt diese Funktion verschiedene Plattformabfragen durch, die sich auf die Leistung auswirken können.

Hinweis: Kann vor ` createOrResize()` aufgerufen werden, solange das Fenster ` set` ist.

Hinweis: Was beim Verschieben eines Fensters mit einer initialisierten Swapchain zwischen Bildschirmen (HDR zu HDR mit unterschiedlichen Eigenschaften, HDR zu SDR usw.) geschieht, ist derzeit nicht genau definiert und hängt stark vom Fenstersystem und dem Compositor ab, wobei das Verhalten zwischen den Plattformen variieren kann. Derzeit garantiert ` QRhi ` nur, dass `hdrInfo()` gültige Daten zurückgibt – sofern verfügbar – für das Display, zu dem das mit der Swapchain verbundene Fenster zum Zeitpunkt des Aufrufs von ` createOrResize()` gehörte.

Siehe auch QRhiSwapChainHdrInfo.

[pure virtual] bool QRhiSwapChain::isFormatSupported(QRhiSwapChain::Format f)

Gibt „true“ zurück, wenn das angegebene Swapchain-Format f unterstützt wird. SDR wird immer unterstützt.

Hinweis: Kann unabhängig von ` createOrResize()` aufgerufen werden, jedoch muss ` window()` bereits festgelegt sein. Ein Aufruf ohne festgelegtes Fenster kann je nach Backend und Plattform zu unerwarteten Ergebnissen führen (höchstwahrscheinlich „false“ für jedes HDR-Format), da die Unterstützung von HDR-Formaten in der Regel an die Ausgabe (den Bildschirm) gebunden ist, zu der das mit der Swapchain verknüpfte Fenster zu einem bestimmten Zeitpunkt gehört. Wenn das Ergebnis für ein HDR-Format „true“ ist, sollte das Erstellen der Swapchain mit diesem Format erfolgreich sein, solange das Fenster in der Zwischenzeit nicht auf einen anderen Bildschirm verschoben wird.

Diese Funktion wird hauptsächlich dazu verwendet, sie vor dem ersten Aufruf von ` createOrResize()` zu rufen, nachdem das Fenster bereits festgelegt wurde. Dies ermöglicht es den ` QRhi `-Backends, plattform- oder Fenstersystemspezifische Abfragen durchzuführen, um festzustellen, ob das Fenster (und der Bildschirm, auf dem es sich befindet) in der Lage ist, echte HDR-Ausgabe im angegebenen Format zu liefern.

Wenn das Format als unterstützt gemeldet wird, rufen Sie ` setFormat()` auf, um das angeforderte Format festzulegen, und rufen Sie anschließend ` createOrResize()` auf. Beachten Sie jedoch die damit verbundenen Konsequenzen: Die erfolgreiche Anforderung eines HDR-Formats bedeutet, dass Sie sich mit einem anderen Farbraum auseinandersetzen müssen, möglicherweise eine Weißpegelkorrektur für nicht-HDR-fähige Inhalte vornehmen, Tonemapping-Methoden anpassen, die Einstellungen für Offscreen-Renderziele anpassen müssen usw.

Siehe auch setFormat().

[pure virtual] QRhiRenderPassDescriptor *QRhiSwapChain::newCompatibleRenderPassDescriptor()

Gibt ein neues ` QRhiRenderPassDescriptor ` zurück, das mit dieser Swapchain kompatibel ist.

Der zurückgegebene Wert wird auf zwei Arten verwendet: Er kann an die Funktionen ` setRenderPassDescriptor()` und ` QRhiGraphicsPipeline::setRenderPassDescriptor()` übergeben werden. Ein Render-Pass-Deskriptor beschreibt die Anhänge (Farbe, Tiefe/Stencil) sowie das Lade-/Speicherverhalten, das durch die Funktion ` flags()` beeinflusst werden kann. Ein ` QRhiGraphicsPipeline ` kann nur in Kombination mit einer Swapchain verwendet werden, für die ` compatible ` QRhiRenderPassDescriptor festgelegt ist.

Siehe auch createOrResize().

QRhiSwapChainProxyData QRhiSwapChain::proxyData() const

Gibt die aktuell festgelegten Proxy-Daten zurück.

Siehe auch „ setProxyData()“.

QRhiRenderPassDescriptor *QRhiSwapChain::renderPassDescriptor() const

Gibt das aktuell zugeordnete „ QRhiRenderPassDescriptor “-Objekt zurück.

Siehe auch setRenderPassDescriptor().

[override virtual] QRhiResource::Type QRhiSwapChain::resourceType() const

Implementiert neu: QRhiResource::resourceType() const.

Gibt den Ressourcentyp zurück.

int QRhiSwapChain::sampleCount() const

Gibt die aktuell eingestellte Sample-Anzahl zurück. Der Wert 1 bedeutet, dass kein Multisample-Antialiasing verwendet wird.

Siehe auch setSampleCount().

void QRhiSwapChain::setDepthStencil(QRhiRenderBuffer *ds)

Legt den Renderbuffer „ ds “ als Tiefen-Stencil-Puffer fest.

Siehe auch ` depthStencil()`.

void QRhiSwapChain::setFlags(QRhiSwapChain::Flags f)

Setzt die Flags „ f “.

Siehe auch „ flags()“.

void QRhiSwapChain::setFormat(QRhiSwapChain::Format f)

Legt das Format „ f “ fest.

Vermeiden Sie die Festlegung von Formaten, die von ` isFormatSupported()` als nicht unterstützt gemeldet werden. Beachten Sie, dass die Unterstützung für ein bestimmtes Format davon abhängen kann, auf welchem Bildschirm das der Swapchain zugeordnete Fenster geöffnet ist. Auf einigen Plattformen, wie z. B. Windows und macOS, muss die HDR-Ausgabe in den Anzeigeeinstellungen aktiviert sein, damit die HDR-Ausgabe funktioniert.

Weitere Informationen zur Ausgabe mit hohem Dynamikbereich finden Sie unter isFormatSupported(), QRhiSwapChainHdrInfo und Format.

Siehe auch format().

void QRhiSwapChain::setProxyData(const QRhiSwapChainProxyData &d)

Legt die Proxy-Daten d fest.

Siehe auch proxyData() und QRhi::updateSwapChainProxyData().

void QRhiSwapChain::setRenderPassDescriptor(QRhiRenderPassDescriptor *desc)

Arbeitet mit der „ QRhiRenderPassDescriptor “ zusammen desc.

Siehe auch renderPassDescriptor().

void QRhiSwapChain::setSampleCount(int samples)

Legt die Anzahl der Samples fest. Übliche Werte für „ samples “ sind 1 (kein MSAA), 4 (4x MSAA) oder 8 (8x MSAA).

Siehe auch „ sampleCount()“ und „ QRhi::supportedSampleCounts()“.

[since 6.9] void QRhiSwapChain::setShadingRateMap(QRhiShadingRateMap *map)

Wird mit dem angegebenen „ QRhiShadingRateMap “ verknüpft: map. Dies funktioniert nur, wenn die Funktion „ QRhi::VariableRateShadingMap “ als unterstützt gemeldet wird.

Wird zusätzlich QRhiCommandBuffer::setShadingRate() aufgerufen, wird für jede Kachel die höhere der beiden Shading-Raten verwendet. Derzeit gibt es keine Möglichkeit, das Verhalten des Kombinators zu steuern.

Hinweis: Das Festlegen einer Shading-Rate-Map bedeutet, dass ein anderes, neues ` QRhiRenderPassDescriptor ` benötigt wird und einige der nativen Swapchain-Objekte neu erstellt werden müssen. Wenn die Swapchain also bereits eingerichtet ist, rufen Sie ` newCompatibleRenderPassDescriptor()` und ` setRenderPassDescriptor()` direkt nach `setShadingRateMap()` auf. Anschließend muss auch ` createOrResize()` erneut aufgerufen werden. Dies hat weitreichende Auswirkungen, beispielsweise auf Grafik-Pipelines: Auch diese müssen mit dem neuen ` QRhiRenderPassDescriptor ` verknüpft und anschließend neu erstellt werden. Unter QRhiRenderPassDescriptor::serializedFormat() finden Sie einige Vorschläge, wie Sie damit umgehen können. Denken Sie daran, für diese ebenfalls das Flag ` QRhiGraphicsPipeline::UsesShadingRate ` zu setzen.

Diese Funktion wurde in Qt 6.9 eingeführt.

Siehe auch shadingRateMap().

void QRhiSwapChain::setWindow(QWindow *window)

Legt die Eigenschaft „ window “ fest.

Siehe auch window().

[since 6.9] QRhiShadingRateMap *QRhiSwapChain::shadingRateMap() const

Gibt den aktuell eingestellten Wert für „ QRhiShadingRateMap “ zurück. Standardmäßig ist dies „ nullptr “.

Diese Funktion wurde in Qt 6.9 eingeführt.

Siehe auch ` setShadingRateMap()`.

[pure virtual] QSize QRhiSwapChain::surfacePixelSize()

Gibt die Größe der dem Fenster zugeordneten Oberfläche oder Ebene zurück.

Warnung: Gehen Sie nicht davon aus, dass dies mit ` QWindow::size() * QWindow::devicePixelRatio()` identisch ist. Bei einigen Grafik-APIs und Schnittstellen von Fenstersystemen (z. B. Vulkan) besteht theoretisch die Möglichkeit, dass eine Oberfläche eine andere Größe als das zugehörige Fenster annimmt. Um diese Fälle zu unterstützen, muss die Rendering-Logik größenabhängige Berechnungen (z. B. für Viewports) stets auf die von ` QRhiSwapChain` gemeldete Größe stützen und niemals auf die von ` QWindow ` abgefragte Größe.

Hinweis: Kann auch vor ` createOrResize()` aufgerufen werden, sofern zumindest ` window()` bereits gesetzt ist. In Kombination mit ` currentPixelSize()` lässt sich so erkennen, wann die Größe einer Swapchain angepasst werden muss. Beachten Sie jedoch, dass die Größe des zugrunde liegenden nativen Objekts (Surface, Layer oder Ähnliches) „live“ ist; daher gibt diese Funktion bei jedem Aufruf den aktuellsten von der zugrunde liegenden Implementierung gemeldeten Wert zurück, ohne dass eine Atomizitätsgarantie besteht. Daher wird dringend davon abgeraten, diese Funktion zur Ermittlung der Pixelgrößen für Grafikressourcen zu verwenden, die in einem Frame genutzt werden. Verwenden Sie stattdessen „ currentPixelSize()“, das eine Größe zurückgibt, die atomar ist und sich zwischen Aufrufen von „ createOrResize()“ nicht ändert.

Hinweis: Bei Depth-Stencil-Puffern, die in Kombination mit den Farbpuffern der Swapchain verwendet werden, wird dringend empfohlen, sich auf das automatische Größenanpassungs- und Neuerstellungsverhalten zu verlassen, das durch das Flag „ QRhiRenderBuffer:UsedWithSwapChainOnly“ bereitgestellt wird. Vermeiden Sie es, die Oberflächengröße über diese Funktion abzufragen, nur um eine Größe zu erhalten, die an ` QRhiRenderBuffer::setPixelSize()` übergeben werden kann, da dies, wie oben beschrieben, unter dem Mangel an Atomarität leiden würde.

Siehe auch ` currentPixelSize()`.

QWindow *QRhiSwapChain::window() const

Gibt das aktuell eingestellte Fenster zurück.

Siehe auch „ setWindow()“.

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.