summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTeemu Katajisto <teemu.katajisto@digia.com>2012-02-23 16:50:29 +0200
committerQt by Nokia <qt-info@nokia.com>2012-02-25 11:43:35 +0100
commite430ddfafcc6e8fa9fecb9c816908c3edce08d77 (patch)
tree082a9d2f4ec28dcebdf3507555cdfbb633d1eca8 /src
parent6ee0135e9d43bfd56d948d088781dc014ef39aa1 (diff)
Implement isSharing() and isValid() methods for QCocoaGLContext
Shared resources may have been used when initializing NSOpenGLContext but QCocoaGLContext did not implement isSharing(). This caused default implementation to return false always and therefore shared resource test case failed. Implemented also another missing method, isValid(). Task-number: QTBUG-23061 Change-Id: Ia912450035b584ea90a02a7d88d6ae531c3cbadf Reviewed-by: Morten Johan Sørvig <morten.sorvig@nokia.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/platforms/cocoa/qcocoaglcontext.h4
-rw-r--r--src/plugins/platforms/cocoa/qcocoaglcontext.mm21
2 files changed, 22 insertions, 3 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.h b/src/plugins/platforms/cocoa/qcocoaglcontext.h
index b8582022f6..4f80511f61 100644
--- a/src/plugins/platforms/cocoa/qcocoaglcontext.h
+++ b/src/plugins/platforms/cocoa/qcocoaglcontext.h
@@ -71,10 +71,14 @@ public:
static NSOpenGLPixelFormat *createNSOpenGLPixelFormat(const QSurfaceFormat &format);
NSOpenGLContext *nsOpenGLContext() const;
+ bool isSharing() const;
+ bool isValid() const;
+
private:
void setActiveWindow(QWindow *window);
NSOpenGLContext *m_context;
+ NSOpenGLContext *m_shareContext;
QSurfaceFormat m_format;
QWeakPointer<QWindow> m_currentWindow;
};
diff --git a/src/plugins/platforms/cocoa/qcocoaglcontext.mm b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
index 960163d727..637678c19e 100644
--- a/src/plugins/platforms/cocoa/qcocoaglcontext.mm
+++ b/src/plugins/platforms/cocoa/qcocoaglcontext.mm
@@ -51,13 +51,19 @@
QCocoaGLContext::QCocoaGLContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share)
: m_format(format)
{
- QCocoaAutoReleasePool pool; // For the SG Canvas render thread.
+ QCocoaAutoReleasePool pool; // For the SG Canvas render thread
NSOpenGLPixelFormat *pixelFormat = static_cast <NSOpenGLPixelFormat *>(qcgl_createNSOpenGLPixelFormat(format));
- NSOpenGLContext *actualShare = share ? static_cast<QCocoaGLContext *>(share)->m_context : 0;
+ m_shareContext = share ? static_cast<QCocoaGLContext *>(share)->nsOpenGLContext() : nil;
m_context = [NSOpenGLContext alloc];
- [m_context initWithFormat:pixelFormat shareContext:actualShare];
+ [m_context initWithFormat:pixelFormat shareContext:m_shareContext];
+
+ if (!m_context && m_shareContext) {
+ // try without shared context
+ m_shareContext = nil;
+ [m_context initWithFormat:pixelFormat shareContext:nil];
+ }
const GLint interval = 1;
[m_context setValues:&interval forParameter:NSOpenGLCPSwapInterval];
@@ -139,3 +145,12 @@ NSOpenGLContext *QCocoaGLContext::nsOpenGLContext() const
return m_context;
}
+bool QCocoaGLContext::isValid() const
+{
+ return m_context != nil;
+}
+
+bool QCocoaGLContext::isSharing() const
+{
+ return m_shareContext != nil;
+}