Windows 向け Qt - グラフィックスアクセラレーション
動作させるには Qt Quick 動作させるには、Direct 3D 11、Direct3D 12、Vulkan 1.0、または OpenGL 2.1 以降をサポートするグラフィックスドライバが必要です。 Qt 6 以降、Windows における `Qt Quick ` のデフォルトは Direct3D 11 です。これは Qt 5 とは異なります。Qt 5 では、直接、あるいは OpenGL から Direct3D への変換ツールである ANGLE を通じて、OpenGL がデフォルトとなっていました。Qt 6 では、ANGLE は 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 に設定するか、main() 内の同等のC++ API を使用してください。これらの3D APIの一部では、適切なドライバのインストールが必要になる場合があることに注意してください。
Qtのデフォルトではありませんが Qt Quickのデフォルトではありませんが、OpenGLは依然として多くのQtアプリケーションで一般的に使用されています。例えば、QOpenGLWindow やQOpenGLWidget を基盤とするQWidget ベースのアプリケーションなどです。以下のセクションでは、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_UseOpenGLESQt 6 では効果はありません。Qt::AA_UseSoftwareOpenGLQT_OPENGLを に設定した場合と同等です。software
特定の構成が明示的に要求された場合、アプリケーションの起動時にはチェックが行われません。つまり、システムが提供する opengl32.dll は検証されません。
動的ロードは、ネイティブの OpenGL 呼び出しを含むアプリケーションに大きな影響を与えます。opengl32.lib がリンカーに自動的に指定されないため、リンクに失敗する可能性があります。 その代わりに、アプリケーションはQOpenGLFunctions クラスを介して OpenGL 関数を使用することが想定されています。これにより、OpenGL ライブラリへの直接的な依存関係が排除され、すべての呼び出しは実行時に Qt が選択した実装にルーティングされます。 あるいは、.pro プロジェクトファイルに opengl32.lib を追加すれば、アプリケーションから OpenGL 関数を直接呼び出すことも可能です:LIBS += opengl32.lib(Visual Studio) またはLIBS += -lopengl32(Mingw-w64)。 その結果、アプリケーションの観点からは、Qtの-opengl desktop ビルド構成と同等になります。
Qt::AA_UseSoftwareOpenGL は、非標準の名前を持つ OpenGL 実装をロードしようとするという点で特殊です。デフォルト名はopengl32sw.dll です。これにより、llvmpipe を使用した Mesa のビルドなど、ソフトウェアのみの OpenGL 実装をこの名前で提供することが可能になります。必要に応じて、QT_OPENGL_DLL 環境変数を設定することでファイル名を上書きできます。
グラフィックカードやドライバのバージョンに応じて、どの OpenGL 実装を使用するかを指定する JSON 形式の設定ファイルを用意することができます。その場所は、環境変数 `QT_OPENGL_BUGLIST` で指定されます。相対パスは、`QLibraryInfo::SettingsPath ` または `QStandardPaths::ConfigLocation` を使用して解決されます。このファイルは、Chromium プロジェクトで使用されているドライバのバグリストの形式を採用しています。 このファイルは、各エントリが条件のセットと機能キーワードのリストを指定するエントリのリストで構成されています。通常、特定のグラフィックカードに一致させるために、デバイス 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、androidos.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 に直接依存させる方法があります。このモードにするには、configure スクリプトにコマンドラインオプション-opengl desktop を指定してください。
configure -opengl desktop注: Windows では EGL および OpenGL ESの使用は サポートされていません。Qt 6 では、Windows 上の OpenGL を使用する場合、ウィンドウシステムインターフェースとして常に WGL が使用されます。
このような Qt ビルドでは、多くの Qt 共有ライブラリや Qt アプリケーションが opengl32.dll に依存することになるため、代替ライブラリの使用は不可能です。
© 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.