4

我们有一个使用 GLFW 创建的 3D 渲染窗口,我们想使用 QWebkit 在渲染中显示 QWebPage(也就是将 QWebPage 渲染到 OpenGL 纹理)。仅使用 CPU 版本太慢,并且 Qt 支持将 QWebkit 渲染为 QOpenGLFramebufferObjects(使用 QOpenGLPaintDevice)。

但是,这样做需要创建一个 QOpenGLContext(它需要自己的窗口等等),最终会干扰我们的整个应用程序。(在 GLFW 和 Qt Context 之间切换也会导致无限量的 GL_INVALID_OPERATIONs)

最佳案例解决方案:我们让 Qt 使用 GLFW 上下文。

代码示例:

QOpenGLFramebufferObject qfbo(mWidth, mHeight); //< this crashes because he will implicitly try to get QOpenGLFunctions which gets the default context which is null
qfbo.bind();
QOpenGLPaintDevice paintdev(mWidth, mHeight);

QPainter painter(&paintdev);
painter.beginNativePainting();
mPage->mainFrame()->render( &painter );
painter.endNativePainting();

所以这里有一些问题:

  • 是否可以让 Qt 使用 GLFW OpenGL 上下文?
  • 如果没有,我们如何在 GLFW 上下文和 Qt 上下文之间切换?(使用纹理共享传输渲染的 QWebPage)
  • 如果这一切都不可能,是否有一个免费的 Webkit 项目,支持 64 位、Windows/Linux/Mac 支持,可以使用 OpenGL 进行渲染?
4

1 回答 1

-1

@Sebastian Cabot 写道:

您不能使用 QT 直接混合两个上下文对象。QT 很棒,但为了保持自身的可移植性,它也有一些限制——主要是访问对象的低级句柄并直接操作它们。因此,即使尝试使用QOpenGLContext来自不同线程的 a,那么创建它的线程也会失败。为了使用任何 QT OpenGL 包装器,您将需要一个有效的QOpenGLContextcurrent。因此,如果不侵入 QT 实现,您就不可能实现您想要的。

于 2015-06-16T18:23:35.240 回答