QQuickGraphicsConfiguration Class
QQuickGraphicsConfiguration は、QQuickWindow の低レベルのグラフィック設定を制御します。
Header: | #include <QQuickGraphicsConfiguration> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS Quick) target_link_libraries(mytarget PRIVATE Qt6::Quick) |
qmake: | QT += quick |
Since: | Qt 6.0 |
パブリック関数
QQuickGraphicsConfiguration() | |
~QQuickGraphicsConfiguration() | |
QByteArrayList | deviceExtensions() const |
(since 6.5) bool | isAutomaticPipelineCacheEnabled() const |
bool | isDebugLayerEnabled() const |
bool | isDebugMarkersEnabled() const |
bool | isDepthBufferEnabledFor2D() const |
QString | pipelineCacheLoadFile() const |
QString | pipelineCacheSaveFile() const |
bool | prefersSoftwareDevice() const |
(since 6.5) void | setAutomaticPipelineCache(bool enable) |
(since 6.5) void | setDebugLayer(bool enable) |
(since 6.5) void | setDebugMarkers(bool enable) |
void | setDepthBufferFor2D(bool enable) |
void | setDeviceExtensions(const QByteArrayList &extensions) |
(since 6.5) void | setPipelineCacheLoadFile(const QString &filename) |
(since 6.5) void | setPipelineCacheSaveFile(const QString &filename) |
(since 6.5) void | setPreferSoftwareDevice(bool enable) |
(since 6.6) void | setTimestamps(bool enable) |
(since 6.6) bool | timestampsEnabled() const |
静的パブリックメンバー
(since 6.1) QByteArrayList | preferredInstanceExtensions() |
詳細説明
QQuickGraphicsConfiguration クラスは、Vulkan などの基礎となるグラフィックス API が Qt Quick シーングラフによって初期化される方法に影響を与えることができる、低レベルのグラフィックス設定のためのコンテナです。また、シーングラフレンダラの特定の側面を制御することもできます。
注意: QQuickWindow で QQuickGraphicsConfiguration を設定するには、シーングラフがそのウィンドウで初めて初期化される前に、十分に早い段階で行う必要があります。オンスクリーンウィンドウでは、この呼び出しはQQuickWindow またはQQuickView で show() を呼び出す前に行わなければなりません。QQuickRenderControl では、initialize() を呼び出す前にコンフィギュレーションを確定する必要があります。
外部レンダリングエンジンまたはXR APIの設定
レンダリングに Vulkan を使用するQQuickWindow を構築して表示する場合、Vulkan インスタンス (VkInstance
)、物理デバイス (VkPhysicalDevice
)、デバイス (VkDevice
)、および関連オブジェクト(キュー、プール)は、Vulkan API を介して初期化されます。テクスチャなどのカスタムレンダリングターゲットにレンダリングをリダイレクトするためにQQuickRenderControl を使用する場合も、ほとんど同じです。QVulkanInstance の構築はアプリケーションの制御下にありますが、その他のグラフィックオブジェクトの初期化は、画面上のQQuickWindow と同じようにQQuickRenderControl::initialize() で行われます。
Qt Quick は、どのデバイス拡張を有効にするかなど、多くの低レベルのグラフィッ クス設定に対して合理的なデフォルトを提供しているため、大半のアプリケーションでは、追加の設定 は必要ありません。
しかし、これだけでは十分ではありません。高度な使用例では、Vulkan や他のグラフィックス API のコンテンツを直接統合する場合や、OpenXR などの外部の 3D や VR エンジンと統合する場合、アプリケーションは、どのデバイス拡張を有効にするかなどの詳細について、独自の設定セットを指定したいと思うでしょう。
それを可能にするのがこのクラスです。例えば、デバイス拡張のリストを指定することができ、Vulkanや、コンセプトが適用可能なグラフィックスAPIを使用するときに、シーングラフによってピックアップされます。いくつかの概念が適用されない場合、関連する設定は単に無視されます。
このカテゴリの関数の例は、setDeviceExtensions ()とpreferredInstanceExtensions ()です。後者は、アプリケーションが独自のQVulkanInstance を管理し、QWindow::setVulkanInstance() を介してQQuickWindow に関連付ける場合に便利です。
Qt クイックシーングラフレンダラの設定
シーングラフのレンダラーに関する設定もあります。アプリケーションによっては、2D コンテンツのレンダリング時に深度バッファを使用するなど、特定の動作を制御したい場合があります。Qt 5 では、このような設定はまったく制御できなかったか、環境変数で管理されていました。Qt 6 では、QQuickGraphicsConfiguration は、これらの設定のための新しいホームを提供します。
このカテゴリの例はsetDepthBufferFor2D() です。
グラフィックス・デバイスの設定
QQuickWindow を初期化するときに Qt によってグラフィックインスタンスとデバイスオブジェクト(例えば、Vulkan の VkInstance と VkDevice、Direct 3D の ID3D11Device など)が作成されるとき、特定の状況下でアプリケーションやライブラリが制御したい設定があります。
Qt 6.5 以前では、このような設定の一部は環境変数で制御できました。例えば、QSG_RHI_DEBUG_LAYER
やQSG_RHI_PREFER_SOFTWARE_RENDERER
などです。これらはまだ利用可能で、以前と同じように機能します。QQuickGraphicsConfiguration は、さらに C++ のセッターを提供します。
たとえば、次の main() 関数は、Vulkan 検証または Direct3D デバッグ レイヤーを有効にするように指定しながら、QQuickView を開きます:
int main(int argc, char *argv[]) { QGuiApplication app(argc, argv); QQuickGraphicsConfiguration config; config.setDebugLayer(true); QQuickView *view = new QQuickView; view->setGraphicsConfiguration(config); view->setSource(QUrl::fromLocalFile("myqmlfile.qml")); view->show(); return app.exec(); }
パイプラインキャッシュの保存と読み込み
Qt Quick は、グラフィックス/演算パイプラインキャッシュをディスクに保存し、アプリケーションの次回実行時に再ロードすることをサポートしています。パイプラインキャッシュに何が含まれるのか、どのようにルックアップするのか、何が高速化されるのかは、すべて Qt RHI バックエンドと、実行時に使用されるネイティブグラフィックス API に依存します。異なる3D APIは、シェーダ、プログラム、パイプライン・ステート・オブジェクト、および対応するキャッシュ・メカニズムに関して、異なるコンセプトを持っています。ここでの高レベルのパイプライン・キャッシュのコンセプトは、ファイルとの間で単一のバイナリ・ブロブを格納および取得するために、これらすべてを抽象化します。
注意: キャッシュをディスクに保存することで、アプリケーションの後続の実行で、時には大幅に改善されることがあります。
以前の実行と同じシェーダプログラムやパイプラインの状態に遭遇すると、多くの 操作がスキップされ、シェーダやマテリアルの初期化時間が短縮されます。
パイプラインキャッシュ(またはシェーダ/プログラムバイナリ)の取得と再読み込みが適用できない、またはサポートされていないグラフィックス API で実行する場合、ファイルを使用してキャッシュの保存と読み込みを試みても効果はありません。
注意: 多くの場合、取得されたデータはグラフィックドライバ(そしておそらくその正確なバージョン)に依存し、関連付けられています。Qt は、パイプライン・キャッシュ・ファイルに追加のメタデータを保存することで、必要なチェックを自動的に行います。ファイル内のデータが実行時にグラフィック・デバイスやドライバのバージョンと一致しない場合、その内容はアプリケーションに対して透過的に無視されます。したがって、別のデバイスやドライバで生成されたキャッシュを参照しても安全です。
ドライバ依存の問題には例外があり、特に Direct 3D 11 では、"パイプライン・キャッシュ "は実行時の HLSL->DXBC コンパイルの結果を格納するためだけに使用されるため、デバイスやベンダーに依存しません。
場合によっては、キャッシュを "pre-seed "することによって、アプリケーションの最初の実行を改善することが望ましいかもしれません。これは、以前の実行から保存されたキャッシュファイルを出荷し、別のマシンやデバイスでそれを参照することで可能です。こうすることで、アプリケーションやデバイスは、キャッシュファイ ルを保存した実行で以前に遭遇したシェーダープログラム/パイプラインを、その初回 実行時にすでに利用できるようになります。そうでない場合は、キャッシュファイルは無視されます(D3D11 を除く)。
一旦キャッシュの内容がロードされると、アプリケーションは以前の実行で遭遇したことのないグラフィックや計算パイプラインを構築する可能性があります。この場合、パイプラインやシェーダープログラムがキャッシュに追加され、キャッシュが拡張されます。アプリケーションが内容を保存することも選択した場合(おそらく同じファイルにも保存される)、古いパイプラインと新しいパイプラインの両方が保存されます。すべての実行で同じファイルからロードし、同じファイルに保存することで、遭遇したすべてのパイプラインとシェーダープログラムを保存するキャッシュが増え続けます。
実際には、Qtのパイプラインキャッシュは、以下のネイティブグラフィックスAPIの機能に対応することが期待できます:
- Vulkan -VkPipelineCache- パイプラインキャッシュを保存すると、vkGetPipelineCacheData から取得した blob が効果的に保存され、パイプラインキャッシュ blob は正確なドライバに依存するため、デバイスとドライバを安全に識別するメタデータが追加されます。
- Metal -MTLBinaryArchive- パイプラインキャッシュの保存を有効にすると、Qt はレンダリングおよび計算パイプラインをすべて MTLBinaryArchive に保存します。パイプラインキャッシュを保存すると、アーカイブから取得した blob が、デバイスを識別するための追加メタデータと共に保存されます。注:現在、MTLBinaryArchiveの使用は、一部のハードウェアとOSバージョンでさまざまな問題があるため、macOSとiOSでは無効になっています。
- OpenGL - ネイティブのパイプラインの概念はありません。"パイプライン・キャッシュ "は、glGetProgramBinaryを介して取得されたプログラム・バイナリのコレクションを保存します。プログラム・バイナリは、バイナリが取得されたデバイス、ドライバ、およびそのバージョンを識別するための追加メタデータとともに、1つのblobにパッケージ化されます。プログラムバイナリの永続的なキャッシュは、Qtでは新しいものではありません:Qt 5では、すでにQOpenGLShaderProgram 、例えばaddCacheableShaderFromSourceCode()を参照してください。実際、このメカニズムはQt 6でもOpenGLでQt Quickを使うときには常に有効です。しかし、ここで提供される新しい、グラフィックAPIに依存しないパイプラインキャッシュの抽象化を使用する場合、Qt 5時代のプログラムバイナリキャッシュは自動的に無効になります。
- Direct 3D 11 - パイプラインのネイティブな概念はなく、第2段階のコンパイル(ベンダーに依存しない中間バイトコードがデバイス固有の命令セットにコンパイルされる)のためにバイナリを取得することもありません。ドライバは通常、そのレベルで独自のキャッシュシステムを採用します。その代わりに、Qt Quick の "パイプラインキャッシュ "は、中間バイトコード形式に最初にコンパイルされる必要がある HLSL ソースコードがシェーダに含まれている場合に、スピードアップのために使用されます。これは、実行時にシェーダコードをコンパイルするアプリケーションやライブラリにおいて、大幅な性能向上をもたらします。なぜなら、遭遇した HLSL シェーダに対してバイトコードが既に利用可能であれば、その後の実行において、高価になる可能性のあるキャッシュされていないD3DCompile() の呼び出しを回避できるからです。Qt Quick 3Dが良い例で、マテリアル用にランタイムで生成されるシェーダは、HLSLソースコードを扱う必要があります。Qt Quick のパイプラインキャッシュの保存と再読み込みは、1 つ以上のView3D アイテムを含むシーンで、かなりの改善をもたらします。2D コンテンツ用のほとんどのビルトイン・シェーダは、ビルド時に生成される DirectX バイトコードで出荷されるため、キャッシュを使用しても大きな改善は期待できません。
これらはすべて、Qt Shader Toolsモジュールやqsb
のようなコマンドラインツールによって実行されるシェーダ処理とは無関係です。例として、Vulkan を見てみましょう。Vulkan互換のGLSLソースコードをオフラインまたはビルド時(qsbまたはCMake経由で直接)にSPIR-Vにコンパイルすることは、実行時にソースフォームからの高価なコンパイルが回避されるため、良いことです。しかし、SPIR-Vはベンダーに依存しない中間フォーマットです。実行時に、グラフィックスや計算パイプラインを構築する際に、中間フォーマットからGPUのベンダー固有の命令セットへのコンパイルがもう1回行われる可能性があります(これは、グラフィックスパイプラインやレンダーターゲットの特定の状態にも依存する可能性があります)。パイプラインキャッシュは、この後者のフェーズを支援します。
注: 多くのグラフィックスAPI実装は、アプリケーションに対して透過的に、独自の永続ディスクキャッシュを採用しています。この場合、Qt Quick のパイプラインキャッシュ機能を使用すると改善される可能性が高いですが、その効果は小さいかもしれません。
setPipelineCacheSaveFile() とsetPipelineCacheLoadFile() を呼び出して、QQuickWindow またはQQuickView がパイプライン・キャッシュをどのファイルに保存し、どのファイルからロードするかを制御します。
パイプラインキャッシュのディスク保存を有効にする効果を知るために、最も重要なシーングラフとグラフィックのログを、環境変数QSG_INFO=1
、またはqt.scenegraph.general
とqt.rhi.general
の両方のロギングカテゴリを介して有効にしてください。QQuickWindow を閉じると、次のようなログメッセージが表示されます:
Total time spent on pipeline creation during the lifetime of the QRhi was 123 ms
これは、ウィンドウの寿命の間に、グラフィックスとコンピュートパイプラインの作成(シェーダのコンパイルの様々な段階を含むかもしれません)に費やされた時間のおおよその見当を与えます。
パイプラインキャッシュファイルからのロードが有効になっている場合、これはメッセー ジで確認されます:
Attempting to seed pipeline cache from 'filename'
同様に、キャッシュの保存が正常に有効になっているかどうかを確認するには、次のようなメッセージを探します:
Writing pipeline cache contents to 'filename'
自動パイプラインキャッシュ
保存とロードにファイル名が指定されていない場合、自動パイプライン・キャッシュが使用されます。この場合、システムのアプリケーション固有のキャッシュ場所(QStandardPaths::CacheLocation )にデータが保存されます。
これは以下のいずれかの方法で無効にすることができます:
- アプリケーション属性Qt::AA_DisableShaderDiskCache を設定する。(自動保存を完全に無効にする)
- 環境変数 QT_DISABLE_SHADER_DISK_CACHE をゼロ以外の値に設定する。(自動保存を完全に無効にする)
- 環境変数 QSG_RHI_DISABLE_SHADER_DISK_CACHE にゼロ以外の値を設定する。(自動保存を完全に無効にする)
- enable 引数を false に設定して setAutomaticPiplineCache() を呼び出す。(自動保存を完全に無効にする)
- setPipelineCacheLoadFile() を呼び出してファイル名を設定する。(自動ストレージからのロードを無効にするだけで、代わりに指定されたファイルを優先する)
- setPipelineCacheSaveFile() を呼び出してファイル名を設定。(自動ストレージへの書き込みのみを無効にし、代わりに指定されたファイルを優先する)
最初の2つは、OpenGLプログラムのバイナリキャッシュを制御するために、Qt 5.9から使われている既存のメカニズムです。互換性と親しみやすさのために、同じ属性と環境変数が Qt 6 の強化されたパイプラインキャッシュでもサポートされています。
自動パイプラインキャッシュは、アプリケーションごとに1つのファイルを使用しますが、RHIバックエンド(グラフィックスAPI)ごとに異なるファイルを使用します。これは、アプリケーションの次の実行で別のグラフィックス API に変更しても、前の実行で生成されたパイプラインキャッシュが失われないことを意味します。QQuickWindow 自動キャッシュは、一度に1つのRHIオブジェクトから収集されたデータしか保存できないためです。(自動キャッシュは、一度に1つのRHIオブジェクトから収集されたデータしか保存できないからです(また、デフォルトのthreaded
レンダリングループでは、レンダリングが専用スレッドで独立して動作するため、各ウィンドウが独自のRHIを持ちます)。複数のウィンドウを使用するアプリケーションでディスクキャッシュの恩恵を十分に受けるには、setPipelineCacheSaveFile() を使用してウィンドウごとにファイル名を明示的に設定することをお勧めします。
QQuickWindow::setGraphicsConfiguration()、QQuickWindow 、およびQQuickRenderControlも参照のこと 。
メンバ関数のドキュメント
QQuickGraphicsConfiguration::QQuickGraphicsConfiguration()
シーングラフを考慮するための追加設定を指定しないデフォルトの QQuickGraphicsConfiguration を構築します。
[noexcept]
QQuickGraphicsConfiguration::~QQuickGraphicsConfiguration()
デストラクタ。
QByteArrayList QQuickGraphicsConfiguration::deviceExtensions() const
要求された追加デバイス拡張のリストを返します。
setDeviceExtensions()も参照してください 。
[since 6.5]
bool QQuickGraphicsConfiguration::isAutomaticPipelineCacheEnabled() const
自動パイプラインキャッシュが有効な場合、true を返します。
デフォルトでは、特定のアプリケーション属性または環境変数が設定されていない限り、これは true です。詳細はThe Automatic Pipeline Cache を参照してください。
この関数は Qt 6.5 で導入されました。
setAutomaticPipelineCache()も参照してください 。
bool QQuickGraphicsConfiguration::isDebugLayerEnabled() const
デバッグ/検証レイヤーを有効にする場合、true を返します。
デフォルトでは false です。
setDebugLayer()も参照して ください。
bool QQuickGraphicsConfiguration::isDebugMarkersEnabled() const
デバッグマーカーを有効にする場合に true を返します。
デフォルトでは false です。
setDebugMarkers() も参照 。
bool QQuickGraphicsConfiguration::isDepthBufferEnabledFor2D() const
2D コンテンツで深度バッファの使用が有効になっている場合に true を返します。
デフォルトでは、QSG_NO_DEPTH_BUFFER
環境変数が設定されていない限り、値は true です。
QString QQuickGraphicsConfiguration::pipelineCacheLoadFile() const
パイプラインキャッシュを読み込むために現在設定されているファイル名を返します。
デフォルトでは、値は空文字列です。
setPipelineCacheLoadFile()も参照 。
QString QQuickGraphicsConfiguration::pipelineCacheSaveFile() const
パイプライン・キャッシュを保存するために現在設定されているファイル名を返します。
既定では、値は空文字列です。
setPipelineCacheSaveFile()も参照してください 。
[static, since 6.1]
QByteArrayList QQuickGraphicsConfiguration::preferredInstanceExtensions()
Qt Quick が VkInstance で有効にすることを好む Vulkan インスタンス拡張のリストを返します。
ほとんどの場合、Qt Quick はQVulkanInstance を作成します。 その場合、この関数は関係ありません。一方、QQuickRenderControl を Vulkan ベースのレンダリングと組み合わせて使用する場合、QVulkanInstance を作成し、(画面外の)QQuickWindow と関連付けるのはアプリケーションの責任です。この場合、QVulkanInstance::create() を呼び出す前に、アプリケーションが有効にするインスタンス拡張のリストを照会し、QVulkanInstance::setExtensions() に渡すことが期待されます。
この関数は Qt 6.1 で導入されました。
bool QQuickGraphicsConfiguration::prefersSoftwareDevice() const
ソフトウェア・ラスタライザー・ベースのグラフィック・デバイスが優先される場合、true を返します。
デフォルトでは false です。
setPreferSoftwareDevice()も参照してください 。
[since 6.5]
void QQuickGraphicsConfiguration::setAutomaticPipelineCache(bool enable)
enable に基づいて、自動パイプラインキャッシュの使用方法を変更します。
特定のアプリケーション属性または環境変数が設定されていない限り、デフォルト値はtrueです。詳細はThe Automatic Pipeline Cache を参照してください。
この関数は Qt 6.5 で導入されました。
isAutomaticPipelineCacheEnabled()も参照してください 。
[since 6.5]
void QQuickGraphicsConfiguration::setDebugLayer(bool enable)
グラフィックス API 実装のデバッグレイヤーまたは検証レイヤーがあれば、それを有効にします。
実際には、必要なサポート(検証レイヤー、Windows SDK)がインストールされ、実行時に利用可能であれば、Vulkan と Direct 3D 11 でサポートされます。enable が true の場合、Qt は VkInstance 上で標準の検証レイヤーを有効にするか、グラフィックデバイスにD3D11_CREATE_DEVICE_DEBUG
を設定しようとします。
macOS 上の Metal の場合は、アプリケーションを起動する前に、代わりに環境変数METAL_DEVICE_WRAPPER_TYPE=1
を設定します。
enable を true に設定してこの関数を呼び出すことは、環境変数QSG_RHI_DEBUG_LAYER
を 0 以外の値に設定することと同じです。
デフォルト値はfalseです。
注意: デバッグレイヤーまたは検証レイヤーを有効にすると、パフォーマンスに重大な影響を与えない場合があります。このフラグを有効にしたままアプリケーションを本番環境に出荷することは、強く推奨されません。
注意 : 基礎となるグラフィックスAPIの設計の違いにより、この設定は、QQuickWindow がそれぞれ独自のQQuickGraphicsConfiguration を持っていたとしても、QQuickWindow 毎の設定とは限らないことに注意してください。特にVulkanでは、インスタンスオブジェクト(VkInstance)は一度だけ作成され、アプリケーション内のすべてのウィンドウで使用されます。したがって、検証レイヤーを有効にすることは、すべてのウィンドウに影響します。これはまた、他のウィンドウがすでにレンダリングを開始した後にのみ表示されるウィンドウを介して検証を有効にしようとしても、Vulkanでは効果がないことを意味します。D3D11 のような他の API では、デバッグ レイヤーのコンセプトはデバイスごと (ID3D11Device) の設定として公開されるため、ウィンドウごとに制御されます (シーングラフのレンダー ループでは、QQuickWindow ごとに専用のグラフィック デバイス/コンテキストが使用されます)。
この関数は Qt 6.5 で導入されました。
isDebugLayerEnabled()も参照してください 。
[since 6.5]
void QQuickGraphicsConfiguration::setDebugMarkers(bool enable)
該当する場合、enable は、デバッグマーカーとオブジェクト名をグラフィックスコマンドストリームに挿入することを制御します。
Qt Quick 3Dのようないくつかのフレームワークでは、作成されたグラフィックオブジェクト(バッファ、テクスチャ)に名前を付けたり、レンダリングパスの開始と終了をコマンドバッファに表示したりすることができます。これらは、RenderDocやXCodeのようなツールで作成されたフレームキャプチャで見ることができます。
これがサポートされることが期待されるグラフィックスAPIは、Vulkan(VK_EXT_debug_utilsが利用可能な場合)、Direct 3D 11、およびMetalです。
enable を true に設定してこの関数を呼び出すことは、環境変数QSG_RHI_PROFILE
を 0 以外の値に設定することと同じです。
デフォルト値はfalseです。
注: デバッグマーカーを有効にすると、パフォーマンスに影響が出る場合があります。このフラグを有効にしたままアプリケーションを本番環境に出荷することは推奨されません。
この関数は Qt 6.5 で導入されました。
isDebugMarkersEnabled()も参照してください 。
void QQuickGraphicsConfiguration::setDepthBufferFor2D(bool enable)
2D コンテンツの深度バッファの使用率をenable に設定します。無効にすると、Qt Quick のシーングラフは深度バッファに書き込まれません。
デフォルトでは、QSG_NO_DEPTH_BUFFER
環境変数が設定されていない限り、この値は true です。
デフォルト値の true は、大半のシーンで最も最適な設定です。深度バッファの使用を無効にすると、シーングラフのバッチ処理の効率が低下します。
しかし、2D コンテンツの深度バッファへの書き込みを許可することが理想的でない場合もあります。View3D renderMode をOverlay
に設定した Qt Quick 3D を使用してレンダリングした、2D シーン上の「オーバーレイ」としての 3D シーンを考えてみましょう。この場合、2D コンテンツによって深度バッファが満たされると、予期しない結果を引き起こす可能性があります。これは、2D シーン グラフ レンダラーが深度値を生成して処理する方法が、3D シーンの動作方法と必ずしも互換性がないためです。このため、深度値の衝突、衝突、予期しない深度テストの失敗が発生する可能性があります。したがって、enable を false に設定してこの関数を呼び出し、QQuickWindow の 2D コンテンツの深度バッファ書き込みを無効にするのが、堅牢なアプローチです。
注意: このフラグは、QSG_NO_DEPTH_BUFFER
環境変数を設定するのと完全に同じではありません。このフラグは、深度ステンシルバッファの存在を制御するものではありません。むしろレンダリングパイプラインに関係します。デプス/ステンシルアタッチメントをまったく持たないようにするには、QSG_NO_DEPTH_BUFFER
とQSG_NO_STENCIL_BUFFER
を設定します。ただし、3Dコンテンツは深度バッファを必要とするため、このようなQQuickWindow 、およびその中のアイテムレイヤーは、特定の動作モードでView3D などのアイテムと互換性がなくなる可能性があることに注意してください。この関数を呼び出すことは常に安全であるが、デプスバッファなどのリソースがアクティブに使用されていないにもかかわらず作成されることを意味することがある。
void QQuickGraphicsConfiguration::setDeviceExtensions(const QByteArrayList &extensions)
グラフィックスデバイス(VkDevice
など)で有効にする追加extensions のリストを設定します。
この概念が適用されないグラフィックス API でレンダリングする場合、extensions は無視されます。
注意: このリストでは、追加のエクステンションを指定します。Qt Quick は、シーングラフで必要な拡張機能を常に有効にします。
deviceExtensions()も参照してください 。
[since 6.5]
void QQuickGraphicsConfiguration::setPipelineCacheLoadFile(const QString &filename)
QQuickWindow がグラフィックス/計算パイプラインキャッシュの初期コンテンツをロードするfilename を設定します。デフォルト値は空で、これはパイプラインキャッシュのロードが無効であることを意味します。
パイプラインキャッシュについては、Pipeline Cache Save and Load を参照してください。
パイプラインキャッシュを永続的に保存すると、高価なシェーダコンパイルとパイ プライン構築のステップを回避できるため、アプリケーションの将来 の実行における性能向上につながる可能性があります。
ファイルの内容のロードがいつ行われるかは定義されていません。QQuickWindow のシーングラフの初期化中のある時点で行われます。したがって、この関数を呼び出した後も、ファイルは存在し続けなければなりません。QQuickGraphicsConfiguration はファイル名を保存するだけで、それ自体で実際の入出力やグラフィック操作を実行することはできません。実際の作業は、後で、場合によっては別のスレッドで行われる。
パイプライン・キャッシュ(またはシェーダー/プログラム・バイナリ)の取得と再読み込みが適用できないか、サポートされていないグラフィックスAPIで実行する場合、この関数を呼び出しても何の効果もありません。
この関数を呼び出すことは、環境変数QSG_RHI_PIPELINE_CACHE_LOAD
をfilename に設定することとほぼ同じですが、1つ重要な違いがあります。この関数は、関連するQQuickWindow のパイプライン・キャッシュ・ストレージのみを制御します。したがって、複数のQQuickWindow またはQQuickView インスタンスを持つアプリケーションは、各ウィンドウ専用のファイルによってキャッシュの内容を保存し、後で再読み込みすることができます。環境変数はこれを許さない。
注意: ファイル内のデータが実行時のグラフィックス・デバイスとドライバ・バージョンに一致しない場合、アプリケーションに対して透過的に、その内容は無視される。これは多くのグラフィックスAPIに適用され、必要なチェックはQtが行います。例外もあり、特に Direct 3D 11 では、"パイプラインキャッシュ "は実行時の HLSL->DXBC コンパイルの結果を保存するためだけに使用されるため、デバイスやベンダーに依存しません。
この関数は Qt 6.5 で導入されました。
pipelineCacheLoadFile() およびsetPipelineCacheSaveFile()も参照してください 。
[since 6.5]
void QQuickGraphicsConfiguration::setPipelineCacheSaveFile(const QString &filename)
QQuickWindow がグラフィックス/計算パイプラインキャッシュの内容を格納するfilename を設定します。デフォルト値は空で、これはパイプラインキャッシュの読み込みが無効であることを意味します。
パイプラインキャッシュについては、Pipeline Cache Save and Load を参照してください。
パイプラインキャッシュを永続的に保存すると、高価なシェーダコンパイルとパイプ ライン構築のステップを回避できるため、アプリケーションの将来の実行でパフ ォーマンスが向上する可能性があります。
ファイルの書き込みがいつ行われるかは定義されていません。おそらく、ウィンドウを閉じるためにシーングラ フをテールダウンするときに起こるでしょう。したがって、アプリケーションは、QQuickWindow が完全にデストラクトされるまで、ファイルが利用可能であると仮定すべきではありません。QQuickGraphicsConfiguration は、ファイル名を保存するだけで、実際のI/Oやグラフィックス操作は行いません。
パイプライン・キャッシュ(またはシェーダー/プログラム・バイナリ)の取得が適用できないか、サポートされていないグラフィックスAPIで実行する場合、この関数を呼び出しても何の効果もありません。
この関数を呼び出すことは、環境変数QSG_RHI_PIPELINE_CACHE_SAVE
をfilename に設定することとほぼ同じですが、1つ重要な違いがあります。この関数は、関連するQQuickWindow のパイプライン・キャッシュ・ストレージのみを制御します。したがって、複数のQQuickWindow またはQQuickView インスタンスを持つアプリケーションは、各ウィンドウ専用のファイルによってキャッシュの内容を保存し、後で再読み込みすることができます。環境変数はこれを許しません。
この関数は Qt 6.5 で導入されました。
pipelineCacheSaveFile(),pipelineCacheLoadFile(), setPipelineCacheSaveFile()も参照してください 。
[since 6.5]
void QQuickGraphicsConfiguration::setPreferSoftwareDevice(bool enable)
ソフトウェアベースのラスタライズを使用するアダプタまたは物理デバイスの選択を要求します。基礎となる API がアダプタの列挙をサポートしている場合にのみ適用され (たとえば、Direct 3D や Vulkan)、それ以外の場合は無視されます。
グラフィックスAPIの実装にそのようなグラフィックスアダプターや物理デバイスがない場合、リクエストは無視されます。Direct 3D では、WARP ベースのラスタライザが常に利用可能であることが期待できます。Vulkan では、このフラグは Mesa のlavapipe
、またはVK_PHYSICAL_DEVICE_TYPE_CPU
を報告する他の物理デバイスが利用可能な場合にのみ効果があります。
enable を true に設定してこの関数を呼び出すことは、環境変数QSG_RHI_PREFER_SOFTWARE_RENDERER
を 0 以外の値に設定することと同じです。
デフォルト値は false です。
この関数は Qt 6.5 で導入されました。
prefersSoftwareDevice()も参照してください 。
[since 6.6]
void QQuickGraphicsConfiguration::setTimestamps(bool enable)
有効にすると、これがサポートされているプラットフォームと 3D API 上で、GPU タイミングデータがコマンドバッファから収集されます。このデータは、QSG_RENDER_TIMING
環境変数や、qt.scenegraph.time.renderloop
などのロギングカテゴリで有効にできるレンダラーのログに出力され、Qt Quick 3D のDebugView アイテムなど、他のモジュールからも見えるようになります。
デフォルトでは、これは無効になっています。なぜなら、データを収集するには、コマンドストリームにタイムスタンプクエリを挿入するなど、基礎となるグラフィックスAPIによって追加の作業が必要になる場合があるからです。有効にするには、enable を true に設定してこの関数を呼び出すか、QSG_RHI_PROFILE
環境変数を 0 以外の値に設定します。
これがサポートされることが期待できるグラフィックスAPIは、Direct 3D 11、Direct 3D 12、Vulkan(基盤となるVulkan実装がタイムスタンプクエリをサポートしている限り)、Metal、およびバージョン3.3以降のコアまたは互換性プロファイルコンテキストを持つOpenGLです。タイムスタンプはOpenGL ESではサポートされていません。
この関数は Qt 6.6 で導入されました。
timestampsEnabled() およびsetDebugMarkers()も参照してください 。
[since 6.6]
bool QQuickGraphicsConfiguration::timestampsEnabled() const
GPU タイミング収集が有効な場合に true を返します。
デフォルトでは false です。
この関数は Qt 6.6 で導入されました。
setTimestamps()も参照して ください。
©2024 The Qt Company Ltd. 本文書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。