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_RENDERER
を1
に設定します。場合によっては、Qt Quick が自動的にこのようなフォールバックを行い、追加設定なしで Qt アプリケーションを実行できるようにします。これは、ドライバが十分なレベルの D3D11 機能を提供していない場合に発生し、適切な GPU アクセラレーションとパススルーが実装されていない仮想マシンでよく起こります。使用されているグラフィックデバイスが不明な場合や、トラブルシューティング、Qt に問題を報告する場合は、環境変数QSG_INFO=1
を設定してアプリケーションを実行し、デバッグ出力を確認してください。qtdiag
ツールを実行すると、利用可能な 3D API をすべて列挙するので、有益な情報を得ることもできます。
Vulkan、OpenGL、または Direct 3D 12 の使用を要求するには、環境変数QSG_RHI_BACKEND
をvulkan
またはopengl
またはd3d12
に設定するか、同等のC++ API をmain()
で使用します。これらの3D APIの中には、適切なドライバをインストールする必要があ るものもあることに注意してください。
のデフォルトではありません。 Qt Quick例えば、QOpenGLWindow やQOpenGLWidget をベースにした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.dll
llvmpipeを使った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_desktopgl
disable_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.