From 00d78dac2fd2312f47f862ad3538263cca14426e Mon Sep 17 00:00:00 2001 From: Zeno Albisser Date: Fri, 12 Oct 2012 16:33:40 +0200 Subject: [PATCH] Add cglContextForContext to QCocoaNativeInterface. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit This change enables receiving the native CGLContextObj 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: Id00efc88a73d7df04a68c022f19d9d1c4f6d386b Reviewed-by: Simon Hausmann Reviewed-by: Samuel Rødal Reviewed-by: Morten Johan Sørvig --- .../platforms/cocoa/qcocoanativeinterface.h | 3 +++ .../platforms/cocoa/qcocoanativeinterface.mm | 24 ++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.h b/src/plugins/platforms/cocoa/qcocoanativeinterface.h index 6f99dc4..e4b52b9 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.h +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.h @@ -56,8 +56,11 @@ class QCocoaNativeInterface : public QPlatformNativeInterface public: QCocoaNativeInterface(); + void *nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context); void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window); + static void *cglContextForContext(QOpenGLContext *context); + public Q_SLOTS: void onAppFocusWindowChanged(QWindow *window); diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm index e504008..7f37b97 100644 --- a/src/plugins/platforms/cocoa/qcocoanativeinterface.mm +++ b/src/plugins/platforms/cocoa/qcocoanativeinterface.mm @@ -65,6 +65,17 @@ QCocoaNativeInterface::QCocoaNativeInterface() { } +void *QCocoaNativeInterface::nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context) +{ + if (!context) + return 0; + + if (resourceString.toLower() == "cglcontextobj") + return cglContextForContext(context); + + return 0; +} + void *QCocoaNativeInterface::nativeResourceForWindow(const QByteArray &resourceString, QWindow *window) { if (!window->handle()) { @@ -109,4 +120,17 @@ void QCocoaNativeInterface::onAppFocusWindowChanged(QWindow *window) QCocoaMenuBar::updateMenuBarImmediately(); } +void *QCocoaNativeInterface::cglContextForContext(QOpenGLContext* context) +{ + if (context) { + QCocoaGLContext *cocoaGLContext = static_cast(context->handle()); + if (cocoaGLContext) { + NSOpenGLContext *nsOpenGLContext = cocoaGLContext->nsOpenGLContext(); + if (nsOpenGLContext) + return [nsOpenGLContext CGLContextObj]; + } + } + return 0; +} + QT_END_NAMESPACE -- 2.7.4