【发布时间】:2015-02-26 13:31:46
【问题描述】:
Qt5 可以通过使用 ANGLE 来使用 OpenGL 驱动或 DirectX 驱动。由于我们不能依赖已安装的 OpenGL 驱动程序,我们需要使用 ANGLE 后端。不幸的是,这并不能解决所有部署问题,尤其是在没有硬件加速的 Windows 虚拟机上。在这些系统上,我们收到一条错误消息,指出创建 OpenGL 上下文失败。
Screenshot: Failed to create OpenGL context for format QSurfaceFormat
我们正在部署所有必需的库 (libEGL.dll libGLESv2.dll libeay32.dll msvcp110.dll msvcr110.dll d3dcompiler_46.dll),但我们仍然收到此错误消息。
如何部署需要在没有 OpenGL 驱动程序的最终用户计算机和没有 Direct3D 加速的(虚拟)计算机上运行的 QML 应用程序?
Qt wiki 上有一个页面mentioning this problem,但是对解决它帮助不大。
Qt 5.4.0 更新:
到目前为止我的发现是:
- 设置 QT_ANGLE_PLATFORM=warp -> 创建一个没有内容的窗口。
- 设置 QT_ANGLE_PLATFORM=d3d9 -> 与预期相同的错误对话框。
- 设置 QT_ANGLE_PLATFORM=d3d11 -> 与预期相同的错误对话框。
- 设置 QT_OPENGL=desktop -> 与 QT_ANGLE_PLATFORM=warp 相同。
- 设置 QT_OPENGL=angle -> 与预期相同的错误对话框。
- 设置 QT_OPENGL=software + opengl32sw.dll (mesa for windows) -> 不可预测:可能会运行,可能会崩溃,可能会显示错误对话框。
Qt Quick 2D 渲染器更新
虽然 Mesa 似乎是部分解决方案,但配置似乎在 Qt 5.4.0 中经常崩溃。
另一个后备可能是 Qt Quick 2D 渲染器,但不幸的是它也崩溃了。
- 将 softwarecontext.dll 复制到 /scenegraph + 设置 QMLSCENE_DEVICE=softwarecontext -> 崩溃
一些用户体验后更新:
角度- 在某些系统上存在一些渲染错误
- 并非在所有系统上都可靠运行
- 不可靠
- 默认实现 OpenGL 1.1,太旧了。
- 不可靠,即使 OpenGL 版本没问题。
- 如果被 Qt 使用,则存在渲染错误
- 存在一些主要的渲染问题
- 崩溃、冻结
- 适用于没有硬件加速的系统
- 目前看来还挺靠谱的
- 总体上非常慢,在某些系统上非常慢。
- 重型部署重量
结论:这些系统仍然没有真正的解决方案
Qt 5.5 更新
Anno 2015:损坏的图形驱动器仍然损坏。
我目前的结论是:
- 尽可能使用 QtQuick2dRenderer。
- 否则使用 Mesa 后端。
- 跳过角度,跳过桌面 OpenGL,跳过扭曲。
【问题讨论】:
-
您使用的是什么需要 OpenGL 的 Qt 技术? QtQuick2?
-
是的,我们正在使用 QtQuick2。
-
然后我看到这些选项: 1)使用提供 OpenGL 加速的 VM 软件(VMWare、VBox)。 2) 使用 Mesa/LLVMPipe 作为软件光栅器。 3) 配置 ANGLE 以使用软件 DX 光栅器。 4) 使用 QtQuick2 光栅后端(5.4 中的新功能,可能仅用于商业用途)。
-
贾。在这里不使用硬件加速似乎不是最好的选择。 1)这不在我的控制之下。 2) Mesa 不适用于 ANGLE,这是使用 DX 的唯一选项。 3)正如我对 Kerrys 回答的评论中提到的,这在 Qt 5.4 的运行时似乎是可能的。我会测试一下。 5)感谢提及。我不知道
-
是的,Mesa 提供了一个软件 OpenGL 实现(不像 ANGLE 那样通过 DX 实现 OpenGL/ES)。但同样,在 5.4 中,在 Windows 下,Qt 可以在 OpenGL 和 ANGLE 之间动态切换。因此,您可以拥有如此动态的 Qt 构建,并回退到 Mesa。
标签: windows qt opengl deployment qt5