このページでは

QQuickGraphicsConfiguration Class

QQuickGraphicsConfigurationは、QQuickWindow の低レベルのグラフィック設定を制御します。詳細...

ヘッダー: #include <QQuickGraphicsConfiguration>
CMake: find_package(Qt6 REQUIRED COMPONENTS Quick)
target_link_libraries(mytarget PRIVATE Qt6::Quick)
qmake: QT += quick
以下のように: 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 の生成はアプリケーションの制御下にあるものの、その他のグラフィックスオブジェクトの初期化は、QQuickRenderControl::initialize() において、画面上のQQuickWindow の場合と同じ方法で行われます。

Qt Quick は、有効にするデバイス拡張機能など、多くの低レベルなグラフィックス設定に対して適切なデフォルト値を提供するため、大半のアプリケーションでは追加の設定は必要ありません。

しかし、これが常に十分であるとは限りません。高度なユースケース、たとえばVulkanやその他のグラフィックスAPIのコンテンツを直接統合する場合、あるいはOpenXRなどの外部3DやVRエンジンと統合する場合、アプリケーションは、どのデバイス拡張機能を有効にするかといった詳細について、独自の設定を指定したいと思うでしょう。

このクラスは、まさにそのためのものです。これにより、例えば、Vulkan を使用する際、またはこの概念が適用可能なグラフィックス API において、シーングラフによって読み込まれるデバイス拡張機能のリストなどを指定できるようになります。一部の概念が適用できない場合、関連する設定は単に無視されます。

このカテゴリの関数の例としては、setDeviceExtensions() やpreferredInstanceExtensions() などがあります。後者は、アプリケーションが独自のQVulkanInstance を管理し、それをQWindow::setVulkanInstance() を通じてQQuickWindow と関連付ける場合に役立ちます。

Qt Quick シーングラフ・レンダラーの設定

もう一つの設定カテゴリは、シーングラフのレンダラーに関連するものです。場合によっては、アプリケーションが特定の動作(例えば、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 コンパイルの結果を格納するためにのみ使用されるため、デバイスやベンダーに依存しません。

場合によっては、キャッシュを「事前設定」することで、アプリケーションの最初の実行パフォーマンスを向上させたいこともあるでしょう。これは、前回の実行で保存されたキャッシュファイルを同梱し、別のマシンやデバイスでそれを参照することで実現できます。 こうすることで、アプリケーションやデバイスは、キャッシュファイルが保存された実行時に以前に遭遇したシェーダープログラムやパイプラインを、初回実行時から利用できるようになります。 キャッシュファイルの配布と展開は、ターゲットシステム上のデバイスとグラフィックスドライバが同一である場合にのみ意味があります。そうでない場合、前述のように、デバイスやドライバのバージョンが一致しないときは(D3D11を除く)、キャッシュファイルは無視されます。

キャッシュの内容が読み込まれた後も、アプリケーションが以前の実行では遭遇したことのないグラフィックスおよびコンピュートパイプラインを構築する可能性があります。このような場合、パイプラインやシェーダープログラムがキャッシュに追加され、キャッシュは拡大します。 アプリケーションが内容(場合によっては同じファイルに)を保存することを選択した場合、新旧両方のパイプラインが保存されます。実行のたびに同じファイルから読み込み、同じファイルに保存することで、遭遇したすべてのパイプラインとシェーダープログラムを格納する、絶えず拡大し続けるキャッシュが実現されます。

実際には、Qtのパイプラインキャッシュは、以下のネイティブグラフィックスAPIの機能に対応すると予想されます:

  • Vulkan -VkPipelineCache- パイプラインキャッシュを保存すると、実質的にvkGetPipelineCacheData から取得した blob が保存されます。パイプラインキャッシュの blob は特定のドライバに依存するため、デバイスとドライバを確実に識別するための追加のメタデータも含まれます。
  • Metal -MTLBinaryArchive- パイプラインキャッシュの保存が有効になっている場合、Qtは遭遇したすべてのレンダリングおよびコンピュートパイプラインをMTLBinaryArchiveに保存します。パイプラインキャッシュの保存では、アーカイブから取得したブロブが保存され、デバイスを識別するための追加のメタデータも含まれます。注:現在、一部のハードウェアおよび OS バージョンにおけるさまざまな問題のため、macOS および iOS では MTLBinaryArchive の使用が無効になっています。
  • OpenGL - ネイティブなパイプラインの概念は存在しません。「パイプラインキャッシュ」には、glGetProgramBinary を通じて取得されたプログラムバイナリの集合が保存されます。プログラムバイナリは単一のブロブにパッケージ化され、デバイス、ドライバ、およびバイナリが取得されたバージョンを識別するための追加のメタデータが含まれます。 プログラムバイナリの永続的なキャッシュは、Qtにおいて新しい機能ではありません。Qt 5のQOpenGLShaderProgram にはすでに同様の機能があり、例としてはaddCacheableShaderFromSourceCode()を参照してください。 実際、OpenGLでQt Quick を使用する場合、Qt 6でもこのメカニズムは常に有効になっています。しかし、ここで提供される新しい、グラフィックスAPIに依存しないパイプラインキャッシュ抽象化を使用する場合、同じコンテンツが「パイプラインキャッシュ」にパッケージ化されるようになったため、Qt 5時代のプログラムバイナリキャッシュは自動的に無効化されます。
  • Direct 3D 11 - パイプラインや、第2フェーズのコンパイル(ベンダー非依存の中間バイトコードがデバイス固有の命令セットにコンパイルされる段階)のためのバイナリ取得に関するネイティブな概念は存在しません。 通常、ドライバはこのレベルで独自のキャッシュシステムを採用します。その代わりに、Qt Quick の「パイプラインキャッシュ」は、シェーダーにHLSLソースコードが含まれており、それをまず中間バイトコード形式にコンパイルする必要がある場合の処理を高速化するために使用されます。 これは、実行時にシェーダーコードを構成するアプリケーションやライブラリにおいて、大幅なパフォーマンス向上をもたらす可能性があります。なぜなら、遭遇したHLSLシェーダーのバイトコードがすでに利用可能であれば、その後の実行において、処理負荷が高くキャッシュされていないD3DCompile()への呼び出しを回避できるからです。 その好例がQt Quick 3D です。このアプリケーションでは、マテリアル用にランタイムで生成されるシェーダーにより、HLSL ソースコードを扱う必要があります。したがって、Qt Quick のパイプラインキャッシュを保存して再読み込みすることで、1 つ以上のView3D アイテムを含むシーンにおいて、パフォーマンスを大幅に向上させることができます。 対照的な例としては、Qt Quick 自体が挙げられます。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 を 0 以外の値に設定します。(自動保存を完全に無効化します)
  • 環境変数 QSG_RHI_DISABLE_SHADER_DISK_CACHE を 0 以外の値に設定します。(自動保存を完全に無効化します)
  • setAutomaticPiplineCache() を呼び出し、enable 引数を false に設定します。(自動保存を完全に無効化します)
  • setPipelineCacheLoadFile() を呼び出してファイル名を設定します。(自動ストレージからの読み込みのみを無効化し、代わりに指定されたファイルを優先します)
  • setPipelineCacheSaveFile() を呼び出してファイル名を設定します。(自動ストレージへの書き込みのみを無効にし、代わりに指定されたファイルを優先します)

最初の 2 つは、Qt 5.9 以降で OpenGL プログラムのバイナリキャッシュを制御するために使用されている既存の仕組みです。互換性と使い勝手の観点から、Qt 6 の拡張パイプラインキャッシュでも同じ属性および環境変数がサポートされています。

自動パイプラインキャッシュは、アプリケーションごとに 1 つのファイルを使用しますが、RHI バックエンド(グラフィックス API)ごとに異なるファイルを使用します。つまり、アプリケーションの次回実行時に別のグラフィックス API に変更しても、前回の実行で生成されたパイプラインキャッシュが失われることはありません。 ただし、複数のQQuickWindow インスタンスが同時に表示されるアプリケーションの場合、自動キャッシュは一度に1つのRHIオブジェクトから収集したデータしか保存できないため、100%の恩恵を受けられない可能性があります。(また、デフォルトの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 コンテンツが深度バッファに書き込まれることを許可することが理想的ではない場合もあります。2D シーンの上に「オーバーレイ」として 3D シーンがあり、renderMode がOverlay に設定されたView3D を使用してQt Quick 3D 経由でレンダリングされる場合を考えてみてください。この場合、深度バッファが 2D コンテンツで埋められると、予期しない結果が生じる可能性があります。 これは、2Dシーングラフレンダラーが深度値を生成・処理する方法が、3Dシーンの動作方法と必ずしも互換性がないためです。その結果、深度値の競合、衝突、および予期しない深度テストの失敗が発生する可能性があります。 したがって、ここでの確実な対処法は、enable をfalseに設定してこの関数を呼び出し、QQuickWindow 内で2Dコンテンツに対する深度バッファへの書き込みを無効にすることです。

注:このフラグは 、QSG_NO_DEPTH_BUFFER 環境変数を設定することと完全に同一ではありません。このフラグは、深度・ステンシルバッファの存在を制御するものではありません。むしろ、レンダリングパイプラインに関連するものです。深度・ステンシルアタッチメントを完全に無効にするには、QSG_NO_DEPTH_BUFFER およびQSG_NO_STENCIL_BUFFER を設定してください。 ただし、このようなQQuickWindow や、その中のItemレイヤーは、3Dコンテンツには深度バッファが必要であるため、特定の動作モードでの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 はファイル名のみを格納するものであり、それ自体では実際のI/Oやグラフィックス操作を実行することはできません。 実際の処理は、おそらく別のスレッド上で、後ほど実行されます。

パイプラインキャッシュ(またはシェーダー/プログラムバイナリ)の取得や再読み込みが適用できない、あるいはサポートされていないグラフィックス 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 で導入されました。

pipelineCacheLoadFile() およびpipelineCacheSaveFile()も参照してください 。

[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()も参照してください 。

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