4

我们构建了一个使用 QT WebEngine 来测试 WebGL 功能的应用程序,它可以工作,但是用于渲染一些正弦波形的 CPU 利用率非常高(>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 硬件加速的任何其他方法吗?

4

1 回答 1

3

Qt WebEngine 需要硬件加速来合成页面的层,没有它你可能无法在屏幕上看到任何东西。

Qt WebEngine 背后的 Chromium 是一头野兽,它的设计更多是为了感知平滑而不是产生 CPU 周期;它将使用它可以实现的所有资源。

任何 JavaScript WebGL 调用都会从主渲染线程,然后到 GPU 进程主线程,被解码为对驱动程序的 GL 调用。每个不同的 WebGL 画布会触发不同的 FBO 被使用和绑定,需要 GL 上下文切换,并且尽可能频繁地,最新状态会触发 Chromium 合成器启动,将所有委托的场景发送到浏览器进程,最终结束于 QtQuick 的场景图线程进行合成。

所有这一切都表明,一个 JavaScript WebGL 调用触发了一台比仅仅告诉 OpenGL 绘制这些几何图形更大的机器。这种设备上 30% 的 CPU 使用率对我来说似乎并不正常,尽管可能有一种方法可以避免瓶颈。

最有效的方法是使用自定义 QtQuick Scene Graph 几何体,如下例所示:http: //qt-project.org/doc/qt-5/qtquick-scenegraph-customgeometry-example.html,但即便如此我不希望该设备上的 CPU 使用率低于 10%。

于 2014-09-29T14:26:54.787 回答