来自GLFW Context的QOpenGLContext

时间:2013-12-13 15:58:50

标签: c++ qt opengl glfw openglcontext

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

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

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

代码示例:

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进行渲染?

1 个答案:

答案 0 :(得分:-1)

@Sebastian Cabot写道:

  

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