Класс QAbstractOpenGLFunctions
Класс QAbstractOpenGLFunctions является базовым классом семейства классов, которые экспонируют все функции для каждой версии и профиля OpenGL. Подробнее...
| Заголовок: | #include <QAbstractOpenGLFunctions> |
| CMake: | find_package(Qt6 COMPONENTS OpenGL REQUIRED) target_link_libraries(mytarget PRIVATE Qt6::OpenGL) |
| qmake: | QT += opengl |
| С момента: | Qt 5.1 |
| Наследуется от: | 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, и QOpenGLFunctions_ES2 |
Открытые функции
| виртуальный | ~QAbstractOpenGLFunctions() |
Защищенные функции
| QAbstractOpenGLFunctions() |
Подробное описание
Реализации OpenGL на различных платформах могут связываться с переменным количеством функций OpenGL в зависимости от OpenGL ABI на данной платформе. Например, в 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.
Профиль Core не включает ни одной из функций, которые были удалены в OpenGL 3.1. Профиль Compatibility содержит все функции в профиле Core той же версии, плюс все функции, которые были удалены в OpenGL 3.1. Таким образом, классы профиля Compatibility позволяют использовать новые возможности OpenGL, но также позволяют использовать ваш устаревший код OpenGL. Для нового кода OpenGL предпочтительнее использовать профиль Core.
Обратите внимание, что некоторые поставщики, в частности Apple, не реализуют профиль Compatibility. Поэтому, если вы хотите нацелиться на новые функции OpenGL на macOS, вы должны убедиться, что запрашиваете контекст профиля Core с помощью QSurfaceFormat::setProfile().
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(). После инициализации объект может использоваться для вызова любой функции OpenGL для соответствующей версии и профиля. Обратите внимание, что initializeOpenGLFunctions() может завершиться неудачей в некоторых случаях, поэтому проверьте возвращаемое значение. Ситуации, в которых инициализация может завершиться неудачей, включают в себя функции объектов для версии или профиля, которые содержат функции, не являющиеся частью используемого для разрешения указателей на функции контекста.
Если вы используете объекты функций исключительно, вы получите ошибки времени компиляции, если попытаетесь использовать функцию, не включенную в эту версию и профиль. Это, очевидно, намного проще отладить, чем неопределенное поведение во время выполнения.
См. также QOpenGLVersionFunctionsFactory::get().
Документация по функциям-членам
[protected] QAbstractOpenGLFunctions::QAbstractOpenGLFunctions()
Конструктор объекта QAbstractOpenGLFunctions.
[virtual] QAbstractOpenGLFunctions::~QAbstractOpenGLFunctions()
Деструктор объекта QAbstractOpenGLFunctions.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/qabstractopenglfunctions.html