Spec-Zone.ru › Qt 5.14

Класс QAbstractOpenGLFunctions

Класс QAbstractOpenGLFunctions является базовым классом семейства классов, которые экспонируют все функции для каждой версии и профиля OpenGL. Подробнее...

Заголовок: #include <QAbstractOpenGLFunctions>
qmake: QT += gui
С момента: 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

Этот класс был представлен в Qt 5.1.

  • Список всех членов, включая унаследованные члены

Открытые функции

virtual ~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.14/qabstractopenglfunctions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API