Класс QAbstractOpenGLFunctions
Класс QAbstractOpenGLFunctions является базовым классом семейства классов, которые экспонируют все функции для каждой версии и профиля OpenGL. Подробнее...
Этот класс был представлен в Qt 5.1.
Открытые функции
| виртуальный | ~QAbstractOpenGLFunctions() |
Защищенные функции
| 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.
Профиль 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, можно получить из 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.15/qabstractopenglfunctions.html