QRhiSwapChain Class
Swapchain-Ressource. Mehr...
Kopfzeile: | #include <rhi/qrhi.h> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
qmake: | QT += gui-private |
Since: | Qt 6.6 |
Vererbt: | 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) |
void | setWindow(QWindow *window) |
virtual QSize | surfacePixelSize() = 0 |
QWindow * | window() const |
Reimplementierte öffentliche Funktionen
virtual QRhiResource::Type | resourceType() const override |
Detaillierte Beschreibung
Eine Swapchain ermöglicht die Darstellung von Rendering-Ergebnissen auf einer Oberfläche. Eine Swapchain wird typischerweise durch einen Satz von Farbpuffern unterstützt. Von diesen wird jeweils einer angezeigt.
Im Folgenden finden Sie ein typisches Muster für die Erstellung und Verwaltung einer Swapchain und einiger zugehöriger Ressourcen für das Rendern auf einer QWindow:
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 auf QWindow resize events zu verlassen, um die Größe von Swapchains zu ändern, insbesondere in Anbetracht der Tatsache, dass die Oberflächengrößen nicht immer vollständig mit den QWindow gemeldeten Abmessungen übereinstimmen. Der sichere, plattformübergreifende Ansatz besteht darin, die Prüfung über surfacePixelSize() durchzuführen, wenn ein neuer Frame gestartet wird.
Die Freigabe der Swapchain muss erfolgen, während QWindow und das zugrundeliegende native Fenster vollständig aufgebaut sind und laufen. 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 jeder Zeit erfolgen. Der sichere, plattformübergreifende Ansatz besteht darin, sich auf expose-Ereignisse zu verlassen. QExposeEvent ist ein lose spezifiziertes Ereignis, das immer dann gesendet wird, wenn ein Fenster gemappt, verdeckt und in der Größe verändert wird, je nach Plattform.
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 Rendering begonnen hat, ist eine einfache Möglichkeit, einen neuen Frame anzufordern QWindow::requestUpdate(). Während dies auf einigen Plattformen lediglich ein kleiner Timer ist, gibt es auf anderen Plattformen eine spezielle Implementierung: Auf macOS oder iOS kann dies beispielsweise durch CVDisplayLink unterstützt werden. Das obige Beispiel ist bereits auf Aktualisierungsanfragen vorbereitet, indem es QEvent::UpdateRequest behandelt.
Während sie als QRhiRenderTarget fungiert, verwaltet QRhiSwapChain auch eine QRhiCommandBuffer. Der Aufruf von QRhi::endFrame() übermittelt die aufgezeichneten Befehle und stellt auch eine present
Anfrage in die Warteschlange. Das Standardverhalten ist, dies mit einem Swap-Intervall von 1 zu tun, was bedeutet, dass die Synchronisierung mit der vertikalen Aktualisierung des Displays aktiviert ist. Somit wird der Rendering-Thread, der beginFrame() und endFrame() aufruft, auf vsync gedrosselt. Auf einigen Backends kann dies durch Übergabe von QRhiSwapChain:NoVSync in flags() deaktiviert werden.
Multisampling (MSAA) wird für die Anwendungen transparent gehandhabt, wenn es über setSampleCount() angefordert wird. QRhiSwapChain kümmert sich gegebenenfalls um die Erstellung zusätzlicher Farbpuffer und die Ausgabe eines Multisample-Resolve-Befehls am Ende eines Frames. Für OpenGL ist es notwendig, die entsprechende Sampleanzahl auch über QSurfaceFormat anzufordern, indem QSurfaceFormat::setDefaultFormat() vor der Initialisierung von QRhi aufgerufen wird.
Hinweis: Dies ist eine RHI-API mit begrenzten Kompatibilitätsgarantien, siehe QRhi für Details.
Dokumentation der Mitgliedstypen
enum QRhiSwapChain::Flag
flags QRhiSwapChain::Flags
Flag-Werte zur Beschreibung der Swapchain-Eigenschaften
Konstante | Wert | Beschreibung |
---|---|---|
QRhiSwapChain::SurfaceHasPreMulAlpha | 1 << 0 | Gibt an, dass die Zielfläche Transparenz mit vormultipliziertem Alpha hat. Dies ist zum Beispiel der Wert, den Qt Quick verwendet, wenn der Alphakanal auf dem Ziel QWindow aktiviert ist, da der Scenegraph Rendrerer immer Fragmente ausgibt, bei denen Alpha mit den Rot-, Grün- und Blauwerten multipliziert ist. Um ein identisches Verhalten auf allen Plattformen zu gewährleisten, setzen Sie QSurfaceFormat::alphaBufferSize() auf dem Ziel QWindow immer auf einen Wert ungleich Null, wenn dieses Flag in der Swapchain gesetzt ist. |
QRhiSwapChain::SurfaceHasNonPreMulAlpha | 1 << 1 | Zeigt an, dass die Zieloberfläche Transparenz mit nicht vormultipliziertem Alpha hat. Beachten Sie, dass dies auf einigen Systemen nicht unterstützt wird, wenn der System-Compositor immer Inhalte mit vormultipliziertem Alpha erwartet. In diesem Fall wird erwartet, dass das Verhalten bei gesetztem Flag dem von SurfaceHasPreMulAlpha entspricht. |
QRhiSwapChain::sRGB | 1 << 2 | Fordert an, ein sRGB-Format für die Farbpuffer der Swapchain und/oder die Rendering-Zielansichten zu wählen, wo anwendbar. Beachten Sie, dass dies bedeutet, dass sRGB-Framebuffer-Aktualisierung und -Überblendung für alle Inhalte, die auf diese Swapchain abzielen, aktiviert werden, und dass ein Abwählen nicht möglich ist. Für OpenGL, setzen Sie zusätzlich sRGBColorSpace auf QSurfaceFormat der QWindow. Gilt nur, wenn das Swapchain-Format auf QRhiSwapChain::SDR eingestellt ist. |
QRhiSwapChain::UsedAsTransferSource | 1 << 3 | Gibt an, dass die Swapchain als Quelle für ein Readback in QRhiResourceUpdateBatch::readBackTexture() verwendet wird. |
QRhiSwapChain::NoVSync | 1 << 4 | Fordert die Deaktivierung des Wartens auf die vertikale Synchronisierung, wodurch auch die Drosselung des Rendering-Threads vermieden wird. Das Verhalten ist Backend-spezifisch und nur anwendbar, wenn es möglich ist, dies zu kontrollieren. Einige ignorieren die Anforderung möglicherweise ganz. Für OpenGL versuchen Sie stattdessen, das Swap-Intervall auf QWindow über QSurfaceFormat::setSwapInterval() auf 0 zu setzen. |
QRhiSwapChain::MinimalBufferCount | 1 << 5 | Fordert die Erstellung der Swapchain mit der minimalen Anzahl von Puffern an, was in der Praxis 2 ist, es sei denn, die Grafikimplementierung hat eine höhere Mindestanzahl als diese. Nur anwendbar bei Backends, bei denen eine solche Steuerung über die Grafik-API verfügbar ist, z. B. Vulkan. Standardmäßig obliegt es dem Backend zu entscheiden, welche Anzahl von Puffern es anfordert (in der Praxis ist dies fast immer entweder 2 oder 3), und es ist nicht die Angelegenheit der Anwendungen. Bei Vulkan zum Beispiel wird das Backend jedoch wahrscheinlich die höhere Zahl (3) bevorzugen, zum Beispiel um seltsame Leistungsprobleme mit einigen Vulkan-Implementierungen auf mobilen Geräten zu vermeiden. Es könnte sein, dass es sich auf einigen Plattformen als vorteilhaft erweisen kann, die niedrigere Pufferanzahl (2) zu erzwingen, daher erlaubt dieses Flag dies zu erzwingen. Beachten Sie, dass all dies keine Auswirkung auf die Anzahl der Frames hat, die im Flug gehalten werden, so dass die CPU (QRhi) immer noch Frames höchstens N - 1 Frames vor der GPU vorbereiten wird, selbst wenn die Anzahl der Swapchain-Bildpuffer größer als N ist. (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 Aufzählung wird mit isFormatSupported() verwendet, um im Voraus zu prüfen, ob die Erstellung der Swapchain mit dem angegebenen Format von der Plattform und dem zugehörigen Bildschirm des Fensters unterstützt wird, und mit setFormat(), um das gewünschte Format in der Swapchain zu setzen, bevor createOrResize() zum ersten Mal aufgerufen wird.
Konstante | Wert | Beschreibung |
---|---|---|
QRhiSwapChain::SDR | 0 | 8-Bit RGBA oder BGRA, je nach Backend und Plattform. Insbesondere bei OpenGL ES kann es vorkommen, dass die Plattform weniger als 8 Bit zur Verfügung stellt (z. B. aufgrund von EGL und der QSurfaceFormat, die ein 565- oder 444-Format wählen - dies liegt außerhalb der Kontrolle von QRhi). Standard-Dynamikbereich. Kann mit dem Setzen des Flags QRhiSwapChain::sRGB kombiniert werden. |
QRhiSwapChain::HDRExtendedSrgbLinear | 1 | 16-Bit-Float-RGBA, hoher Dynamikbereich, erweiterter linearer sRGB (scRGB)-Farbraum. Dies beinhaltet Rec. 709-Primärfarben (wie SDR/sRGB) und lineare Farben. Die Konvertierung in den nativen Farbraum des Bildschirms (z. B. HDR10) erfolgt durch das Fenstersystem. Unter Windows ist dies der kanonische Farbraum des System-Compositors und das empfohlene Format für HDR-Swapchains auf Desktop-Plattformen im Allgemeinen. |
QRhiSwapChain::HDR10 | 2 | 10-bit unsigned int RGB oder BGR mit 2 bit Alpha, hoher Dynamikbereich, HDR10 (Rec. 2020) Farbraum mit einer ST2084 PQ Übertragungsfunktion. |
QRhiSwapChain::HDRExtendedDisplayP3Linear | 3 | 16-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.
Konstante | Wert |
---|---|
QRhiSwapChain::LeftBuffer | 0 |
QRhiSwapChain::RightBuffer | 1 |
Dokumentation der Mitgliedsfunktionen
[pure virtual]
bool QRhiSwapChain::createOrResize()
Erzeugt die Swapchain, falls noch nicht geschehen, und passt die Größe der Swapchain-Puffer an die aktuelle Größe der Zielfläche an. Rufen Sie diese Funktion immer dann auf, wenn die Größe der Zieloberfläche anders ist als zuvor.
Hinweis: Rufen Sie destroy() nur auf, wenn die Swapchain vollständig freigegeben werden muss, typischerweise bei QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed. Um eine Größenänderung durchzuführen, rufen Sie einfach createOrResize() auf.
Gibt bei Erfolg true
zurück, bei einer fehlgeschlagenen 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 Ressourcen-Updates innerhalb eines beginFrame - endFrame Blocks aufgezeichnet werden können, vorausgesetzt beginFrame() wurde mit dieser Swapchain aufgerufen.
Hinweis: Das zurückgegebene Objekt ist auch nach endFrame() gültig, bis zum nächsten beginFrame(), aber der zurückgegebene Befehlspuffer sollte dann nicht zur Aufzeichnung von Befehlen verwendet werden. Vielmehr kann er verwendet werden, um die während des Frames (oder vorheriger Frames) gesammelten Daten abzufragen, z. B. durch den Aufruf von lastCompletedGpuTime().
Hinweis: Der Wert darf nicht zwischengespeichert und zwischen Frames wiederverwendet werden. Der Aufrufer sollte das zurückgegebene Objekt nicht behalten, wenn beginFrame() erneut aufgerufen wird. Stattdessen sollte das Befehlspufferobjekt durch Aufruf dieser Funktion erneut abgefragt werden.
[pure virtual]
QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget()
Gibt ein Rendering-Ziel zurück, das mit beginPass() verwendet werden kann, um den aktuellen Backbuffer der Swapchain zu rendern. Nur gültig innerhalb eines QRhi::beginFrame() - QRhi::endFrame() Blocks, in dem beginFrame() mit dieser Swapchain aufgerufen wurde.
Hinweis: Der Wert darf nicht zwischengespeichert und zwischen Frames wiederverwendet werden.
[virtual]
QRhiRenderTarget *QRhiSwapChain::currentFrameRenderTarget(QRhiSwapChain::StereoTargetBuffer targetBuffer)
Gibt ein Rendering-Ziel zurück, das mit beginPass() verwendet werden kann, um in den linken oder rechten Backbuffer der Swapchain zu rendern. Diese Überladung sollte nur bei stereoskopischem Rendering verwendet werden, d.h. wenn die zugehörige QWindow von zwei Farbpuffern unterstützt wird, einem für jedes Auge, anstatt nur einem.
Wenn stereoskopisches Rendering nicht unterstützt wird, ist der Rückgabewert das Standardziel. 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. Metal- und Null-Backends geben das Standard-Rendering-Ziel von dieser Überladung zurück.
Hinweis: Der Wert darf nicht zwischengespeichert und zwischen Frames wiederverwendet werden.
QSize QRhiSwapChain::currentPixelSize() const
Gibt die Größe zurück, mit der die Swapchain zuletzt erfolgreich erstellt wurde. Verwenden Sie dies, um zu entscheiden, ob createOrResize() erneut aufgerufen werden muss: Wenn currentPixelSize() != surfacePixelSize()
, dann muss die Größe der Swapchain geändert werden.
Hinweis: Typische Rendering-Logik wird diese Funktion aufrufen, um die Ausgabegröße zu erhalten, wenn sie mit der Vorbereitung eines neuen Frames beginnt, und abhängige Berechnungen (wie z.B. das Ansichtsfenster) auf die von dieser Funktion zurückgegebene Größe stützen.
Während der Wert in vielen Fällen derselbe ist wie QWindow::size() * QWindow::devicePixelRatio()
, ist es nicht garantiert, dass die von QWindow gemeldete Größe auf allen Plattformen und Grafik-API-Implementierungen korrekt ist. Es wird daher dringend empfohlen, diese Funktion immer dann zu verwenden, wenn die Abmessungen der Ausgabeschicht oder -fläche in Pixeln angegeben werden müssen.
Dies hat auch den zusätzlichen Vorteil, dass potenzielle Data-Races vermieden werden, wenn QRhi auf einem dedizierten Rendering-Thread verwendet wird, da die Notwendigkeit, QWindow Funktionen aufzurufen, die dann möglicherweise auf Daten zugreifen, die auf dem Haupt-Thread aktualisiert wurden, 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 die zugehörige Anzeige zurück.
Gehen Sie nicht davon aus, dass dies ein billiger 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 passiert, wenn ein Fenster mit einer initialisierten Swapchain zwischen Bildschirmen verschoben wird (HDR zu HDR mit anderen Eigenschaften, HDR zu SDR usw.), ist derzeit nicht klar definiert und hängt stark vom Fenstersystem und Compositor ab, wobei das Verhalten zwischen den Plattformen variieren kann. Derzeit garantiert QRhi nur, dass hdrInfo() gültige Daten, falls vorhanden, für die Anzeige zurückgibt, zu der das der Swapchain zugeordnete Fenster zum Zeitpunkt 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, aber window() muss bereits gesetzt sein. Ein Aufruf ohne gesetztes Fenster kann je nach Backend und Plattform zu unerwarteten Ergebnissen führen (höchstwahrscheinlich falsch für jedes HDR-Format), da die Unterstützung des HDR-Formats in der Regel an die Ausgabe (Bildschirm) gebunden ist, zu der das zugehörige Fenster der Swapchain zu einem bestimmten Zeitpunkt gehört. Wenn das Ergebnis für ein HDR-Format wahr ist, dann wird die Erstellung der Swapchain mit diesem Format voraussichtlich erfolgreich sein, solange das Fenster in der Zwischenzeit nicht auf einen anderen Bildschirm verschoben wird.
Die Hauptanwendung dieser Funktion besteht darin, sie vor dem ersten createOrResize() aufzurufen, nachdem das Fenster bereits gesetzt ist. 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 mit dem angegebenen Format zu leisten.
Wenn das Format als unterstützt gemeldet wird, rufen Sie setFormat() auf, um das angeforderte Format zu setzen, und rufen Sie createOrResize() auf. Seien Sie sich jedoch der Konsequenzen bewusst: Die erfolgreiche Anforderung eines HDR-Formats bedeutet, dass Sie sich mit einem anderen Farbraum auseinandersetzen müssen, möglicherweise eine Weißwertkorrektur für nicht HDR-fähige Inhalte vornehmen müssen, Tonemapping-Methoden anpassen müssen, Einstellungen für Rendering-Ziele außerhalb des Bildschirms vornehmen müssen usw.
Siehe auch setFormat().
[pure virtual]
QRhiRenderPassDescriptor *QRhiSwapChain::newCompatibleRenderPassDescriptor()
Gibt eine neue QRhiRenderPassDescriptor zurück, die mit dieser Swapchain kompatibel ist.
Der zurückgegebene Wert wird auf zwei Arten verwendet: Er kann an setRenderPassDescriptor() und QRhiGraphicsPipeline::setRenderPassDescriptor() übergeben werden. Ein Renderpass-Deskriptor beschreibt die Anhänge (Farbe, Tiefe/Schablone) und das Lade-/Speicherverhalten, die von flags() beeinflusst werden können. 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 eingestellten Proxydaten 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
Reimplements: QRhiResource::resourceType() const.
Gibt den Ressourcentyp zurück.
int QRhiSwapChain::sampleCount() const
Gibt die aktuell eingestellte Sampleanzahl zurück. 1 bedeutet kein Multisample-Antialiasing.
Siehe auch setSampleCount().
void QRhiSwapChain::setDepthStencil(QRhiRenderBuffer *ds)
Setzt den Renderbuffer ds zur Verwendung als Tiefenschablonenpuffer.
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 es, Formate zu setzen, die von isFormatSupported() als nicht unterstützt gemeldet werden. Beachten Sie, dass die Unterstützung für ein bestimmtes Format vom Bildschirm abhängen kann, auf dem das zugehörige Fenster der Swapchain geöffnet ist. Auf einigen Plattformen, wie Windows und macOS, muss die HDR-Ausgabe in den Anzeigeeinstellungen aktiviert sein, damit sie funktioniert.
Siehe isFormatSupported(), QRhiSwapChainHdrInfo und Format für weitere Informationen zur HDR-Ausgabe.
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)
Assoziiert mit der QRhiRenderPassDescriptor desc .
Siehe auch renderPassDescriptor().
void QRhiSwapChain::setSampleCount(int samples)
Legt die Anzahl der Proben fest. Übliche Werte für samples sind 1 (kein MSAA), 4 (4x MSAA) oder 8 (8x MSAA).
Siehe auch sampleCount() und QRhi::supportedSampleCounts().
void QRhiSwapChain::setWindow(QWindow *window)
Setzt die window.
Siehe auch window().
[pure virtual]
QSize QRhiSwapChain::surfacePixelSize()
Gibt die Größe der dem Fenster zugeordneten Fläche oder Ebene zurück.
Warnung: Gehen Sie nicht davon aus, dass dies dasselbe ist wie QWindow::size() * QWindow::devicePixelRatio()
. Bei einigen Grafik-APIs und Fenstersystemschnittstellen (z. B. Vulkan) besteht die theoretische 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 die von der Größe abgeleiteten Berechnungen (wie z. B. Ansichtsfenster) immer 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, wenn zumindest window() bereits gesetzt ist. In Kombination mit currentPixelSize() kann so festgestellt werden, wann die Größe einer Swapchain geändert werden muss. Achten Sie jedoch darauf, dass die Größe des zugrundeliegenden nativen Objekts (Oberfläche, Ebene o.ä.) "live" ist, d.h. wann immer diese Funktion aufgerufen wird, gibt sie den letzten von der zugrundeliegenden Implementierung gemeldeten Wert zurück, ohne jegliche Atomizitätsgarantie. Daher wird von der Verwendung dieser Funktion zur Bestimmung von Pixelgrößen für Grafikressourcen, die in einem Frame verwendet werden, dringend abgeraten. Verlassen Sie sich stattdessen auf currentPixelSize(), die eine Größe zurückgibt, die atomar ist und sich zwischen den Aufrufen von createOrResize() nicht ändern wird.
Hinweis: Für Tiefenschablonenpuffer, die in Kombination mit den Farbpuffern der Swapchain verwendet werden, wird dringend empfohlen, sich auf das automatische Größen- und Neuaufbauverhalten zu verlassen, das durch das QRhiRenderBuffer:UsedWithSwapChainOnly Flag 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 unter dem oben beschriebenen Mangel an Atomizität leiden würde.
Siehe auch currentPixelSize().
QWindow *QRhiSwapChain::window() const
Gibt das aktuell eingestellte Fenster zurück.
Siehe auch setWindow().
© 2025 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.