在具有桌面 OpenGL (opengl32.dll) 的 Windows 封装 WGL 上下文的类。 更多...
头: | #include <QWGLNativeContext> |
Since: | Qt 5.4 |
该类在 Qt 5.4 引入。
QWGLNativeContext (HGLRC ctx , HWND wnd ) | |
QWGLNativeContext () | |
HGLRC | context () const |
HWND | window () const |
注意: 此类没有二进制兼容性保证,意味使用它的应用程序只保证能工作于针对它开发的 Qt 版本。
QWGLNativeContext 是值类,可以传递给 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 ().
构造新实例采用提供 ctx 上下文句柄和 wnd 窗口句柄。
注意: 窗口的指定通过 wnd 必须将其像素格式设为兼容上下文格式。若未在属于窗口的任何设备上下文中调用 SetPixelFormat(),采纳上下文会失败。
构造没有句柄的新实例。
返回 WGL 上下文。
注意: 窗口句柄不可用当 QWGLNativeContext 是常规查询,不采纳 QOpenGLContext 使用 QOpenGLContext::nativeHandle ()。这是因为 windows 平台插件创建 WGL 上下文使用之后将不可用的虚设窗口。相反,可查询 HWND (本机窗口句柄) 从 QWindow 凭借 QPlatformNativeInterface::nativeResourceForWindow () 使用 "handle" 资源键。注意:不管怎样,窗口不会拥有其像素格式设置,直到它首先关联上下文凭借 QOpenGLContext::makeCurrent ().
返回为其创建上下文的窗口句柄。