Класс QAbstractOpenGLFunctions
Класс QAbstractOpenGLFunctions — базовый класс семейства классов, которые экспонируют все функции для каждой версии и профиля OpenGL. Подробнее...
Открытые функции
| виртуальный | ~QAbstractOpenGLFunctions() |
Защищенные функции
| QAbstractOpenGLFunctions() |
Защищенные переменные
| QAbstractOpenGLFunctionsPrivate * | d_ptr |
Подробное описание
Класс QAbstractOpenGLFunctions — базовый класс семейства классов, которые экспонируют все функции для каждой версии и профиля OpenGL.
Реализации 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.
Профиль Core не включает какие-либо функции, которые были удалены в OpenGL 3.1. Профиль Compatibility содержит все функции в профиле Core той же версии плюс все функции, которые были удалены в OpenGL 3.1. Таким образом, классы профиля Compatibility позволяют использовать более новые функции OpenGL, но также позволяют использовать код OpenGL предыдущих версий.
Обратите внимание, что некоторые поставщики, в частности 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, можно получить из QOpenGLContext::versionFunctions(). Если он получен таким образом, обратите внимание, что QOpenGLContext удерживает владение объектом. Это делается для того, чтобы создавать только один экземпляр.
Перед вызовом любой из экспонированных функций OpenGL необходимо убедиться, что объект разрешил указатели на функции OpenGL. Это необходимо сделать только один раз на экземпляр с помощью initializeOpenGLFunctions(). После инициализации объект можно использовать для вызова любой функции OpenGL для соответствующей версии и профиля. Обратите внимание, что initializeOpenGLFunctions() может завершиться неудачей в некоторых случаях, поэтому проверьте возвращаемое значение. Ситуации, в которых инициализация может завершиться неудачей, — это если у вас есть объект функций для версии или профиля, который содержит функции, которые не являются частью используемого контекста для разрешения указателей на функции.
Если вы исключительно используете объекты функций, то получите ошибки компиляции, если попытаетесь использовать функцию, не включенную в эту версию и профиль. Это, очевидно, намного проще отладить, чем неопределенное поведение во время выполнения.
См. также QOpenGLContext::versionFunctions().
Документация функций-членов
[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-5.12/qabstractopenglfunctions.html