Изменения в 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.0/opengl-changes-qt6.html