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 via QPlatformNativeInterface::nativeResourceForWindow() using the "handle" 資源鍵。注意:不管怎樣,窗口不會擁有其像素格式設置,直到它首先關聯上下文憑藉 QOpenGLContext::makeCurrent ().

返迴為其創建上下文的窗口句柄。