QOpenGL ラッパーの使用を開始して、OpenGL API の全機能を使用できないことに気付きたくありません。
Qt 5.0 の OpenGL ラッパーは、基本的にデスクトップ OpenGL 3.0 仕様の骨抜きバージョンである OpenGL ES (Embedded Systems) 2.0 仕様の上に構築されています。Qt は、モバイル プラットフォームで広くサポートされているだけでなく、最新のほぼすべての PC でサポートされているため、移植性を容易にするためにこの仕様を選択しました。Qt ラッパーを使用する場合は、OpenGL ES 2.0 仕様の欠点を回避する必要があります。ほとんどの場合、次のカテゴリに分類されます。
- 固定機能のパイプライン機能はありません。(変換スタックなし
glBegin
, , glEnd
,glLightf
など..)
- 高度な OpenGL 3+ 機能はサポートされていないか、拡張機能のみがサポートされています。(テクスチャ バッファ オブジェクト、コンピューティング シェーダ、アトミック ロードストア テクスチャ、テッセレーション シェーダ、ユニフォーム バッファ オブジェクトなど)
- 特定のテクスチャ フォーマットの欠如 (整数テクスチャ、画像テクスチャなど)
- GLSL 構文とセマンティクスの小さな違い。(レイアウト修飾子の欠如、データ精度要件
highp
、lowp
宣言など)
- いくつかの便利なメソッドの欠如。(
glBlitFramebuffer
、glMultiDrawArrays
、glDrawRangeElements
など)
OpenGL ES 2.0 仕様の完全な説明については、こちらを参照してください。
ただし、この機能の欠如は、Qt ラッパーが必要なことを達成できないという意味ではありません。OpenGL ES 2.0 には多くの有用な機能が欠けていますが、完全なデスクトップ OpenGL 仕様で許可されていることの 99% を達成することができます。カスタム ラッパーを介してデスクトップ OpenGL 仕様を利用する場合でも、Qt はQGLFormat
クラスを使用してデスクトップ OpenGL コンテキストの作成とウィンドウ処理を管理できます。
デスクトップ OpenGL ラッパーを使用することに決め、これらを Qt アプリケーション内で利用する場合、Qt が提供する一部のクラスがカスタム ラッパーの動作を妨げる可能性があることに注意してください。たとえば、QGLWidget での QPainter 操作は、OpenGL ES 仕様の機能を利用する場合があり、ラッパー オブジェクトの操作に干渉する場合があります。
個人的には、カスタム OpenGL ラッパーを使用することを好みます。機能セットがより適切に定義され、問題に取り組むためのより多くのオプションが提供されるため、デスクトップ OpenGL 仕様を非常に好むからです。一方、Qt 5 は、OpenGL ES を使用して迅速で強力な動的ユーザー インターフェイスを作成するための非常に優れたアーキテクチャを提供します。(QtQuick 2 および QML による)
どの API がニーズに最も適しているかは、基本的に、組み込みプラットフォームまたはモバイル プラットフォームを対象としているかどうか (この場合、OpenGL ES を使用する必要があります)、およびカスタム OpenGL 3+ ラッパーの記述と維持のために追加の開発時間を犠牲にするかどうかによって決まります。 .