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>
bb10
Teemu Katajisto 2012-02-23 16:50:29 +02:00 committed by Qt by Nokia
parent 6ee0135e9d
commit e430ddfafc
2 changed files with 22 additions and 3 deletions

View File

@ -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;
};

View File

@ -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;
}