QAbstractOpenGLFunctions Class
QAbstractOpenGLFunctionsクラスは、各OpenGLバージョンとプロファイルのすべての関数を公開するクラスファミリーの基本クラスです。詳細...
ヘッダー | #include <QAbstractOpenGLFunctions> |
CMake: | find_package(Qt6 REQUIRED COMPONENTS OpenGL) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
qmake: | QT += opengl |
によって継承される: | 27 タイプ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,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, andQOpenGLFunctions_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 オブジェクトを破壊する。
© 2025 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.