Изменения в Qt OpenGL
Qt 6 — результат осознанных усилий по повышению эффективности и удобства использования фреймворка.
Мы стараемся сохранять бинарную и исходную совместимость всех публичных API в каждом релизе. Но некоторые изменения были неизбежны, чтобы сделать Qt лучшим фреймворком.
В этом разделе мы подводим итоги этих изменений в Qt OpenGL и предоставляем рекомендации по их обработке.
Удаленные устаревшие классы
Модуль Qt OpenGL был устаревшим на протяжении всего жизненного цикла Qt 5, и содержащиеся в нём классы были удалены в Qt 6.
Это относится конкретно к классам, префикс которых QGL.
Перемещённые классы QOpenGL
В Qt 5 в Qt Gui был добавлен набор заменяющих классов поддержки OpenGL. Это было необходимо для поддержки OpenGL как кроссплатформенного графического API, который служил основой для графики в Qt.
В Qt 6 эти классы были перенесены в модуль Qt OpenGL. Они по-прежнему могут использоваться и полностью поддерживаются приложениями, напрямую зависящими от OpenGL. Однако они больше не считаются основополагающими, поскольку Qt был расширен для поддержки других графических API в своей основе, таких как Direct3D, Metal и Vulkan.
Существующий код приложения в значительной степени продолжит работать, но теперь должен включать Qt OpenGL в файлы проекта, а также включать заголовки, если они ранее включались косвенно через Qt Gui.
Примечание: Заметным исключением является QOpenGLContext, который по-прежнему находится в Qt Gui.
Класс QOpenGLWidgets
Ещё одним исключением является класс QOpenGLWidget. Он был перемещён в новый модуль с именем Qt OpenGL Widgets и должен включаться оттуда.
Выбор графического бэкенда OpenGL для RHI
В дополнение к корректировке файлов проекта и включению заголовков, приложение также должно вручную установить графический бэкенд OpenGL, чтобы использовать эту функциональность при работе с Qt Quick. По умолчанию Qt будет использовать наиболее подходящий графический API на целевой платформе. Дополнительные сведения см. в документации по рендерингу RHI .
Удаление ANGLE
В Windows ANGLE, сторонний переводчик OpenGL ES в Direct 3D, больше не входит в Qt 6. Это означает, что Qt::AA_UseOpenGLES и переменная окружения QT_OPENGL=angle больше не имеют никакого эффекта. В динамических сборках OpenGL автоматический возврат к ANGLE в случае неудачной инициализации OpenGL не предусмотрен. Для приложений, основанных на QWindow или QWidget и использующих OpenGL напрямую, например, через QOpenGLWidget, это означает, что OpenGL — единственный вариант во время выполнения. Однако использование чисто программной реализации OpenGL, такой как Mesa llvmpipe, поставляемая с предварительно скомпилированными пакетами Qt, по-прежнему доступно.
Для приложений Qt Quick и Qt Quick 3D Qt 6 добавляет поддержку Direct 3D 11, Vulkan и Metal, помимо OpenGL. В Windows Qt 6 по умолчанию использует Direct 3D, поэтому эффект удаления ANGLE уменьшается за счёт добавления поддержки других графических API.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-6.1/opengl-changes-qt6.html