Qt 5 on Windows ANGLE and OpenGL/ja
English | 日本語
Windows 版 Qt 5 の ANGLE と OpenGL
はじめに
Windows 版の Qt 5 では OpenGL ドライバを直接使用するか、ANGLE ライブラリを通じて DirectX ドライバを使用するかを選択できるようになっています。どちらが適切かはユースケースによって異なります。Qt project のバイナリパッケージではその双方を提供しています。
OpenGL
OpenGL(Open Graphics Library) は 2D や 3D CG の描画用に広く普及している業界の「 "標準":http://www.opengl.org/ 」です。Mac OS X や Linux、組み込みプラットフォームのほとんどでハードウェアアクセラレーションを用いてグラフィック描画を行う際のデファクトスタンダードとなっています。
OpenGL ES 2.0 (Open Graphics Library for Embedded Systems) は OpenGL を組み込みシステムで利用するためのサブセットで、いくつかの機能がありません。
Qt 5 の Qt Quick 2 は OpenGL をベースとしており、OpenGL 3.0 (あるいは OpenGL 2.x と framebuffer_object エクステンション) 以上のバージョンか OpenGL ES 2.0 が必要です。 "Qt OpenGL モジュール":http://doc.qt.io/qt-5.0/qtopengl/qtopengl-index.html は OpenGL 1.3 以上を必要とします。
Windows における OpenGL
Microsoft Windows は以前から OpenGL をネイティブでサポートしていますが、(ドライバを一切インストールしていない状態ではバージョン 1 をサポートとなっており) Qt で使用するには非常に限られた状態に置かれています。より新しいバージョンも通常はカスタムグラフィックドライバで提供されていますが、ユーザによるインストールが必要となります。また、いくつかのドライバではその OpenGL サポートの品質がよくありません。
ANGLE プロジェクト
ANGLE (Almost Native Graphics Layer Engine) は Google による "オープンソースプロジェクト":http://code.google.com/p/angleproject/ です。このプロジェクトでは OpenGL ES 2.0 の API を DirectX 9 の API に変換します。Qt 5 では "qtbase の一部":https://qt.gitorious.org/qt/qtbase/trees/stable/src/3rdparty/angle としてその最新バージョンを提供しています。
Qt を ANGLE 用にコンパイルするには "Direct X SDK":http://msdn.microsoft.com/en-us/directx/default.aspx がインストールされてなくてはいけません。 Windows Kit 8 からは Direct X SDK は Windows SDK に同梱されることになりました。
アプリケーションが ANGLE を使用している場合、 Qt のライブラリと共に d3dcompiler_XX.dll を同梱すべきです。D3D Shader Compiler のバージョンは Direct X SDK のヘッダから決まります。そのため、ANGLE がビルドされたときと同じバージョン (ex. _43 や _46) の DLL かどうか注意してください。これは特に Qt を -angle-d3d11 オプションをつけて configure したときに重要です。
推奨
- デスクトップ OpenGL の使用
- OpenGL ES 2.0 には無い OpenGL の API を使用する場合
- OpenGL を一切使用しない場合( ANGLE 版では利用されないライブラリも依存関係の解決のために同梱しなくてはいけなくなるため )
- Windows XP で動かす必要がある場合。このプラットフォームには無いグラフィックドライバの代用として ANGLE を使用したい気持ちに駆られるのはわかりますが、正常に動作せず、クラッシュの原因となったり、たとえばセキュリティダイアログが表示されたりします。
- ANGLE の使用
- OpenGL ES の機能のみで十分で、フルの OpenGL が不要な場合
- さまざまなバージョンの Windows やグラフィックカードで動作させる幅広いユーザ層を持つ場合
- 最新のグラフィックドライバをユーザにインストールさせる必要性を持たせたくない場合
- QtMultimedia のビデオプレイバック機能を使用したい場合( 詳細は "QTBUG-31800":https://bugreports.qt.io/browse/QTBUG-31800 )
参考文献
http://doc.qt.io/qt-5.1/qtdoc/requirements-win.html
http://doc.qt.io/qt-5.1/qtopengl/qtopengl-index.html
http://blog.qt.io/blog/2012/10/24/graphics-on-windows-from-a-different-angle/