【问题标题】:Deploying Qt5 on Windows without Hardware Acceleration在没有硬件加速的情况下在 Windows 上部署 Qt5
【发布时间】: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
  • 默认实现 OpenGL 1.1,太旧了。
  • 不可靠,即使 OpenGL 版本没问题。
  • 如果被 Qt 使用,则存在渲染错误
QtQuick2dRenderer
  • 存在一些主要的渲染问题
  • 崩溃、冻结
  • 适用于没有硬件加速的系统
Mesa OpenGL 后端
  • 目前看来还挺靠谱的
  • 总体上非常慢,在某些系统上非常慢。
  • 重型部署重量

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

Qt 5.5 更新

Anno 2015:损坏的图形驱动器仍然损坏。

我目前的结论是:

  1. 尽可能使用 QtQuick2dRenderer。
  2. 否则使用 Mesa 后端。
  3. 跳过角度,跳过桌面 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


【解决方案1】:

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

英特尔放弃了对该卡的支持,但他们的驱动程序存在导致崩溃的错误。

如果你想用 HD3000 支持客户,你不能依赖硬件 opengl。

【讨论】:

    【解决方案2】:

    在 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 加速将被禁用。

    【讨论】:

    • 使用This commit 可能会使用WARP(软件光栅化器)而不是硬件。只要我有一个工作的 Qt 5.4,我就会测试它。
    【解决方案3】:

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

    我的结论是避免以任何形式在 QT 上使用 OpenGL。太不靠谱了。

    【讨论】:

      猜你喜欢
      • 2018-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多