QT的QWGLNativeContext类的使用

详细说明
在带有桌面OpenGL(opengl32.dll)的Windows上封装WGL上下文的类。

注意:此类没有二进制兼容性保证,这意味着使用该类的应用程序仅能与开发时所依据的Qt版本一起使用。
QWGLNativeContext是可以传递给QOpenGLContext :: setNativeHandle()的值类。使用本地句柄集创建QOpenGLContext时,不会创建新的上下文。而是使用提供的句柄,而无需取得所有权。这允许包装由外部框架或渲染引擎创建的上下文。典型用法将类似于以下片段:

 #include 
  ...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来设置共享并在屏幕外执行基于Qt的渲染。然后,在外部环境中也可以访问生成的纹理。

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

除了与QOpenGLContext :: setNativeHandle()一起使用之外,此类还用于从QOpenGLContext检索本地上下文句柄,即HGLRC值。调用QOpenGLContext :: nativeHandle()返回一个QVariant,在Windows上至少带有opengl32.dll的QVariant将包含QWGLNativeContext:

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

你可能感兴趣的:(QT的QWGLNativeContext类的使用)