Изменения в Qt OpenGL
Qt 6 — результат осознанных усилий по повышению эффективности и удобства использования фреймворка.
Мы стараемся поддерживать бинарную и исходную совместимость всех публичных API в каждом релизе. Но некоторые изменения были неизбежны для того, чтобы сделать Qt лучшим фреймворком.
В этой теме мы обобщаем эти изменения в Qt OpenGL и предоставляем рекомендации по их обработке.
Удаленные устаревшие классы
Модуль Qt OpenGL был устаревшим на протяжении всего жизненного цикла Qt 5, а содержащиеся в нём классы были удалены в Qt 6.
Это относится конкретно к классам, префикс которых QGL.
Перемещенные классы QOpenGL
В Qt 5 для поддержки OpenGL как кроссплатформенного графического API, являющегося основой графики в Qt, была добавлена замена набора классов поддержки OpenGL в Qt Gui.
В 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.2/opengl-changes-qt6.html