有没有办法在没有OpenGL的情况下使用QtWebEngine?

时间:2015-10-12 21:16:16

标签: qt opengl build qt5 qtwebengine

我正在尝试让QtWebEngine在VM上运行并遇到困难。根据{{​​3}}的答案:

  

最终我意识到OpenGL 3.3在虚拟机上不会轻易工作..但是。我不得不从ubuntu usb启动并通过安装最新的mesa 3d包来工作。

有没有办法让QtWebEngine在没有OpenGL的情况下工作?我不是直接使用任何OpenGL调用,也不需要任何3d功能。我只想嵌入一个QWebEngineView来显示动态HTML页面。我猜这应该是可行的,因为Chrome在同一个虚拟机上工作没有问题。

1 个答案:

答案 0 :(得分:3)

我认为没有办法在没有OpenGL的情况下使用Qt WebEngine。文档中没有明确说明,但这是我从我发现的内容中理解的内容。

关于Chromium

据说here,QtWebEngine将铬的快速移动网络功能集成到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来实现此功能,QSurfaceFormat::profile()可以通过函数Qt WebEngine platform notes访问OpenGLContextProfile。现在,我们回顾{{3}}所述的内容:

  

如果具有修改的OpenGL配置文件的新默认QSurfaceFormat必须   设置,应该在声明应用程序实例之前设置,   确保所有创建的OpenGL上下文都使用相同的OpenGL   轮廓。

     

在OS X上,如果在应用程序之后设置了默认的QSurfaceFormat   例如,应用程序将使用qFatal()退出,并打印一条消息   应该在应用程序之前设置默认的QSurfaceFormat   实例

如果我们查看Qt的源代码,可以在几个重要文件中调用OpenGL,例如qtwebengine\src\core\web_engine_context.cppqtwebengine\src\webengine\api\qtwebengineglobal.cpp。此外,我还在OpenGL中的来源中找到了对qtwebengine\src\3rdparty\chromium\函数的调用,因此我怀疑Chromium有时需要调用OpenGL函数。

简而言之

Qt WebEngine正在使用Chromium(不一定使用OpenGL)以及Qt GUI,它使用必须由Web引擎共享的OpenGL上下文。因此,我的结论是,如果没有OpenGL,你就不能使用Qt WebEngine。