Qt OpenGL 更改

Qt 6 是经过深思熟虑的,旨在使框架更高效、更易于使用的结果。

我们试图在每次发布中都保持所有公共 API 的二进制和源代码兼容性。但是,为了使 Qt 成为更好的框架,一些更改是不可避免的。

在本主题中,我们总结了这些更改在 Qt OpenGL 中的内容,并提供了处理这些更改的指南。

已废弃的类已被移除

在 Qt 5 的整个生命周期中,Qt OpenGL 模块已被废弃,并且它包含的类已从 Qt 6 中移除。

这特别指的是以 QGL 为前缀的类。

QOpenGL 类已迁移

在 Qt 5 中,添加了一套具有 OpenGL 支持的类到 Qt Gui 中。这是为了支持 OpenGL 作为跨平台的图形 API,它为 Qt 图形提供了基础。

在 Qt 6 中,这些类已被迁移到 Qt OpenGL 模块。对于直接依赖于 OpenGL 的应用程序,它们仍然可用并得到全面支持。但是,由于 Qt 已扩展到在基础级别支持其他图形 API,如 Direct3D、Metal 和 Vulkan,因此它们不再被视为基础。

现有应用程序代码将继续 largely 工作,但现在应将 Qt OpenGL 包含在项目文件中,如果有必要,还应包含头文件,因为它们之前可能是通过 Qt Gui 间接包含的。

注意:QOpenGLContext 是一个值得注意的例外,它仍然位于 Qt Gui 中。

QOpenGLWidgets 类

另一个例外是 QOpenGLWidget 类。它已被移动到一个名为 Qt OpenGL Widgets 的新模块中,并且应该从那里包含它。

为 RHI 选择 OpenGL 后端

除了调整项目文件和包含头文件之外,应用程序还应手动将渲染后端设置为 OpenGL,以便在处理 Qt Quick 时使用此功能。默认情况下,Qt 将根据目标平台使用最合适的图形 API。有关更多详细信息,请参阅 RHI 渲染文档

移除 ANGLE

在Windows上,ANGLE,一个第三方OpenGL ES到Direct 3D的转换器,不再包含在Qt 6中。这意味着Qt::AA_UseOpenGLES和环境变量QT_OPENGL=angle不再有任何作用。在动态OpenGL构建中,如果OpenGL无法初始化,则不会自动回退到ANGLE。对于直接使用OpenGL的基于QWindowQWidget的应用程序,例如通过QOpenGLWidget,这意味着OpenGL是运行时唯一的选项。但是,使用纯软件OpenGL实现,如与预构建Qt包一起提供的Mesa llvmpipe,仍然是可用的。

对于Qt Quick和Qt Quick 3D应用程序,Qt 6除了OpenGL外,还引入了对Direct 3D 11、Vulkan和Metal的支持。在Windows上,Qt 6默认使用Direct 3D,因此通过添加对其他图形API的支持来减少ANGLE删除的影响。

© 2024 The Qt Company Ltd。本文档中的贡献是各自的版权所有者的版权。本提供的文档根据自由软件基金会发布的GNU自由文档许可证版本1.3的条款获得许可。Qt及其相关标志是The Qt Company Ltd在芬兰以及全球其他国家的商标。所有其他商标均属于其各自的所有者。