QWGLNativeContext 类

在具有桌面 OpenGL (opengl32.dll) 的 Windows 封装 WGL 上下文的类 更多...

头: #include <QWGLNativeContext>
Since: Qt 5.4

公共函数

QWGLNativeContext ()
QWGLNativeContext (HGLRC ctx , HWND wnd )
HGLRC context () const
HWND window () const

详细描述

在具有桌面 OpenGL (opengl32.dll) 的 Windows 封装 WGL 上下文的类

注意: 此类没有二进制兼容性保证,意味使用它的应用程序只保证能工作于针对它开发的 Qt 版本。

QWGLNativeContext is a value class that can be passed to QOpenGLContext::setNativeHandle ()。当创建 QOpenGLContext 采用本机句柄设置,不会创建新的上下文。相反,使用提供句柄,无需拥有所有权。这允许包裹由外部框架或渲染引擎创建的上下文。典型用法类似以下代码片段:

#include <QtPlatformSupport/QWGLNativeContext>
...create and retrieve the WGL context and the corresponding window...
QOpenGLContext *context = new QOpenGLContext;
QWGLNativeContext nativeContext(hglrc, hwnd);
context->setNativeHandle(QVariant::fromValue(nativeContext));
context->create();
...
					

窗口是需要的,因为会查询其像素格式。当采纳成功时, QOpenGLContext::format () 会返回 QSurfaceFormat 描述此像素格式。

推荐限定这种方式创建的 QOpenGLContexts 的用法。各种平台特定行为和问题可能阻止这种上下文,以使由 Qt 创建的窗口 (表面) 成为当前 (例如:由于像素格式不匹配)。潜在的更安全解决方案是仅使用包裹上下文以设置共享并履行基于 Qt 的离屏渲染,使用单独、专用 QOpenGLContext 。接着,还可在外来上下文中访问结果纹理。

...like above...
QOpenGLContext *qtcontext = new QOpenGLContext;
qtcontext->setShareContext(context);
qtcontext->setFormat(context->format());
qtcontext->create();
...use qtcontext for rendering with Qt...
					

除了用于 QOpenGLContext::setNativeHandle (),此类还可用于检索本机上下文句柄 (即:HGLRC 值),从 QOpenGLContext 。调用 QOpenGLContext::nativeHandle () 返回 QVariant which, on Windows with opengl32.dll at least, will contain a QWGLNativeContext :

QVariant nativeHandle = context->nativeHandle();
if (!nativeHandle.isNull() && nativeHandle.canConvert<QWGLNativeContext>()) {
    QWGLNativeContext nativeContext = nativeHandle.value<QWGLNativeContext>();
    HGLRC hglrc = nativeContext.context();
    ...
}
					

另请参阅 QOpenGLContext::setNativeHandle () 和 QOpenGLContext::nativeHandle ().

成员函数文档编制

QWGLNativeContext:: QWGLNativeContext ()

构造没有句柄的新实例。

QWGLNativeContext:: QWGLNativeContext ( HGLRC ctx , HWND wnd )

构造新实例采用提供 ctx 上下文句柄和 wnd 窗口句柄。

注意: 窗口的指定通过 wnd 必须将其像素格式设为兼容上下文格式。若未在属于窗口的任何设备上下文中调用 SetPixelFormat(),采纳上下文会失败。

HGLRC QWGLNativeContext:: context () const

返回 WGL 上下文。

HWND QWGLNativeContext:: window () const

注意: 窗口句柄不可用当 QWGLNativeContext 是常规查询,不采纳 QOpenGLContext 使用 QOpenGLContext::nativeHandle ()。这是因为 windows 平台插件创建 WGL 上下文使用之后将不可用的虚设窗口。相反,可查询 HWND (本机窗口句柄) 从 QWindow 凭借 QPlatformNativeInterface::nativeResourceForWindow () 使用 "handle" 资源键。注意:不管怎样,窗口不会拥有其像素格式设置,直到它首先关联上下文凭借 QOpenGLContext::makeCurrent ().

返回为其创建上下文的窗口句柄。