QRhiSwapChainHdrInfo Struct
描述交换链相关输出的高动态范围信息。更多
头文件: | #include <rhi/qrhi.h> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::GuiPrivate) |
qmake: | QT += gui-private |
自 | Qt 6.6 |
公共类型
enum | LimitsType { LuminanceInNits, ColorComponentValue } |
enum | LuminanceBehavior { SceneReferred, DisplayReferred } |
公共变量
union QRhiSwapChainHdrInfo::(unnamed union at /data/snapshot-qt6-6.9-rel/qt5/qtbase/src/gui/rhi/qrhi.h:1554:5) | limits |
QRhiSwapChainHdrInfo::LimitsType | limitsType |
QRhiSwapChainHdrInfo::LuminanceBehavior | luminanceBehavior |
float | sdrWhiteLevel |
详细说明
要执行与 HDR 兼容的色调映射(目标范围不为 [0,1]),通常需要知道与 swapchain 窗口关联的显示器的最大亮度。虽然这通常是用户可配置的(比如游戏中的亮度、伽玛和类似设置),但根据显示屏本身报告的值设置默认值也非常有用,从而提供了一个合适的起点。
不过也存在一些问题:在不同的平台上,这些信息会以不同的形式暴露出来,而跨平台图形应用程序接口通常根本没有相关的解决方案,因为管理这些信息并不在应用程序接口的范围之内(如果有的话,也可以通过其他特定平台的方式获取)。
对于 macOS/iOS 上的 Metal,平台 API 中没有亮度值。取而代之的是最大色彩分量值(在非 HDR 设置中为 1.0)。limitsType
字段显示了可用的信息类型。然后,QRhi 的客户端就可以从limits
联盟访问正确的数据,并根据自己的需要加以使用。
对于像 Vulkan 这样无法获取此类信息的应用程序接口,其值始终是内置默认值。
因此,从QRhiSwapChain::hdrInfo() 返回的结构体要么包含一些硬编码的默认值,要么包含从 DXGI (IDXGIOutput6) 或 Cocoa (NSScreen) 等 API 接收的真实值。当没有可用的平台查询时(或需要使用超出QRhi 范围的平台设施时),硬编码默认值为最大亮度 1000 尼特和 SDR 白电平 200。
该结构还公开了平台及其合成器的假定亮度行为,以说明在 HDR 色彩缓冲区中,色彩分量值为 1.0 时的处理方式。在某些情况下,有必要对与 HDR 内容合成的非 HDR 内容进行色彩校正。为此,在某些平台(Windows)上会从系统中查询 SDR 白电平,并在此处显示。
注: 这是一个 RHI API,兼容性保证有限,详情请参见QRhi 。
另请参阅 QRhiSwapChain::hdrInfo().
成员类型文档
enum QRhiSwapChainHdrInfo::LimitsType
常数 | 值 | 说明 |
---|---|---|
QRhiSwapChainHdrInfo::LuminanceInNits | 0 | 表示limits 联盟有其luminanceInNits 结构集 |
QRhiSwapChainHdrInfo::ColorComponentValue | 1 | 表示limits 联盟有其colorComponentValue 结构集 |
enum QRhiSwapChainHdrInfo::LuminanceBehavior
成员变量文档
union QRhiSwapChainHdrInfo::(unnamed union at /data/snapshot-qt6-6.9-rel/qt5/qtbase/src/gui/rhi/qrhi.h:1554:5) QRhiSwapChainHdrInfo::limits
包含从图形 API 或平台查询的实际值。数据类型用limitsType 表示。因此,这是一个联合体。目前有两个选项:
亮度值(尼特):
struct { float minLuminance; float maxLuminance; } luminanceInNits;
在 Windows 上,最小和最大亮度取决于屏幕亮度。虽然与台式机无关,但在笔记本电脑上,屏幕亮度可能随时变化。亮度增加意味着最大亮度降低。此外,如果 Windows "设置 "的 "系统/显示/HDR "视图中设置了 HDR 内容亮度,结果也可能取决于该设置。
但请注意,在应用程序运行期间,笔记本电脑屏幕亮度或系统设置的变化并不一定会反映在返回值中,这意味着在进程的剩余时间内,再次调用 hdrInfo() 可能仍会返回与之前相同的亮度范围。具体行为由 DXGI 决定,Qt 无法控制。
注: Windows 合成器在 HDR 内容的场景推荐模式下工作。色彩分量值 1.0 相当于亮度 80 尼特。在渲染非 HDR 内容(如 2D UI 元素)时,通常需要校正白电平。(例如,输出片段颜色(1, 1, 1)可能会导致在屏幕上显示太暗的白色),请参见sdrWhiteLevel 。
对于 macOS/iOS,提供了当前最大和潜在最大色彩分量值:
struct { float maxColorComponentValue; float maxPotentialColorComponentValue; } colorComponentValue;
该值可能取决于屏幕亮度,在笔记本电脑上,这意味着如果亮度在此期间发生变化,下一次调用 hdrInfo() 时结果可能会发生变化。最大屏幕亮度意味着最大色彩值为 1.0。
注: Apple 的 EDR 是显示参考值。1.0 相当于 SDR 白色的亮度水平(例如 200 尼特),其值根据屏幕亮度和可能的其他设置而变化。确切的亮度值或显示屏的最大亮度不会暴露在应用程序中。
注意: 据观察,在某些 macOS 系统上,色彩分量值不会在启动时立即设置为正确的大于 1 的值,而是在第一帧期间或之后发生变化。
另请参见 QRhiSwapChain::hdrInfo()。
QRhiSwapChainHdrInfo::LimitsType QRhiSwapChainHdrInfo::limitsType
对于 macOS/iOS 上的 Metal,平台 API 中没有亮度值。取而代之的是最大色彩分量值(在非 HDR 设置中为 1.0)。该值表示limits 中提供的信息类型。
另请参阅 QRhiSwapChain::hdrInfo().
QRhiSwapChainHdrInfo::LuminanceBehavior QRhiSwapChainHdrInfo::luminanceBehavior
描述平台在颜色值方面的假定行为。
另请参见 sdrWhiteLevel 。
float QRhiSwapChainHdrInfo::sdrWhiteLevel
在 Windows 中,这是动态 SDR 白电平,单位为尼特。该值取决于屏幕亮度(笔记本电脑),以及 Windows 设置 "系统/显示/HDR "视图中的 SDR 或 HDR 内容亮度设置。
要对非 HDR (SDR) 内容(如 2D UI 元素)执行白电平校正,只要luminanceBehavior 是SceneReferred ,就将最终颜色与 sdrWhiteLevel / 80.0 相乘(假定使用 Windows 和线性扩展 sRGB (scRGB) 色彩空间)。
在其他平台上,该值始终是一个预定义值,即 200。这可能与系统的实际 SDR 白电平不符,但当luminanceBehavior 为DisplayReferred 时,该变量的值实际上并不重要,因为此时色彩分量值 1.0 默认指的是 SDR 白电平。
另请参阅 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.