Add nsOpenGLContextForContext to QCocoaNativeInterface.
authorZeno Albisser <zeno@webkit.org>
Fri, 23 Nov 2012 09:52:22 +0000 (10:52 +0100)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Fri, 23 Nov 2012 16:04:00 +0000 (17:04 +0100)
This change enables receiving the native NSOpenGLContext that is used
by a QOpenGLContext. This clearly is non-public api that is only meant to
be used as a last resort for cases where it is really necessary to
get hold of a native context object.

Change-Id: Iea7c6abb458acc7aa15926052673270d25d1d9d1
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
src/plugins/platforms/cocoa/qcocoanativeinterface.h
src/plugins/platforms/cocoa/qcocoanativeinterface.mm

index e4b52b9..70ec497 100644 (file)
@@ -60,6 +60,7 @@ public:
     void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window);
 
     static void *cglContextForContext(QOpenGLContext *context);
+    static void *nsOpenGLContextForContext(QOpenGLContext* context);
 
 public Q_SLOTS:
     void onAppFocusWindowChanged(QWindow *window);
index 7f37b97..f0b1bd3 100644 (file)
@@ -69,7 +69,8 @@ void *QCocoaNativeInterface::nativeResourceForContext(const QByteArray &resource
 {
     if (!context)
         return 0;
-
+    if (resourceString.toLower() == "nsopenglcontext")
+        return nsOpenGLContextForContext(context);
     if (resourceString.toLower() == "cglcontextobj")
         return cglContextForContext(context);
 
@@ -122,12 +123,18 @@ void QCocoaNativeInterface::onAppFocusWindowChanged(QWindow *window)
 
 void *QCocoaNativeInterface::cglContextForContext(QOpenGLContext* context)
 {
+    NSOpenGLContext *nsOpenGLContext = static_cast<NSOpenGLContext*>(nsOpenGLContextForContext(context));
+    if (nsOpenGLContext)
+        return [nsOpenGLContext CGLContextObj];
+    return 0;
+}
+
+void *QCocoaNativeInterface::nsOpenGLContextForContext(QOpenGLContext* context)
+{
     if (context) {
         QCocoaGLContext *cocoaGLContext = static_cast<QCocoaGLContext *>(context->handle());
         if (cocoaGLContext) {
-            NSOpenGLContext *nsOpenGLContext = cocoaGLContext->nsOpenGLContext();
-            if (nsOpenGLContext)
-                return [nsOpenGLContext CGLContextObj];
+            return cocoaGLContext->nsOpenGLContext();
         }
     }
     return 0;