从QOpenGLContext获取OpenGL(WGL)上下文

时间:2013-09-12 16:16:57

标签: opengl qt5 qtquick2 wgl

我正在尝试从QQuickView窗口获取OpenGL上下文(HGLRC)。 我需要将它传递给非Qt库。我可以轻松地获得QOpenGLContext:

m_qtContext = QOpenGLContext::currentContext();

如何从Qt类获取OpenGL上下文? (QOpenGLContext)

2 个答案:

答案 0 :(得分:3)

据我所知,目前还没有完全公开的API。请注意,Qt 5从API中删除了大多数本机句柄。这应该可以解决问题:

QPlatformNativeInterface *iface = QGuiApplication::platformNativeInterface();
HGLRC ctx = (HGLRC)iface->nativeResourceForContext("renderingContext", context);

(不确定最后一次演员,但看起来是正确的according to the relevant source)。

答案 1 :(得分:1)

如果在线程具有上下文绑定时调用wglGetCurrentContext (...),则可以在 任何 框架中从WGL获取当前的OpenGL上下文。请记住,框架通常会在调用窗口的绘制回调/事件处理程序时更改当前上下文,甚至可能在完成回调后将其设置为NULL

WGL对上下文和线程有一个严格的一对一映射,因此在渲染到多个窗口的单线程应用程序中,您可能必须在窗口的绘制回调/事件处理程序中调用此函数才能获得正确的处理

简单来说,只要您拥有在Win32下发布GL命令的有效上下文,就可以通过调用wglGetCurrentContext (...)来获取特定上下文的句柄。


如果您的框架具有获取本机句柄的可移植方式,那么一定要使用它。但这绝对不是您在Microsoft Windows上的唯一选择。