QRhiSwapChainHdrInfo Struct
スワップチェーンに関連付けられた出力の、ハイダイナミックレンジ(HDR)に関する情報を説明します。詳細...
| ヘッダー: | #include <rhi/qrhi.h> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS GuiPrivate) 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) | limits |
| QRhiSwapChainHdrInfo::LimitsType | limitsType |
| QRhiSwapChainHdrInfo::LuminanceBehavior | luminanceBehavior |
| float | sdrWhiteLevel |
詳細な説明
ターゲット範囲が [0,1] ではない HDR 対応のトーンマッピングを実行するには、スワップチェーンのウィンドウが関連付けられているディスプレイの最大輝度を知る必要がある場合がよくあります。 これは多くの場合、ユーザーが設定可能になっています(ゲームの輝度、ガンマ、および同様の設定など)が、ディスプレイ自体が報告する値に基づいてデフォルトを設定し、適切な出発点を提供することは非常に有用です。
しかし、いくつかの問題があります。プラットフォームによって情報の公開形式が異なる上、クロスプラットフォームのグラフィックス API では、そのような情報の管理は API の範囲外であるため(もしあるとしても、プラットフォーム固有の他の手段で取得できる場合がある)、関連するソリューションがまったく提供されていないことがよくあります。
macOS/iOSのMetalでは、プラットフォームAPIを通じて輝度値が公開されていません。その代わりに、非HDR設定では1.0となる色成分の最大値が提供されます。limitsType フィールドは、どのような情報が利用可能かを示します。その後、QRhi のクライアント側が、limits ユニオンから正しいデータにアクセスし、必要に応じてそれを利用するのはクライアント側の責任となります。
Vulkanのような、そのような情報を取得する方法がないAPIの場合、値は常に組み込みのデフォルト値となります。
したがって、QRhiSwapChain::hdrInfo() から返される構造体には、ハードコードされたデフォルト値、あるいは DXGI (IDXGIOutput6) や Cocoa (NSScreen) などの API から受け取った実際の値のいずれかが含まれます。 プラットフォームのクエリが利用できない場合(あるいは、QRhi の範囲外となるプラットフォーム機能を使用する必要がある場合)、ハードコードされたデフォルト値は、最大輝度 1000 nits および 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
| 定数 | 値 | 説明 |
|---|---|---|
QRhiSwapChainHdrInfo::SceneReferred | 0 | 色値 1.0 が 80 ニットとして解釈されることを示します。これは、Windows コンポジターを使用した HDR 対応ウィンドウの動作です。Windows における HDR の詳細については、こちらのページを参照してください。 |
QRhiSwapChainHdrInfo::DisplayReferred | 1 | 色値 1.0 が SDR の白の値として解釈されることを示します。(例えば 200 ニットなどですが、画面の輝度によって異なります)これは、Apple プラットフォーム上で HDR を有効にしたウィンドウの動作です。Apple の EDR システムに関する詳細については、こちらのページを参照してください。 |
メンバ変数のドキュメント
union QRhiSwapChainHdrInfo::(unnamed union) QRhiSwapChainHdrInfo::limits
グラフィックスAPIまたはプラットフォームから取得した実際の値が含まれます。データの型はlimitsType で指定されます。したがって、これはユニオン型となります。現在、以下の2つのオプションがあります:
ニット単位の輝度値:
struct {
float minLuminance;
float maxLuminance;
} luminanceInNits;Windows では、輝度の最小値と最大値は画面の明るさに依存します。デスクトップPCでは関係ありませんが、ノートPCでは画面の明るさがいつでも変化する可能性があります。 輝度を上げると、最大輝度は低下します。さらに、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 では、これは nits 単位の動的 SDR ホワイトレベルです。この値は、画面の明るさ(ノートパソコンの場合)および、Windows の設定の「システム」→「ディスプレイ」→「HDR」画面にある「SDR または HDR コンテンツの明るさ」の設定に依存します。
2D UI要素などの非HDR(SDR)コンテンツに対して白レベル補正を行うには、luminanceBehavior がSceneReferred である場合、最終的な色値にsdrWhiteLevel / 80.0を乗算します(Windowsおよび線形拡張sRGB(scRGB)色空間を想定)。
他のプラットフォームでは、この値は常に事前定義された値である 200 になります。これはシステムの実際の SDR ホワイトレベルと一致しない場合がありますが、luminanceBehavior がDisplayReferred の場合、この変数の値は実際には関係ありません。なぜなら、その場合はデフォルトで色成分の値 1.0 が SDR ホワイトを指すためです。
「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.