没有OpenGL,有没有办法使用QtWebEngine?

没有OpenGL,有没有办法使用QtWebEngine?,qt,opengl,build,qt5,qtwebengine,Qt,Opengl,Build,Qt5,Qtwebengine,我试图让QtWebEngine在VM上运行,但遇到了一些困难。根据对以下问题的答复: 最终我意识到OpenGL 3.3在虚拟机上不容易工作。。然而我必须从ubuntu usb启动,然后安装最新的mesa 3d软件包 有没有办法让QtWebEngine在没有OpenGL的情况下工作?我不直接使用任何OpenGL调用,也不需要任何3d功能。我只想嵌入一个QWebEngineView来显示动态HTML页面。我猜这应该是可能的,因为Chrome在同一个虚拟机上工作时没有问题。我认为没有OpenGL的情况

我试图让QtWebEngine在VM上运行,但遇到了一些困难。根据对以下问题的答复:

最终我意识到OpenGL 3.3在虚拟机上不容易工作。。然而我必须从ubuntu usb启动,然后安装最新的mesa 3d软件包


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

我认为没有OpenGL的情况下,没有办法使用Qt WebEngine。文档中并没有非常明确地提到这一点,但以下是我从发现中了解到的内容

关于 正如所说,QtWebEngine将chromium的快速移动web功能集成到Qt中。另外,Chromium允许通过Qt Quick scene graph()操纵OpenGL:

Chromium与Qt Quick scene graph紧密集成,后者是 基于OpenGL ES 2.0或OpenGL 2.0进行渲染。这就提供了 您只需一次合成web内容和所有Qt Quick UI。 与Chromium的集成对开发人员来说是透明的,他们只是 使用Qt和JavaScript

还有人说,渲染过程和GUI过程都应该共享OpenGL上下文:

由于渲染过程与GUI过程分离,因此 理想情况下,应该共享OpenGL上下文,以使一个进程能够访问 其他用户上传的资源,如图像或纹理

关于QtWebEngine本身 我们刚刚谈到了Qt的GUI:事实上,Qt WebEngine并不依赖于此GUI(页面呈现和JavaScript执行从GUI进程分离到Qt WebEngine进程中),但请记住,如果希望应用程序正常工作,则需要在两个进程之间共享OpenGL上下文。特别是,这在默认情况下是通过一个函数实现的,该函数可以访问一个
OpenGLContextProfile
。现在,我们回顾一下以下情况:

如果必须使用带有修改的OpenGL配置文件的新默认QSurfaceFormat 要设置,则应在声明应用程序实例之前设置, 确保所有创建的OpenGL上下文使用相同的OpenGL 个人资料

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

如果我们看一下Qt的源代码,对OpenGL的调用是在几个重要文件中进行的,比如
qtwebengine\src\core\web\u engine\u context.cpp
qtwebengine\src\webengine\api\qtwebengineglobal.cpp
。此外,我还从
qtwebengine\src\3rdparty\chromium\
中的源代码中找到了对函数中的
OpenGL
的调用,因此我怀疑chromium有时需要调用OpenGL函数

简言之
QtWebEngine使用Chromium(不一定使用OpenGL)和QtGUI,QtGUI使用的是必须由Web引擎共享的
OpenGL
上下文。因此,我的结论是,没有OpenGL就不能使用Qt WebEngine。

但是Qt WebEngine可以使用软件渲染器(请参阅),因此它可以在VM上工作。