2

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

m_qtContext = QOpenGLContext::currentContext();

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

4

2 回答 2

3

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

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

(不确定最后一次演员,但根据相关来源看起来是正确的)。

于 2013-09-12T19:17:33.450 回答
1

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

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

简单来说,只要你有一个在 Win32 下发出 GL 命令的有效上下文,你就可以通过调用wglGetCurrentContext (...).


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

于 2013-09-12T21:33:14.550 回答