Auf dieser Seite

QRhiSwapChainHdrInfo Struct

Beschreibt die Informationen zum hohen Dynamikbereich des zugehörigen Ausgangs der Swapchain. Mehr...

Kopfzeile: #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

Öffentliche Typen

enum LimitsType { LuminanceInNits, ColorComponentValue }
enum LuminanceBehavior { SceneReferred, DisplayReferred }

Öffentliche Variablen

union QRhiSwapChainHdrInfo::(unnamed union) limits
QRhiSwapChainHdrInfo::LimitsType limitsType
QRhiSwapChainHdrInfo::LuminanceBehavior luminanceBehavior
float sdrWhiteLevel

Ausführliche Beschreibung

Um ein HDR-kompatibles Tonemapping durchzuführen, bei dem der Zielbereich nicht [0,1] ist, muss man oft die maximale Leuchtdichte des Displays kennen, mit dem das Fenster der Swapchain verknüpft ist. Zwar lässt sich dieser Wert oft vom Benutzer konfigurieren (man denke an Helligkeit, Gamma und ähnliche Einstellungen in Spielen), doch kann es äußerst nützlich sein, Standardwerte auf der Grundlage der vom Display selbst gemeldeten Werte festzulegen, um so einen guten Ausgangspunkt zu bieten.

Es gibt jedoch einige Probleme: Die Informationen werden auf verschiedenen Plattformen in unterschiedlicher Form bereitgestellt, während es bei plattformübergreifenden Grafik-APIs oft gar keine entsprechende Lösung gibt, da die Verwaltung solcher Informationen nicht in den Aufgabenbereich der API fällt (und gegebenenfalls eher über andere plattformspezifische Mittel abrufbar ist).

Bei Metal unter macOS/iOS werden in den Plattform-APIs keine Luminanzwerte bereitgestellt. Stattdessen wird der maximale Wert der Farbkomponente angegeben, der in einer Nicht-HDR-Konfiguration 1,0 betragen würde. Das Feld „ limitsType “ gibt an, welche Art von Informationen verfügbar ist. Es liegt dann an den Clients von „ QRhi “, auf die richtigen Daten aus der „ limits “-Vereinigung zuzugreifen und diese nach eigenem Ermessen zu verwenden.

Bei einer API wie Vulkan, bei der es keine Möglichkeit gibt, solche Informationen abzurufen, sind die Werte immer die integrierten Standardwerte.

Daher enthält die von ` QRhiSwapChain::hdrInfo()` zurückgegebene Struktur entweder fest codierte Standardwerte oder tatsächliche Werte, die von einer API wie DXGI (`IDXGIOutput6`) oder Cocoa (`NSScreen`) empfangen wurden. Wenn keine Plattformabfragen verfügbar sind (oder die Nutzung von Plattformfunktionen erforderlich ist, die außerhalb des Geltungsbereichs von ` QRhi` liegen), betragen die fest codierten Standardwerte eine maximale Leuchtdichte von 1000 Nits und einen SDR-Weißpegel von 200.

Die Struktur gibt zudem das vermutete Luminanzverhalten der Plattform und ihres Compositors wieder, um anzugeben, wie ein Farbkomponentenwert von 1,0 in einem HDR-Farbpuffer behandelt wird. In einigen Fällen ist es erforderlich, eine Farbkorrektur von Nicht-HDR-Inhalten durchzuführen, die mit HDR-Inhalten zusammengesetzt wurden. Um dies zu ermöglichen, wird auf einigen Plattformen (Windows) der SDR-Weißpegel vom System abgefragt und hier bereitgestellt.

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

Siehe auch QRhiSwapChain::hdrInfo().

Dokumentation zum Mitgliedstyp

enum QRhiSwapChainHdrInfo::LimitsType

KonstanteWertBeschreibung
QRhiSwapChainHdrInfo::LuminanceInNits0Gibt an, dass in der Union „ limits “ die Struktur „ luminanceInNits “ festgelegt ist
QRhiSwapChainHdrInfo::ColorComponentValue1Gibt an, dass bei der Union „ limits “ die Struktur „ colorComponentValue “ gesetzt ist

enum QRhiSwapChainHdrInfo::LuminanceBehavior

KonstanteWertBeschreibung
QRhiSwapChainHdrInfo::SceneReferred0Gibt an, dass der Farbwert 1,0 als 80 Nits interpretiert wird. Dies ist das Verhalten von HDR-fähigen Fenstern mit dem Windows-Compositor. Weitere Informationen zu HDR unter Windows finden Sie auf dieser Seite.
QRhiSwapChainHdrInfo::DisplayReferred1Gibt an, dass der Farbwert 1,0 als Wert für SDR-Weiß interpretiert wird. (Dieser kann z. B. 200 Nits betragen, variiert jedoch je nach Bildschirmhelligkeit.) Dies ist das Verhalten von HDR-fähigen Fenstern auf Apple-Plattformen. Weitere Informationen zum EDR-System von Apple finden Sie auf dieser Seite.

Dokumentation zu Member-Variablen

union QRhiSwapChainHdrInfo::(unnamed union) QRhiSwapChainHdrInfo::limits

Enthält die tatsächlichen Werte, die von der Grafik-API oder der Plattform abgefragt wurden. Der Datentyp wird durch „ limitsType “ angegeben. Es handelt sich also um eine Vereinigung. Derzeit gibt es zwei Optionen:

Luminanzwerte in nits:

struct {
    float minLuminance;
    float maxLuminance;
} luminanceInNits;

Unter Windows hängen die minimale und maximale Leuchtdichte von der Bildschirmhelligkeit ab. Während dies für Desktop-PCs nicht relevant ist, kann sich die Bildschirmhelligkeit bei Laptops jederzeit ändern. Eine Erhöhung der Helligkeit führt zu einer Verringerung der maximalen Luminanz. Darüber hinaus können die Ergebnisse auch von der in den Windows-Einstellungen unter „System/Anzeige/HDR“ festgelegten „HDR-Inhaltshelligkeit“ abhängen, sofern eine solche Einstellung vorhanden ist.

Beachten Sie jedoch, dass Änderungen an der Bildschirmhelligkeit des Laptops oder in den Systemeinstellungen während der Ausführung der Anwendung nicht unbedingt in den zurückgegebenen Werten berücksichtigt werden. Das bedeutet, dass ein erneuter Aufruf von `hdrInfo()` für die restliche Laufzeit des Prozesses möglicherweise weiterhin denselben Luminanzbereich wie zuvor zurückgibt. Das genaue Verhalten hängt von DXGI ab, und Qt hat darauf keinen Einfluss.

Hinweis: Der Windows-Compositor arbeitet bei HDR-Inhalten im szenenbezogenen Modus. Ein Farbkomponentenwert von 1,0 entspricht einer Luminanz von 80 Nits. Beim Rendern von Nicht-HDR-Inhalten (z. B. 2D-UI-Elementen) ist häufig eine Korrektur des Weißpegels erforderlich. (Beispielsweise führt die Ausgabe der Fragmentfarbe (1, 1, 1) wahrscheinlich dazu, dass auf dem Bildschirm ein zu dunkler Weißton angezeigt wird.) Siehe sdrWhiteLevel.

Für macOS/iOS werden die aktuellen maximalen und potenziellen maximalen Farbkomponentenwerte bereitgestellt:

struct {
    float maxColorComponentValue;
    float maxPotentialColorComponentValue;
} colorComponentValue;

Der Wert kann von der Bildschirmhelligkeit abhängen, was bei Laptops bedeutet, dass sich das Ergebnis beim nächsten Aufruf von `hdrInfo()` ändern kann, wenn die Helligkeit in der Zwischenzeit geändert wurde. Die maximale Bildschirmhelligkeit impliziert einen maximalen Farbwert von 1,0.

Hinweis: Apples EDR ist bildschirmbezogen. 1,0 entspricht einem Luminanzpegel von SDR-Weiß (z. B. 200 Nits), dessen Wert je nach Bildschirmhelligkeit und möglicherweise anderen Einstellungen variiert. Der genaue Luminanzwert dafür oder die maximale Luminanz des Displays werden den Anwendungen nicht offengelegt.

Hinweis: Es wurde beobachtet, dass die Werte der Farbkomponenten auf einigen macOS-Systemen beim Start nicht sofort auf den korrekten Wert größer als 1 gesetzt werden, sich die Werte jedoch in der Regel während oder nach dem ersten Frame ändern.

Siehe auch QRhiSwapChain::hdrInfo().

QRhiSwapChainHdrInfo::LimitsType QRhiSwapChainHdrInfo::limitsType

Bei Metal unter macOS/iOS werden in den Plattform-APIs keine Luminanzwerte bereitgestellt. Stattdessen wird der maximale Wert der Farbkomponente bereitgestellt, der in einer Nicht-HDR-Konfiguration 1,0 betragen würde. Dieser Wert gibt an, welche Informationen unter limits verfügbar sind.

Siehe auch QRhiSwapChain::hdrInfo().

QRhiSwapChainHdrInfo::LuminanceBehavior QRhiSwapChainHdrInfo::luminanceBehavior

Beschreibt das voraussichtliche Verhalten der Plattform in Bezug auf Farbwerte.

Siehe auch sdrWhiteLevel.

float QRhiSwapChainHdrInfo::sdrWhiteLevel

Unter Windows ist dies der dynamische SDR-Weißpegel in Nits. Der Wert hängt von der Bildschirmhelligkeit (bei Laptops) sowie von den Einstellungen für die SDR- oder HDR-Inhaltshelligkeit in den Windows-Einstellungen unter „System/Anzeige/HDR“ ab.

Um eine Weißpegelkorrektur für Nicht-HDR-Inhalte (SDR) wie z. B. 2D-UI-Elemente durchzuführen, multiplizieren Sie die endgültige Farbe mit `sdrWhiteLevel / 80,0`, wann immer ` luminanceBehavior ` den Wert ` SceneReferred` annimmt. (unter der Annahme, dass Windows und ein linear erweiterter sRGB-Farbraum (scRGB) verwendet werden)

Auf anderen Plattformen ist der Wert immer ein vordefinierter Wert, nämlich 200. Dieser entspricht möglicherweise nicht dem tatsächlichen SDR-Weißpegel des Systems, aber der Wert dieser Variablen ist in der Praxis irrelevant, wenn „ luminanceBehavior “ auf „ DisplayReferred “ gesetzt ist, da sich der Farbkomponentenwert von 1,0 in diesem Fall standardmäßig auf das SDR-Weiß bezieht.

Siehe auch „ luminanceBehavior “.

© 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.