【问题标题】:FPS for QtQuick 1 and QtQuick 2 are sameQtQuick 1 和 QtQuick 2 的 FPS 相同
【发布时间】:2016-07-19 06:13:24
【问题描述】:

我有一个基于 QML 的 Qt UI 应用程序,它可以播放音频。该应用程序是使用 Qt 4.x 开发的,并且在所有 QML 文件中都有 import QtQuick 1.0 语句。我试图通过从QDeclarativeItem 类派生并实现paint(QPainter *) 函数来计算应用程序的FPS。 FPS 约为 60。

后来,我移植了同一个应用程序以使用QtQuick 2.0。它在 QML 文件中有 import QtQuick 2.0 语句以及使用 QtQuick 2.0 运行应用程序所需的一些其他更改。同样,我尝试通过从 QQuickPaintedItem 派生并实现 paint(QPainter *painter) 函数来计算应用程序的 FPS。计算出来的 FPS 又是 60 左右。

我预计基于 QtQuick 1.0 的第一个应用程序与第二个应用程序相比具有更低的 FPS。但是,事实并非如此。这种行为是预期的吗?我的应用程序中没有任何 OpenGL 调用。该应用程序只有普通的 QML 组件,例如 Rectangle, Item, Image

我的FPS计算方法是基于另一个线程Show FPS in QML的解决方案

【问题讨论】:

  • 60 可能是您显示器的刷新率。在视频驱动设置中关闭垂直同步,也许它会关闭应用程序的同步。
  • @Velkan 不。我没有得到一个常数 60。每当我在应用程序的多个屏幕之间导航时,该值的范围从 40 到 60。顺便说一句,我如何在视频驱动程序中打开 vsync?

标签: qt gpu qtquick2 frame-rate qt-quick


【解决方案1】:

动画看起来流畅的最佳 FPS 是 60。大多数典型显示器的刷新率也是 60 HZ。
所以理想的 FPS 是 60 或更高是浪费的。因此,大多数 UI 框架将 FPS 限制为 60 (more info about vsync)。

但要实现这一点,应用必须在每次渲染之间的约 16 毫秒内完成其工作(1000 毫秒/60 fps ~= 16 毫秒)。换句话说,如果应用程序运行动画并绑定某些东西并计算方程等,应用程序必须在 16 毫秒内完成它们。否则用户会遇到丢帧,导致跳转。

QtQuick 2 在这里大放异彩!因为它使用了一些优雅的技术,例如多线程 UI、JIT、QMLCompiler 等,并使用优化的 C++ 代码进行了增强。

结果,使用 QtQuick 2 制作的应用程序会更加流畅。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-06
    • 2014-05-13
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多