我们构建了一个使用QT WebEngine来测试WebGL功能的应用程序,但它的工作效率非常高(> 30%)用于呈现一些正弦波形,根文件系统由QT Enterprise提供,如此处所述IMX6
http://doc.qt.digia.com/QtEnterpriseEmbedded/qtee-preparing-hardware-imx6sabresd.html
在检查根文件系统时,我们发现没有GPU驱动程序(对于IMX6通常是libVivante.so和libVivante.ko),所以看起来所有的GL渲染都是由CPU而不是GPU完成的,这就是原因对于高CPU利用率,是否有人知道在QT WebEngine中为WebGL启用硬件加速的任何其他方法?
答案 0 :(得分:3)
Qt WebEngine需要硬件加速来合成页面的各个层次,如果没有它,你可能无法在屏幕上看到任何内容。
Chromium,Qt WebEngine背后,是一个相当野兽,更专为感知平滑而不是产生CPU周期;它将使用它可以实现的所有资源。
任何JavaScript WebGL调用都将从主渲染线程转到GPU进程主线程,以解码为对驱动程序的GL调用。每个不同的WebGL画布将触发一个不同的FBO使用和绑定,需要GL上下文切换,并且尽可能经常,最新状态将触发Chromium合成器启动,将所有委派的场景发送到浏览器进程,最后结束在QtQuick的场景图线程中进行合成。
所有这一切都表明,单个JavaScript WebGL调用触发的机器要大得多,而不仅仅是告诉OpenGL绘制这些几何图形。这种设备的CPU使用率为30%对我来说似乎并不正常,尽管可能有办法避免瓶颈。
最有效的方法是使用自定义的QtQuick Scene Graph几何体,如下例所示:http://qt-project.org/doc/qt-5/qtquick-scenegraph-customgeometry-example.html,但即便如此,我也不希望该设备上的CPU使用率低于10%。