diff options
Diffstat (limited to 'src/plugins/platforms/windows/qwindowsglcontext.cpp')
-rw-r--r-- | src/plugins/platforms/windows/qwindowsglcontext.cpp | 84 |
1 files changed, 36 insertions, 48 deletions
diff --git a/src/plugins/platforms/windows/qwindowsglcontext.cpp b/src/plugins/platforms/windows/qwindowsglcontext.cpp index c1921810e7..aa93b85289 100644 --- a/src/plugins/platforms/windows/qwindowsglcontext.cpp +++ b/src/plugins/platforms/windows/qwindowsglcontext.cpp @@ -46,7 +46,6 @@ #include <QtCore/qsysinfo.h> #include <QtGui/qguiapplication.h> #include <qpa/qplatformnativeinterface.h> -#include <QtPlatformHeaders/qwglnativecontext.h> #include <algorithm> @@ -225,6 +224,11 @@ QWindowsOpenGLContext *QOpenGLStaticContext::createContext(QOpenGLContext *conte return new QWindowsGLContext(this, context); } +QWindowsOpenGLContext *QOpenGLStaticContext::createContext(HGLRC context, HWND window) +{ + return new QWindowsGLContext(this, context, window); +} + template <class MaskType, class FlagType> inline bool testFlag(MaskType mask, FlagType flag) { return (mask & MaskType(flag)) != 0; @@ -1056,48 +1060,6 @@ QWindowsGLContext::QWindowsGLContext(QOpenGLStaticContext *staticContext, if (!m_staticContext) // Something went very wrong. Stop here, isValid() will return false. return; - QVariant nativeHandle = context->nativeHandle(); - if (!nativeHandle.isNull()) { - // Adopt and existing context. - if (!nativeHandle.canConvert<QWGLNativeContext>()) { - qWarning("QWindowsGLContext: Requires a QWGLNativeContext"); - return; - } - auto handle = nativeHandle.value<QWGLNativeContext>(); - HGLRC wglcontext = handle.context(); - HWND wnd = handle.window(); - if (!wglcontext || !wnd) { - qWarning("QWindowsGLContext: No context and window given"); - return; - } - - HDC dc = GetDC(wnd); - // A window with an associated pixel format is mandatory. - // When no SetPixelFormat() call has been made, the following will fail. - m_pixelFormat = GetPixelFormat(dc); - bool ok = m_pixelFormat != 0; - if (!ok) - qWarning("QWindowsGLContext: Failed to get pixel format"); - ok = DescribePixelFormat(dc, m_pixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &m_obtainedPixelFormatDescriptor); - if (!ok) { - qWarning("QWindowsGLContext: Failed to describe pixel format"); - } else { - QWindowsOpenGLAdditionalFormat obtainedAdditional; - m_obtainedFormat = GDI::qSurfaceFormatFromPixelFormat(m_obtainedPixelFormatDescriptor, &obtainedAdditional); - m_renderingContext = wglcontext; - ok = updateObtainedParams(dc); - } - - ReleaseDC(wnd, dc); - - if (ok) - m_ownsContext = false; - else - m_renderingContext = nullptr; - - return; - } - QSurfaceFormat format = context->format(); if (format.renderableType() == QSurfaceFormat::DefaultRenderableType) format.setRenderableType(QSurfaceFormat::OpenGL); @@ -1199,11 +1161,6 @@ QWindowsGLContext::QWindowsGLContext(QOpenGLStaticContext *staticContext, } while (false); - // Make the HGLRC retrievable via QOpenGLContext::nativeHandle(). - // Do not provide the window since it is the dummy one and it is about to disappear. - if (m_renderingContext) - context->setNativeHandle(QVariant::fromValue<QWGLNativeContext>(QWGLNativeContext(m_renderingContext, nullptr))); - if (hdc) ReleaseDC(dummyWindow, hdc); if (dummyWindow) @@ -1217,6 +1174,37 @@ QWindowsGLContext::QWindowsGLContext(QOpenGLStaticContext *staticContext, << "\n HGLRC=" << m_renderingContext; } +QWindowsGLContext::QWindowsGLContext(QOpenGLStaticContext *staticContext, HGLRC wglcontext, HWND wnd) + : m_staticContext(staticContext) +{ + if (!m_staticContext) // Something went very wrong. Stop here, isValid() will return false. + return; + + HDC dc = GetDC(wnd); + // A window with an associated pixel format is mandatory. + // When no SetPixelFormat() call has been made, the following will fail. + m_pixelFormat = GetPixelFormat(dc); + bool ok = m_pixelFormat != 0; + if (!ok) + qWarning("QWindowsGLContext: Failed to get pixel format"); + ok = DescribePixelFormat(dc, m_pixelFormat, sizeof(PIXELFORMATDESCRIPTOR), &m_obtainedPixelFormatDescriptor); + if (!ok) { + qWarning("QWindowsGLContext: Failed to describe pixel format"); + } else { + QWindowsOpenGLAdditionalFormat obtainedAdditional; + m_obtainedFormat = GDI::qSurfaceFormatFromPixelFormat(m_obtainedPixelFormatDescriptor, &obtainedAdditional); + m_renderingContext = wglcontext; + ok = updateObtainedParams(dc); + } + + ReleaseDC(wnd, dc); + + if (ok) + m_ownsContext = false; + else + m_renderingContext = nullptr; +} + QWindowsGLContext::~QWindowsGLContext() { if (m_renderingContext && m_ownsContext) |