Класс 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 в зависимости от 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, но также позволяют использовать код legacy 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.2/qabstractopenglfunctions.html