我认为没有OpenGL 就无法使用Qt WebEngine。文档中没有说得很清楚,但这是我从我发现的内容中理解的。
正如here 所说,QtWebEngine 将 chromium 的快速移动 Web 功能集成到 Qt 中。另外,是 Chromium 允许通过 Qt Quick 场景图 (source) 操作 OpenGL:
Chromium 与 Qt Quick 场景图紧密集成,这是
基于 OpenGL ES 2.0 或 OpenGL 2.0 进行渲染。这提供了
您可以一次性合成 Web 内容和所有 Qt Quick UI。
与 Chromium 的集成对开发人员来说是透明的,他们只是
使用 Qt 和 JavaScript。
也有人说渲染进程和 GUI 进程应该共享一个 OpenGL 上下文:
由于渲染进程与 GUI 进程分离,它们
理想情况下应该共享一个 OpenGL 上下文以使一个进程能够访问
对方上传的资源,比如图片或者纹理。
关于 Qt WebEngine 本身
我们刚才讲了Qt的GUI:其实Qt WebEngine是不依赖这个GUI的(页面渲染和JavaScript执行是从GUI进程分离到Qt WebEngine进程中的),但是请记住,如果你想要你的应用程序要工作,您需要在两个进程之间共享一个 OpenGL 上下文。特别是,默认情况下这是通过QSurfaceFormat 实现的,OpenGLContextProfile 可通过函数QSurfaceFormat::profile() 访问。现在,我们回顾一下Qt WebEngine platform notes,其中指出:
如果具有修改的 OpenGL 配置文件的新默认 QSurfaceFormat 必须
被设置,它应该在应用程序实例被声明之前被设置,
确保所有创建的 OpenGL 上下文使用相同的 OpenGL
个人资料。
在 OS X 上,如果在应用程序之后设置了默认 QSurfaceFormat
例如,应用程序将使用 qFatal() 退出,并打印一条消息
应该在应用程序之前设置默认的 QSurfaceFormat
实例。
如果我们查看 Qt 的源代码,对 OpenGL 的调用是在几个重要文件中进行的,例如 qtwebengine\src\core\web_engine_context.cpp 或 qtwebengine\src\webengine\api\qtwebengineglobal.cpp。而且我还在qtwebengine\src\3rdparty\chromium\的源码中发现函数调用OpenGL,所以我怀疑Chromium有时需要调用OpenGL函数。
总之
Qt WebEngine 使用 Chromium(不一定使用 OpenGL)和 Qt GUI,它使用必须由 Web 引擎共享的 OpenGL 上下文。因此,我的结论是你不能在没有 OpenGL 的情况下使用 Qt WebEngine。