このページでは

QAbstractOpenGLFunctions Class

QAbstractOpenGLFunctions クラスは、各 OpenGL バージョンおよびプロファイルに対応するすべての関数を公開する一連のクラスの基底クラスです。詳細...

パブリック関数

QAbstractOpenGLFunctions(const QAbstractOpenGLFunctions &)
virtual ~QAbstractOpenGLFunctions()
QAbstractOpenGLFunctions &operator=(const QAbstractOpenGLFunctions &)

Protected 関数

詳細な説明

異なるプラットフォーム上の OpenGL 実装は、そのプラットフォームの OpenGL ABI に応じて、可変数の OpenGL 関数にリンクすることができます。たとえば、Microsoft Windows では、ビルド時に OpenGL 1.1 までの関数にしかリンクできません。それ以外のすべての関数は、実行時に解決する必要があります。 これに対する従来の解決策は、QOpenGLContext::getProcAddress() またはQOpenGLFunctions を使用することでした。前者は手間がかかり、エラーが発生しやすく、関数ポインタを直接扱う必要があります。後者は、OpenGL ES 2 とデスクトップ版 OpenGL に共通する関数のみを公開します。しかし、実際の OpenGL アプリケーションを作成する際に役立つ新しい OpenGL 機能は数多く存在します。

Qtでは現在、`QAbstractOpenGLFunctions`を継承する一連のクラスを提供しており、これらは対応するメンバ関数を通じてOpenGLのすべてのコア関数を公開しています。OpenGLのバージョンとプロファイルのすべての有効な組み合わせに対して、それぞれ対応するクラスが用意されています。各クラスは以下の命名規則に従っています:

QOpenGLFunctions_<MAJOR VERSION>_<MINOR VERSION>[_PROFILE]

OpenGL バージョン 1.0 から 3.0 まではプロファイルが存在しないため、以下のクラスが用意されています:

各クラスは QAbstractOpenGLFunctions を継承しています。

OpenGL バージョン 3.1 では、多くの非推奨関数が削除され、API はよりシンプルで汎用的なものになりました。

OpenGL 3.2では、プロファイルという概念が導入されました。現在、OpenGLには「Core」と「Compatibility」の2つのプロファイルが定義されています。

Coreプロファイルには、OpenGL 3.1で削除された関数は一切含まれていません。 Compatibilityプロファイルには、同バージョンのCoreプロファイルに含まれるすべての関数に加え、OpenGL 3.1で削除されたすべての関数が含まれています。このように、Compatibilityプロファイルのクラスを使用することで、新しいOpenGL機能を利用できるだけでなく、従来のOpenGLコードを引き続き使用することも可能です。新しいOpenGLコードを作成する場合は、Coreプロファイルの使用を推奨します。

なお、Appleをはじめとする一部のベンダーは、互換性プロファイルを実装していない点にご注意ください。したがって、macOS上で新しいOpenGL機能をターゲットにする場合は、QSurfaceFormat::setProfile() を通じてコアプロファイルのコンテキストを要求するようにしてください。

Qtは、すべてのバージョンおよびQt CoreプロファイルとCompatibilityプロファイルの組み合わせに対応するクラスを提供しています。OpenGLバージョン3.1から4.3までのクラスは以下の通りです:

各クラスは QAbstractOpenGLFunctions を継承しています。

使用中の OpenGL のバージョンおよびプロファイルに対応するクラスのオブジェクトへのポインタは、QOpenGLVersionFunctionsFactory::get() から取得できます。この方法で取得した場合、QOpenGLContext がオブジェクトの所有権を保持し続けることに注意してください。これは、インスタンスをキャッシュして共有できるようにするためです。

公開されている OpenGL 関数を呼び出す前に、オブジェクトが OpenGL 関数への関数ポインタを解決済みであることを確認する必要があります。これは、initializeOpenGLFunctions() を使用して、インスタンスごとに 1 回だけ実行すれば十分です。初期化が完了すると、そのオブジェクトを使用して、対応するバージョンおよびプロファイルの任意の OpenGL 関数を呼び出すことができます。 initializeOpenGLFunctions() は状況によっては失敗する場合があるため、戻り値を確認してください。初期化が失敗する状況としては、関数ポインタの解決に使用されているコンテキストに含まれていない関数を含むバージョンやプロファイルの関数オブジェクトがある場合などが挙げられます。

関数オブジェクトのみを使用している場合、そのバージョンやプロファイルに含まれていない関数を使用しようとすると、コンパイル時にエラーが発生します。これは、実行時の未定義挙動に比べ、明らかにデバッグが容易です。

QOpenGLVersionFunctionsFactory::get()も参照してください 。

メンバ関数のドキュメント

[protected] QAbstractOpenGLFunctions::QAbstractOpenGLFunctions()

QAbstractOpenGLFunctions オブジェクトを作成します。

[delete] QAbstractOpenGLFunctions::QAbstractOpenGLFunctions(const QAbstractOpenGLFunctions &)

QAbstractOpenGLFunctions のインスタンスをコピーして生成します。この関数は削除されています。

[virtual noexcept] QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions()

QAbstractOpenGLFunctions オブジェクトを破棄します。

[delete] QAbstractOpenGLFunctions &QAbstractOpenGLFunctions::operator=(const QAbstractOpenGLFunctions &)

other をこのQAbstractOpenGLFunctions インスタンスにコピー代入します。この関数は削除されます。

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