diff options
author | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2019-07-16 23:45:48 +0200 |
---|---|---|
committer | Tor Arne Vestbø <tor.arne.vestbo@qt.io> | 2019-07-17 09:56:15 +0200 |
commit | d224c762bc9530236d255cc5cb851112fcc7cee2 (patch) | |
tree | c43e56c5f2efeec942dc77ffbdea298b69c39ea5 /src/plugins/platforms | |
parent | d2e4bde5d09816ebedb1a5cc9ec7c0af20fd1242 (diff) |
macOS: Use correct virtual screen when resolving GL surface format
Change-Id: I8288db85c8e99bf9fccfcfbca7f9e3594d00fa48
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'src/plugins/platforms')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoaglcontext.mm | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.mm b/src/plugins/platforms/cocoa/qcocoaglcontext.mm index c5f0762ac2..e45ea7efd3 100644 --- a/src/plugins/platforms/cocoa/qcocoaglcontext.mm +++ b/src/plugins/platforms/cocoa/qcocoaglcontext.mm @@ -40,6 +40,8 @@ #include "qcocoaglcontext.h" #include "qcocoawindow.h" #include "qcocoahelpers.h" +#include "qcocoascreen.h" + #include <qdebug.h> #include <QtPlatformHeaders/qcocoanativecontext.h> #include <dlfcn.h> @@ -275,9 +277,28 @@ void QCocoaGLContext::updateSurfaceFormat() NSOpenGLPixelFormat *pixelFormat = m_context.pixelFormat; + GLint virtualScreen = [&, this]() { + auto *platformScreen = static_cast<QCocoaScreen*>(context()->screen()->handle()); + auto displayId = platformScreen->nativeScreen().qt_displayId; + auto requestedDisplay = CGDisplayIDToOpenGLDisplayMask(displayId); + for (int i = 0; i < pixelFormat.numberOfVirtualScreens; ++i) { + GLint supportedDisplays; + [pixelFormat getValues:&supportedDisplays forAttribute:NSOpenGLPFAScreenMask forVirtualScreen:i]; + // Note: The mask returned for NSOpenGLPFAScreenMask is a bit mask of + // physical displays that the renderer can drive, while the one returned + // from CGDisplayIDToOpenGLDisplayMask has a single bit set, representing + // that particular display. + if (requestedDisplay & supportedDisplays) + return i; + } + qCWarning(lcQpaOpenGLContext) << "Could not find virtual screen for" + << platformScreen << "with displayId" << displayId; + return 0; + }(); + auto pixelFormatAttribute = [&](NSOpenGLPixelFormatAttribute attribute) { int value = 0; - [pixelFormat getValues:&value forAttribute:attribute forVirtualScreen:0]; + [pixelFormat getValues:&value forAttribute:attribute forVirtualScreen:virtualScreen]; return value; }; |