QAbstractOpenGLFunctions Class
QAbstractOpenGLFunctionsクラスは、各OpenGLバージョンとプロファイルのすべての関数を公開するクラスファミリーの基本クラスです。詳細...
Header: | #include <QAbstractOpenGLFunctions> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake: | QT += opengl |
Inherited By: | 27 typesQOpenGLFunctions_1_0, QOpenGLFunctions_1_1, QOpenGLFunctions_1_2, QOpenGLFunctions_1_3, QOpenGLFunctions_1_4, QOpenGLFunctions_1_5, QOpenGLFunctions_2_0, QOpenGLFunctions_2_1, QOpenGLFunctions_3_0, QOpenGLFunctions_3_1, QOpenGLFunctions_3_2_Compatibility, QOpenGLFunctions_3_2_Core, QOpenGLFunctions_3_3_Compatibility, QOpenGLFunctions_3_3_Core, QOpenGLFunctions_4_0_Compatibility, QOpenGLFunctions_4_0_Core, QOpenGLFunctions_4_1_Compatibility, QOpenGLFunctions_4_1_Core, QOpenGLFunctions_4_2_Compatibility, QOpenGLFunctions_4_2_Core, QOpenGLFunctions_4_3_Compatibility, QOpenGLFunctions_4_3_Core, QOpenGLFunctions_4_4_Compatibility, QOpenGLFunctions_4_4_Core, QOpenGLFunctions_4_5_Compatibility, QOpenGLFunctions_4_5_Core, and QOpenGLFunctions_ES2 |
パブリック関数
virtual | ~QAbstractOpenGLFunctions() |
保護された関数
詳細説明
異なるプラットフォーム上の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まではプロファイルがなく、クラスが存在します:
- QOpenGLFunctions_1_0
- QOpenGLFunctions_1_1
- QOpenGLFunctions_1_2
- QOpenGLFunctions_1_3
- QOpenGLFunctions_1_4
- QOpenGLFunctions_1_5
- QOpenGLFunctions_2_0
- QOpenGLFunctions_2_1
- QOpenGLFunctions_3_0
各クラスはQAbstractOpenGLFunctionsを継承しています。
OpenGLバージョン3.1では、多くの非推奨関数が削除され、よりシンプルで汎用的なAPIになりました。
OpenGL 3.2では、プロファイルの概念が導入されました。現在、OpenGLにはCoreとCompatibilityの2つのプロファイルが定義されています。
Coreプロファイルには、OpenGL 3.1で削除された関数は含まれていません。Compatibilityプロファイルには、同じバージョンのCoreプロファイルのすべての関数に加え、OpenGL 3.1で削除されたすべての関数が含まれています。このようにして、互換性プロファイル・クラスは、より新しいOpenGL機能を使用することを可能にしますが、同時に、レガシーなOpenGLコードを使い続けることも可能にします。新しいOpenGLコードには、Coreプロファイルを優先すべきです。
一部のベンダー、特にAppleは互換性プロファイルを実装していないことに注意してください。そのため、macOSでOpenGLの新機能を使いたい場合は、QSurfaceFormat::setProfile()を使ってCoreプロファイルのコンテキストをリクエストしてください。
Qtは、すべてのバージョン、CoreとCompatibilityプロファイルの組み合わせに対応するクラスを提供しています。OpenGLのバージョン3.1から4.3までのクラスは以下の通りです:
- QOpenGLFunctions_3_1
- QOpenGLFunctions_3_2_Core
- QOpenGLFunctions_3_2_Compatibility
- QOpenGLFunctions_3_3_Core
- QOpenGLFunctions_3_3_Compatibility
- QOpenGLFunctions_4_0_Core
- QOpenGLFunctions_4_0_Compatibility
- QOpenGLFunctions_4_1_Core
- QOpenGLFunctions_4_1_Compatibility
- QOpenGLFunctions_4_2_Core
- QOpenGLFunctions_4_2_Compatibility
- QOpenGLFunctions_4_3_Core
- QOpenGLFunctions_4_3_Compatibility
各クラスは QAbstractOpenGLFunctions を継承しています。
使用中のOpenGLのバージョンとプロファイルに対応するクラスのオブジェクトへのポインタは、QOpenGLVersionFunctionsFactory::get ()から取得できます。この方法で取得した場合、QOpenGLContext がオブジェクトの所有権を保持することに注意してください。これは、インスタンスをキャッシュして共有できるようにするためです。
公開されているOpenGL関数を呼び出す前に、オブジェクトがOpenGL関数への関数ポインタを解決していることを確認する必要があります。これは、initializeOpenGLFunctions()でインスタンスごとに1回だけ行う必要があります。いったん初期化されると、オブジェクトは対応するバージョンとプロファイルの任意のOpenGL関数を呼び出すのに使用できます。initializeOpenGLFunctions()は状況によっては失敗することがあるので、戻り値をチェックしてください。初期化に失敗する可能性がある状況は、関数ポインタを解決するために使用されているコンテキストの一部ではない関数を含むバージョンやプロファイルの関数オブジェクトを持っている場合です。
関数オブジェクトだけを使用する場合、そのバージョンやプロファイルに含まれていない関数を使用しようとすると、コンパイル時にエラーが発生します。これは明らかに、実行時の未定義の動作よりもデバッグしやすくなります。
QOpenGLVersionFunctionsFactory::get()も参照してください 。
メンバ関数のドキュメント
[protected]
QAbstractOpenGLFunctions::QAbstractOpenGLFunctions()
QAbstractOpenGLFunctions オブジェクトを構築します。
[virtual noexcept]
QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions()
QAbstractOpenGLFunctions オブジェクトを破棄します。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。