Add nsOpenGLContextForContext to QCocoaNativeInterface.

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>
This commit is contained in:
Zeno Albisser 2012-11-23 10:52:22 +01:00 committed by The Qt Project
parent 7120cf16d2
commit 92724e533d
2 changed files with 12 additions and 4 deletions

View 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);

View 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);
@ -121,13 +122,19 @@ 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;