在没有硬件加速的情况下在Windows上部署Qt5

时间:2014-12-30 11:22:32

标签: windows qt opengl deployment qt5

Qt5可以使用ANGL来使用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驱动程序的最终用户计算机上运行的QML应用程序以及没有Direct3D加速的(虚拟)计算机?

Qt wiki mentioning this problem上有一个页面,但这对解决它没有多大帮助。

Qt 5.4.0的更新:

到目前为止,我的发现是:

  • 设置QT_ANGLE_PLATFORM = warp - >创建一个没有内容的窗口。
  • 设置QT_ANGLE_PLATFORM = d3d9 - >同样的错误对话框,如预期的那样。
  • 设置QT_ANGLE_PLATFORM = d3d11 - >同样的错误对话框,如预期的那样。
  • 设置QT_OPENGL =桌面 - >与QT_ANGLE_PLATFORM = warp。
  • 相同
  • 设置QT_OPENGL =角度 - >同样的错误对话框,如预期的那样。
  • 设置QT_OPENGL =软件+ opengl32sw.dll (mesa for windows) - >不可预测:可能会运行,可能会崩溃,可能会显示错误对话框。

Qt Quick 2D渲染器的更新

尽管Mesa似乎是一个部分解决方案,但在Qt 5.4.0中,配置似乎经常崩溃。

另一个后退可能是Qt Quick 2D渲染器,但不幸的是,这也会崩溃。

  • 将softwarecontext.dll复制到/ scenegraph +设置QMLSCENE_DEVICE = softwarecontext - >碰撞

在一些用户体验后更新:

角度
  • 在某些系统上有一些渲染错误
  • 在所有系统上无法正常工作
与翘曲的角度
  • 不可靠
桌面OpenGL
  • 默认实现OpenGL 1.1,这太旧了。
  • 不可靠,即使OpenGL版本还可以。
  • 如果Qt
  • 使用了渲染错误
QtQuick2dRenderer
  • 有一些主要的渲染问题
  • 崩溃,冻结
  • 适用于没有硬件加速的系统
Mesa OpenGL后端
  • 目前似乎非常可靠
  • 一般来说非常慢,在某些系统上非常慢。
  • 重型部署重量

结论:这些系统仍然没有真正的解决方案

Qt 5.5的更新

Anno 2015:破碎的图形驱动器仍然坏了。

我目前的结论是:

  1. 如果可能,请使用QtQuick2dRenderer。
  2. 否则使用Mesa后端。
  3. 跳过角度,跳过桌面OpenGL,跳过Warp。

3 个答案:

答案 0 :(得分:7)

QT 5在某些硬件配置上与opengl存在巨大的兼容性问题 英特尔HD3000驱动程序和Nvidia / ATI卡的组合在Windows 10上无法使用。 https://bugreports.qt.io/browse/QTBUG-42240

英特尔不再支持此卡,但其驱动程序存在导致崩溃的错误。

如果您想支持使用HD3000的客户,则不能依赖硬件opengl。

答案 1 :(得分:4)

在Windows下,opengl32.dll是默认的OpenGL驱动程序。它实现了OpenGL 1.1(真正的旧版本)。 ANGLE有一个OpenGL ES 2.0的基线,需要安装DirectX 9/11来将调用映射到。

因此,如果你的视频卡没有安装OpenGL驱动程序,一个小于2.0的OpenGL驱动程序和/或未安装的DirectX 9/11,你的应用程序将无法运行。

关于虚拟化和3D加速,这些可能值得一读:

此外,如果在VirtualBox下运行多监视器Windows环境,则将禁用3d加速。

答案 2 :(得分:1)

我重新检查了一下,看看这些问题是否已由最新版本的QT 5.12.2修复,但是没有。在引用的QT Wiki条目OP中描述的功能 https://wiki.qt.io/Qt_5_on_Windows_ANGLE_and_OpenGL听起来不错,但实际上却是行不通的。

我得出结论,以任何形式避免在QT上使用OpenGL。太不可靠了。