Qt for Windows - グラフィックス アクセラレーション

Qt for Windows Qt Quickを動作させるには、Direct 3D 11、Direct3D 12、Vulkan 1.0、または OpenGL 2.1 以上をサポートするグラフィックドライバが必要です。Qt 6 では、Windows のQt Quick のデフォルトは Direct3D 11 です。これは、デフォルトがOpenGLであったQt 5とは異なり、直接、またはOpenGLからDirect3DへのトランスレータであるANGLEを介して行われます。ANGLEはQt 6ではQtに同梱されなくなりました。

Direct3D のソフトウェア・ラスタライザ(WARP)を強制的に使用するには、環境変数QSG_RHI_PREFER_SOFTWARE_RENDERER1 に設定します。場合によっては、Qt Quick が自動的にこのようなフォールバックを行い、追加設定なしで Qt アプリケーションを実行できるようにします。これは、ドライバが十分なレベルの D3D11 機能を提供していない場合に発生し、適切な GPU アクセラレーションとパススルーが実装されていない仮想マシンでよく起こります。使用されているグラフィックデバイスが不明な場合や、トラブルシューティング、Qt に問題を報告する場合は、環境変数QSG_INFO=1 を設定してアプリケーションを実行し、デバッグ出力を確認してください。qtdiag ツールを実行すると、利用可能な 3D API をすべて列挙するので、有益な情報を得ることもできます。

Vulkan、OpenGL、または Direct 3D 12 の使用を要求するには、環境変数QSG_RHI_BACKENDvulkan またはopengl またはd3d12 に設定するか、同等のC++ APImain() で使用します。これらの3D APIの中には、適切なドライバをインストールする必要があ るものもあることに注意してください。

のデフォルトではありません。 Qt Quick例えば、QOpenGLWindowQOpenGLWidget をベースにしたQWidget ベースのアプリケーションでは、OpenGL は多くの Qt アプリケーションで一般的に使用されています。 以下のセクションでは、Qt ビルドにおける OpenGL の仕様について説明します。

OpenGL の動的ロード

Qt は実行時に OpenGL 実装を選択してロードすることをサポートしています。このモードはデフォルトで、configureスクリプトに-opengl dynamic

configure -opengl dynamic

この設定は、ビルド時にOpenGL実装に関する依存関係や仮定がハードコードされないため、最も柔軟です。そのため、アプリケーションのデプロイメントが堅牢になります。与えられた環境が適切なOpenGL 2.0実装を提供できない場合、opengl32.dll (デフォルト名はopengl32sw.dll )の代替をロードするように自動的にフォールバックします。ビルド済みの Qt パッケージは、OpenGL のソフトウェアラスタライザ実装である Mesa llvmpipe のビルドを、この名前で出荷しています。

-opengl dynamic で設定すると、Qt も、qmake またはCMake を使ってビルドされたアプリケーションも、opengl32.lib にリンクしません。代わりに、実行時にライブラリが選択され、ロードされます。デフォルトでは、Qtはシステムのopengl32.dllがOpenGL 2関数を提供しているかどうかを判断します。これらが存在する場合はopengl32.dllが使用され、そうでない場合はopengl32sw.dll をロードしようとします。詳細は以下を参照。

読み込みメカニズムは、QT_OPENGL 環境変数と以下のアプリケーション属性で設定できます:

  • Qt::AA_UseDesktopOpenGL QT_OPENGL を に設定するのと同じです。desktop
  • Qt::AA_UseOpenGLES Qt 6 では効果がありません。
  • Qt::AA_UseSoftwareOpenGL QT_OPENGL を に設定するのと同じです。software

特定のコンフィギュレーションが明示的に要求された場合、アプリケーションの起動時にチェックは行われません。

つまり、システムが提供する opengl32.dll は検査されません。ダイナミック・ローディングは、 ネイティブの OpenGL 呼び出しを含むアプリケーションに重大な影響を与えます。代わりに、アプリケーションはQOpenGLFunctions クラスを介して OpenGL 関数を使用することが期待されます。このように、OpenGLライブラリへの直接的な依存は取り除かれ、すべての呼び出しはQtが選択した実装に実行時にルーティングされます。あるいは、アプリケーションは、.proプロジェクトファイルにopengl32.libを追加すれば、OpenGL関数を直接呼び出すことができます:LIBS += opengl32.lib(Visual Studio) またはLIBS += -lopengl32(Mingw-w64).この結果は、アプリケーションから見ると、Qt の-opengl desktop ビルド設定と同じです。

Qt::AA_UseSoftwareOpenGL は、非標準的な名前のOpenGL実装をロードしようとするという意味で特別です。デフォルトの名前は です。これにより、ソフトウェアのみのOpenGL実装、たとえばopengl32sw.dllllvmpipeを使ったMesaのビルドを、この名前で出荷することができます。必要であれば、 環境変数を設定することで、ファイル名を上書きできます。QT_OPENGL_DLL

グラフィックスカードとドライバーのバージョンに応じて、どのOpenGL実装を使うかを指定するJSON形式の設定ファイルを提供することができる。場所は環境変数QT_OPENGL_BUGLIST で指定します。相対パスはQLibraryInfo::SettingsPath またはQStandardPaths::ConfigLocation を使用して解決されます。 このファイルは、The Chromium Projects で使用されているドライバーバグリストの形式を利用しています。このファイルは、エントリーのリストで構成され、各エントリーは一連の 条件と機能キーワードのリストを指定する。通常、デバイスIDとベンダーIDは、特定のグラフィックスカードにマッチするために使用されます。これらは、qtdiag6 またはdxdiag ツールの出力で見つけることができる。

以下の特徴キーワードは、OpenGL実装の選択に関連します:

注意: Qt 6では、レガシーなANGLE関連キーワード(disable_angle,disable_d3d11,disable_d3d9)が使えますが、効果はありません。

  • disable_desktopgl - OpenGLを無効にします。これにより、Qtは通常のOpenGL(opengl32.dll)を使用しようとせず、すぐにANGLEで開始します。これは悪いOpenGLドライバがアプリケーションをクラッシュさせるのを防ぐのに便利です。
  • disable_rotation - アプリケーションを常に横向きで実行するように強制します。ソフトウェアOpenGL実装を使用している場合は効果がありません。これは回転に問題のあるドライバ向けです。
  • disable_program_cache - シェーダープログラムのバイナリをディスクに保存しないようにします。

サンプルファイルは次のようになります:

{
"entries": [
{
  "id": 1,
  "description": "Disable D3D11 on older nVidia drivers",
  "os": {
    "type": "win"
  },
  "vendor_id": "0x10de",
  "device_id": ["0x0DE9"],
  "driver_version": {
    "op": "<=",
    "value": "8.17.12.6973"
  },
  "features": [
    "disable_d3d11"
  ]
},
...

QT_OPENGL_BUGLIST が指定されていない場合、組み込みのリストが使用されます。disable_desktopgl これは、Qt が不安定なデスクトップ OpenGL 実装を使用せず、ソフトウェアベースの代替ライブラリをすぐにロードしようとするのを防ぐためです。

実際には、最も一般的な組み合わせは以下のようになると思われます:

  • disable_desktopgl - システムがOpenGL 2.0以降を提供しているが、ドライバが不安定でクラッシュしやすいことが知られている場合。
  • disable_desktopgldisable_angle - アクセラレーション・パスを使用しない場合。これは、Qtがソフトウェア・ラスタライザー(opengl32sw.dll)のみを試行することを保証します。仮想マシンや、さまざまな古いシステム上にデプロイされるアプリケーションで役に立ちます。

指定したカードやドライバにマッチするためにサポートされているキーは以下の通りです。これらのいくつかは Qt 固有のものであることに注意してください。

  • os.type - オペレーティングシステム: 、win linux macosx android
  • os.version - カーネルバージョン
  • os.release - Windows のオペレーティング・システム・リリースのリストを指定します: , , , , .xp vista 7 8 8.1 10
  • vendor_id - アダプタ識別子からのベンダー
  • device_id - PCI デバイス ID のリスト。
  • driver_version - アダプタ識別子からのドライバ・バージョン
  • driver_description - 値がアダプタ識別子からのドライバ説明の部分文字列の場合にマッチする。
  • gl_vendor - 値が 文字列の部分文字列の場合に一致します。GL_VENDOR

すべてのブラックリストを無効にするには、環境変数QT_NO_OPENGL_BUGLIST を任意の値に設定します。これにより、設定ファイルの読み込みが省略され、ドライバやOSに関係なく、何も無効化されていないとみなされる。

注意: 通常は必要ありませんが、QT_NO_OPENGL_BUGLIST は、複数の、おそらくは仮想の、グラフィックアダプターが存在する、特定の仮想環境では関連する可能性があります。qt.qpa.gl のようなカテゴリのログが、ドライバとディスプレイアダプタの検出が、OpenGLを誤って無効にしていることを示している場合、アプリケーションを正常に実行できるようにするために、この環境変数を設定することが推奨されます。この環境変数は Qt 5.15 で導入されました。

opengl32.dll への直接依存

デフォルトのdynamic OpenGL ビルドに代わる方法として、opengl32.dll に直接依存する方法があります。このモードでは、コマンドラインオプション-opengl desktop を configure スクリプトに渡します。

configure -opengl desktop

注意: EGL と OpenGL ES の使用は Windows ではサポートされていません。Qt 6では、Windows上のOpenGLは常にウィンドウシステムインターフェイスとしてWGLを使用することを意味します。

そのようなQtビルドでは、多くのQt共有ライブラリやQtアプリケーションはopengl32.dllに依存しているため、別のライブラリを使用することはできません。

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