我认为没有办法使用 Qt WebEngine 没有OpenGL
. 文档中没有很明确地说明,但这是我从我发现的内容中理解的。
正如这里所说,QtWebEngine 将 chromium 的快速移动 Web 功能集成到 Qt 中。另外,是 Chromium 允许通过 Qt Quick 场景图(来源)操作 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 平台说明,其中指出:
如果必须设置具有修改的 OpenGL 配置文件的新默认 QSurfaceFormat,则应在声明应用程序实例之前设置它,以确保所有创建的 OpenGL 上下文使用相同的 OpenGL 配置文件。
在 OS X 上,如果在应用程序实例之后设置了默认的 QSurfaceFormat,应用程序将使用 qFatal() 退出,并打印一条消息,表明应该在应用程序实例之前设置默认的 QSurfaceFormat。
如果我们查看 Qt 的源代码,OpenGL
会在几个重要文件中调用 ,例如qtwebengine\src\core\web_engine_context.cpp
或qtwebengine\src\webengine\api\qtwebengineglobal.cpp
. 此外,我还OpenGL
从 in 的源代码中找到了对 in 函数的调用qtwebengine\src\3rdparty\chromium\
,因此我怀疑 Chromium 有时需要调用 OpenGL 函数。
简而言之
Qt WebEngine 使用 Chromium(不一定使用 OpenGL)和 Qt GUI,它使用OpenGL
必须由 Web 引擎共享的上下文。因此,我的结论是你不能在没有 OpenGL 的情况下使用 Qt WebEngine。