我注意到在基于Tegra 3的嵌入式Linux板上使用Qt 5.4.2进行QML 2动画处理时有些眼泪。我怀疑这是否是一个完整的vsync问题,因为大多数动画都是平滑的,但是有些动画涉及很多平行运动和剪切,它们始终会撕裂。这些动画表现出撕裂,而不是简单的卡顿,所以我也不认为这完全是性能问题。虽然这可能是由于系统无法提供必要的FPS来正确同步引起的?完全相同的应用程序在我的Haswell i7 PC上没有这种麻烦。
我已启用QT_QPA_EGLFS_FORCEVSYNC无效,并且尚未设法找到其他可以尝试的方法。我应该指出,由于Nvidia驱动程序要求使用X11,因此我正在使用X11后端(http://code.qt.io/cgit/qt/qtbase.git/tree/src/plugins/platforms/eglfs/qeglfshooks_x11.cpp?h=5.4)运行EGLFS。我认为这意味着我不能真正使用EGLFS通常提供的FB相关设置。还有什么我可以尝试解决的吗?
PS。通过将QT_QPA_EGLFS_SWAPINTERVAL设置为0,我可以使撕裂变得更糟。这再次表明我很可能没有整个系统的vsync问题。
PPS。我在应用程序开始时收到“QSGContext::initialize:模板缓冲区支持缺失,预计呈现错误”的警告。
最佳答案
在装有Vivante GC2000的Freescale/NXP imx6上,即使不使用x11,我也会遇到类似的问题。
设置“export QT_QPA_EGLFS_SWAPINTERVAL = 2”似乎可以减少3.14.38内核的负担。
在3.14.52上无法运行但“导出FB_MULTI_BUFFER = 3”的内核确实对使用imx6的Qt 5.5.1和5.6有所帮助。