diff options
author | Zeno Albisser <zeno@webkit.org> | 2012-10-12 16:33:40 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-10-15 21:51:41 +0200 |
commit | 00d78dac2fd2312f47f862ad3538263cca14426e (patch) | |
tree | f2fc9d3f519162bbfc5b0798debf781cd21231f5 /src | |
parent | 83ffc56a72cb04d38686e81105684474cebfff2b (diff) |
Add cglContextForContext to QCocoaNativeInterface.
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 <simon.hausmann@digia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@digia.com>
Reviewed-by: Morten Johan Sørvig <morten.sorvig@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoanativeinterface.h | 3 | ||||
-rw-r--r-- | src/plugins/platforms/cocoa/qcocoanativeinterface.mm | 24 |
2 files changed, 27 insertions, 0 deletions
diff --git a/src/plugins/platforms/cocoa/qcocoanativeinterface.h b/src/plugins/platforms/cocoa/qcocoanativeinterface.h index 6f99dc458a..e4b52b9454 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 e5040080ed..7f37b971d7 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<QCocoaGLContext *>(context->handle()); + if (cocoaGLContext) { + NSOpenGLContext *nsOpenGLContext = cocoaGLContext->nsOpenGLContext(); + if (nsOpenGLContext) + return [nsOpenGLContext CGLContextObj]; + } + } + return 0; +} + QT_END_NAMESPACE |