当运行QML应用程序时,Qt 5.6中被列入黑名单的显卡会发生什么?

3
1个回答

3
他们不能使用OpenGL来加速Qt Quick,这是一个相当严重的缺陷。不幸的是,在Windows上的OpenGL状态很糟糕。"普通"的Windows电脑将配备一个带有古老驱动程序的基于Intel的GPU,这些驱动程序错误足以导致Qt根本不尝试使用任何3D(OpenGL或Direct3D)。 NVIDIA和AMD通常更好,因为它们至少倾向于更加更新。

通常升级英特尔驱动程序可以解决大多数问题,但您并不总是处于要求用户升级其驱动程序的位置(例如,可能甚至无法执行此操作,例如缺少管理员权限和/或使用由供应商固定的驱动程序版本的笔记本电脑)。

请注意,即使其他项目(如Chromium或Firefox)也有自己的细粒度驱动程序错误黑名单(example)。

如果您的卡完全被列入黑名单,则可以:

  • 使用OpenGL的CPU实现,例如Mesa。如果您在应用程序中随附opengl32sw.dll,Qt可以使用它。请在这里查看说明
  • 使用Qt Quick 2D渲染器,它是一种专门为Qt Quick项目子集提供的基于CPU的渲染器。与Mesa相比,它速度非常快(因为它不需要通过OpenGL流水线绘制一个矩形,只需使用2D光栅化器绘制矩形即可);另一方面,某些功能将停止工作,例如着色器效果。目前仅在商业许可下可用,但在5.8版本中将开源。

(吹毛求疵:QML是语言,Qt Quick是使用QML编写UI的框架/库)。


谢谢。让我们从挑剔的地方开始,这是一个非常有趣的问题。就我个人的经验而言,Qt区分两种应用程序:Qt Widgets和Qt QML应用程序(请确认http://doc.qt.io/qt-5/qmlapplications.html)。我链接的Qt模块也称为“qml”。那么问题是,是否可能编写没有Qt Quick的QML应用程序? - Simon Warta
是的,确实如此。例如,Declarative State Machine framework 不使用 Qt Quick,而是仅使用 QML(使用该语言)。如果您不链接到 Qt Quick(例如在您的 .pro 文件中有 QT += quick),则无法使用诸如 QQuickWindowQQuickView 等类型。另一方面:Qt Quick 2 类型可通过插件提供给 QML。这使您可以在 QML 中实际创建它们,而无需链接任何内容。 - peppe
非常好的建议,谢谢。您能否为2D是在5.8中开源添加一个参考?这对我来说是新的。 - Simon Warta
请查看此公告。看起来代码已经公开了。 - peppe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接