Spec-Zone.ru › Qt 5.13

Класс 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.

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

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

виртуальный ~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, может быть получен из 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.13/qabstractopenglfunctions.html

Spec-Zone.ru

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