【发布时间】:2022-10-24 18:23:09
【问题描述】:
Qt 6 has removed the support 用于 ANGLE 用于他们的 OpenGL 后端。现在我仍然想在 Qt 中使用 ANGLE,因为我想在 Windows 上运行由 ANGLE 转换为 Vulkan Linux 和 Direct3D 的自定义 OpenGL 代码。我尝试在我的 Qt 6 应用程序中使用 ANGLE,但没有成功。我尝试过的是:
根据说明(ANGLE build instructions).
将生成的 libGLESv2.so 和 libEGL.so 文件复制到应用程序目录中。然后在我的 CMakeFiles.txt 我添加了:
find_library(libGLESv2 GLESv2)
find_library(libEGL EGL)
target_link_libraries(MyApp PRIVATE ${libGLESv2} ${libEGL})
然后在我的主文件中我添加了
QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
QQuickWindow::setGraphicsApi(QSGRendererInterface::OpenGL);
我的项目链接并构建良好,但 ANGLE 后端似乎没有效果。看来 Qt 仍在使用标准的 OpenGL 实现,而不是 ANGLE 提供的实现(运行 QOpenGLContext::currentContext()->hasExtension("EGL_ANGLE_platform_angle") 在我设置上下文时返回 false)。
使用 QT_LOGGING_RULES=qt.qpa.gl=true,日志显示:
qt.qpa.gl:根据以下优先级选择 xcb gl-integration ("xcb_glx", "xcb_egl") qt.qpa.gl: Xcb GLX gl-integration 创建 qt.qpa.gl: Xcb GLX gl-integration 成功初始化 qt.qpa.gl: FBConfig/Visual 选择前请求的格式: QSurfaceFormat(版本 3.0,选项 QFlagsQSurfaceFormat::FormatOption(), depthBufferSize 24, redBufferSize 8,greenBufferSize 8,blueBufferSize 8,alphaBufferSize -1, stencilBufferSize 8, 样本 -1, swapBehavior QSurfaceFormat::DoubleBuffer, swapInterval 1, colorSpace QSurfaceFormat::DefaultColorSpace,配置文件 QSurfaceFormat::NoProfile)
如何正确设置 Qt 以依赖 ANGLE?
【问题讨论】:
-
请发布一个指向在 Linux 下显示此问题的可构建项目的链接,最好是 Ubuntu 20.04 或 Debian 11。它与 Qt 6 无关,但您可能想查看 WaylandGUI CMakeLists.txt。 github.com/RolandHughes/waylandgui 在尝试强制 GLES 链接时,我遇到了类似的问题。启动 X11 的太多东西都在寻找他们能找到的最古老的 X11 支持。另请检查:doc.qt.io/qt-6/embedded-linux.html
-
@user3450148 可以使用 Qt 中的任何 opengl 应用程序重现该行为(您可以在链接角度库后尝试此示例 pastebin.pl/view/94d5fee4,正如我在使用 CMake 的问题中建议的那样)。