QRhiSwapChainHdrInfo Struct
Beschreibt die auf den hohen Dynamikbereich bezogenen Informationen des zugehörigen Ausgangs der Swapchain. 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 |
Öffentliche Typen
enum | LimitsType { LuminanceInNits, ColorComponentValue } |
enum | LuminanceBehavior { SceneReferred, DisplayReferred } |
Öffentliche Variablen
union QRhiSwapChainHdrInfo::(unnamed union at /data/snapshot-qt6-6.8-rel/qt5/qtbase/src/gui/rhi/qrhi.h:1524:5) | limits |
QRhiSwapChainHdrInfo::LimitsType | limitsType |
QRhiSwapChainHdrInfo::LuminanceBehavior | luminanceBehavior |
float | sdrWhiteLevel |
Detaillierte Beschreibung
Um ein HDR-kompatibles Tonemapping durchzuführen, bei dem der Zielbereich nicht [0,1] ist, muss man oft die maximale Luminanz des Displays kennen, mit dem das Fenster der Swapchain verbunden ist. Obwohl dies oft vom Benutzer konfiguriert werden kann (z. B. Helligkeit, Gamma und ähnliche Einstellungen in Spielen), kann es sehr nützlich sein, Standardwerte auf der Grundlage der vom Display selbst gemeldeten Werte festzulegen, um einen guten Ausgangspunkt zu haben.
Es gibt jedoch einige Probleme: Die Informationen liegen auf den verschiedenen Plattformen in unterschiedlicher Form vor, während es bei plattformübergreifenden Grafik-APIs oft überhaupt keine zugehörige Lösung gibt, da die Verwaltung solcher Informationen nicht in den Bereich der API fällt (und eher über andere plattformspezifische Mittel abrufbar ist, wenn überhaupt).
Bei Metal auf macOS/iOS gibt es keine Luminanzwerte, die in den Plattform-APIs verfügbar sind. Stattdessen wird der maximale Farbkomponentenwert angegeben, der in einem Nicht-HDR-Setup bei 1,0 liegen 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
Union zuzugreifen und sie nach eigenem Ermessen zu verwenden.
Bei einer API wie Vulkan, wo es keine Möglichkeit gibt, solche Informationen zu erhalten, sind die Werte immer die eingebauten Standardwerte.
Daher enthält die Struktur, die von QRhiSwapChain::hdrInfo() zurückgegeben wird, entweder einige hart kodierte Standardwerte oder echte Werte, die von einer API wie DXGI (IDXGIOutput6) oder Cocoa (NSScreen) empfangen wurden. Wenn keine Plattformabfragen zur Verfügung stehen (oder die Verwendung von Plattformeinrichtungen außerhalb des Anwendungsbereichs von QRhi erforderlich ist), sind die fest kodierten Standardwerte eine maximale Luminanz von 1000 nits und ein SDR-Weißwert von 200.
Die Struktur gibt auch das vermutete Luminanzverhalten der Plattform und ihres Compositors an, um anzugeben, wie ein Farbkomponentenwert von 1,0 in einem HDR-Farbpuffer behandelt wird. In einigen Fällen wird es notwendig sein, eine Farbkorrektur von Nicht-HDR-Inhalten durchzuführen, die mit HDR-Inhalten zusammengesetzt werden. Um dies zu ermöglichen, wird der SDR-Weißwert auf einigen Plattformen (Windows) vom System abgefragt und hier angezeigt.
Hinweis: Dies ist eine RHI-API mit eingeschränkten Kompatibilitätsgarantien, siehe QRhi für Details.
Siehe auch QRhiSwapChain::hdrInfo().
Dokumentation der Mitgliedstypen
enum QRhiSwapChainHdrInfo::LimitsType
Konstante | Wert | Beschreibung |
---|---|---|
QRhiSwapChainHdrInfo::LuminanceInNits | 0 | Zeigt an, dass die limits union ihre luminanceInNits struct gesetzt hat |
QRhiSwapChainHdrInfo::ColorComponentValue | 1 | Zeigt an, dass die limits union ihre colorComponentValue struct gesetzt hat |
enum QRhiSwapChainHdrInfo::LuminanceBehavior
Konstante | Wert | Beschreibung |
---|---|---|
QRhiSwapChainHdrInfo::SceneReferred | 0 | Gibt an, dass der Farbwert von 1,0 als 80 nits interpretiert wird. Dies ist das Verhalten von HDR-aktivierten Fenstern mit dem Windows-Compositor. Auf dieser Seite finden Sie weitere Informationen zu HDR unter Windows. |
QRhiSwapChainHdrInfo::DisplayReferred | 1 | Zeigt an, dass der Farbwert von 1,0 als der SDR-Weißwert interpretiert wird (der z. B. 200 nits betragen kann, aber je nach Bildschirmhelligkeit variiert). Weitere Informationen über Apples EDR-System finden Sie auf dieser Seite. |
Dokumentation der Mitgliedsvariablen
union QRhiSwapChainHdrInfo::(unnamed union at /data/snapshot-qt6-6.8-rel/qt5/qtbase/src/gui/rhi/qrhi.h:1524:5) QRhiSwapChainHdrInfo::limits
Enthält die tatsächlichen Werte, die von der Grafik-API oder der Plattform abgefragt werden. Der Typ der Daten 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ängt die minimale und maximale Leuchtdichte von der Bildschirmhelligkeit ab. Während dies für Desktops nicht relevant ist, kann sich die Bildschirmhelligkeit auf Laptops jederzeit ändern. Eine Erhöhung der Helligkeit bedeutet eine Verringerung der maximalen Leuchtdichte. Darüber hinaus können die Ergebnisse auch von der HDR-Inhaltshelligkeit abhängen, die in der Ansicht System/Anzeige/HDR in den Windows-Einstellungen festgelegt ist, sofern es eine solche Einstellung gibt.
Beachten Sie jedoch, dass Änderungen an der Helligkeit des Laptop-Bildschirms oder an den Systemeinstellungen während der Ausführung der Anwendung nicht unbedingt in den zurückgegebenen Werten widergespiegelt werden, was bedeutet, dass ein erneuter Aufruf von hdrInfo() für den Rest der Lebensdauer des Prozesses immer noch den gleichen Luminanzbereich wie zuvor zurückgeben kann. Das genaue Verhalten liegt bei DXGI und Qt hat keine Kontrolle darüber.
Hinweis: Der Windows-Compositor arbeitet im szenenbezogenen Modus für HDR-Inhalte. Ein Farbkomponentenwert von 1,0 entspricht einer Leuchtdichte von 80 nits. Beim Rendern von Nicht-HDR-Inhalten (z. B. 2D-UI-Elementen) ist die Korrektur des Weißwerts häufig erforderlich. (z. B. wird die Ausgabe der Fragmentfarbe (1, 1, 1) wahrscheinlich dazu führen, dass ein Weißton angezeigt wird, der auf dem Bildschirm zu dunkel ist) Siehe sdrWhiteLevel.
Für macOS/iOS werden die aktuellen maximalen und potenziellen maximalen Farbkomponentenwerte angegeben:
struct { float maxColorComponentValue; float maxPotentialColorComponentValue; } colorComponentValue;
Der Wert kann von der Bildschirmhelligkeit abhängen, was auf Laptops bedeutet, dass sich das Ergebnis beim nächsten Aufruf von hdrInfo() ändern kann, wenn die Helligkeit zwischenzeitlich geändert wurde. Die maximale Bildschirmhelligkeit impliziert einen maximalen Farbwert von 1,0.
Hinweis: Apples EDR ist displaybezogen. 1.0 entspricht einer Luminanzstufe von SDR-Weiß (z.B. 200 nits), deren Wert je nach Bildschirmhelligkeit und möglicherweise anderen Einstellungen variiert. Der genaue Luminanzwert dafür oder die maximale Luminanz des Bildschirms werden von den Anwendungen nicht angezeigt.
Hinweis: Es wurde beobachtet, dass die Farbkomponentenwerte auf einigen macOS-Systemen nicht sofort beim Start auf den korrekten Wert größer als 1 gesetzt werden, sondern sich die Werte tendenziell während oder nach dem ersten Bild ändern.
Siehe auch QRhiSwapChain::hdrInfo().
QRhiSwapChainHdrInfo::LimitsType QRhiSwapChainHdrInfo::limitsType
Bei Metal auf macOS/iOS werden in den Plattform-APIs keine Luminanzwerte angezeigt. Stattdessen wird der maximale Farbkomponentenwert, der bei einer Nicht-HDR-Einstellung 1,0 betragen würde, bereitgestellt. Dieser Wert zeigt an, welche Art von Informationen in limits verfügbar ist.
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ßwert in Nits. Der Wert ist abhängig von der Bildschirmhelligkeit (bei Laptops) und den Einstellungen für die SDR- oder HDR-Inhaltshelligkeit in der Ansicht System/Anzeige/HDR der Windows-Einstellungen.
Um eine Weißwertkorrektur für Nicht-HDR-Inhalte (SDR), wie 2D-Benutzeroberflächenelemente, durchzuführen, multiplizieren Sie die endgültige Farbe mit sdrWhiteLevel / 80.0, wenn luminanceBehavior SceneReferred ist. (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. Dies entspricht möglicherweise nicht dem tatsächlichen SDR-Weißwert des Systems, aber der Wert dieser Variablen ist in der Praxis nicht relevant, wenn luminanceBehavior DisplayReferred ist, da sich der Farbkomponentenwert von 1,0 dann standardmäßig auf den SDR-Weißwert bezieht.
Siehe auch luminanceBehavior.
© 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.