From e24c8d1266fcf42292b48a7dc119dd5f3a217989 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 5 Nov 2012 15:55:49 +0100 Subject: Return appropriate currentContext() in platform's makeCurrent(). This way the platform plugin can use convenience classes such as QOpenGLFramebufferObject in the makeCurrent() implementation. Change-Id: I1fb5f6b8ec094ff39454adbeca9eb0d1a8f43ee6 Reviewed-by: Paul Olav Tvete --- src/gui/kernel/qopenglcontext.cpp | 19 ++++++++++++++++--- src/gui/kernel/qopenglcontext_p.h | 2 +- 2 files changed, 17 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp index e8aa44def7..d2de6aa125 100644 --- a/src/gui/kernel/qopenglcontext.cpp +++ b/src/gui/kernel/qopenglcontext.cpp @@ -62,6 +62,10 @@ QT_BEGIN_NAMESPACE class QGuiGLThreadContext { public: + QGuiGLThreadContext() + : context(0) + { + } ~QGuiGLThreadContext() { if (context) context->doneCurrent(); @@ -151,18 +155,25 @@ QMutex QOpenGLContextPrivate::makeCurrentTrackerMutex; \sa QOpenGLFunctions, QOpenGLBuffer, QOpenGLShaderProgram, QOpenGLFramebufferObject */ -void QOpenGLContextPrivate::setCurrentContext(QOpenGLContext *context) +/*! + \internal + + Set the current context. Returns the previously current context. +*/ +QOpenGLContext *QOpenGLContextPrivate::setCurrentContext(QOpenGLContext *context) { QGuiGLThreadContext *threadContext = qwindow_context_storage.localData(); if (!threadContext) { if (!QThread::currentThread()) { qWarning("No QTLS available. currentContext wont work"); - return; + return 0; } threadContext = new QGuiGLThreadContext; qwindow_context_storage.setLocalData(threadContext); } + QOpenGLContext *previous = threadContext->context; threadContext->context = context; + return previous; } int QOpenGLContextPrivate::maxTextureSize() @@ -505,9 +516,9 @@ bool QOpenGLContext::makeCurrent(QSurface *surface) return false; } + QOpenGLContext *previous = QOpenGLContextPrivate::setCurrentContext(this); if (d->platformGLContext->makeCurrent(surface->surfaceHandle())) { - QOpenGLContextPrivate::setCurrentContext(this); d->surface = surface; d->shareGroup->d_func()->deletePendingResources(this); @@ -519,6 +530,8 @@ bool QOpenGLContext::makeCurrent(QSurface *surface) return true; } + QOpenGLContextPrivate::setCurrentContext(previous); + return false; } diff --git a/src/gui/kernel/qopenglcontext_p.h b/src/gui/kernel/qopenglcontext_p.h index 704ff09411..efce991679 100644 --- a/src/gui/kernel/qopenglcontext_p.h +++ b/src/gui/kernel/qopenglcontext_p.h @@ -224,7 +224,7 @@ public: QPaintEngineEx *active_engine; - static void setCurrentContext(QOpenGLContext *context); + static QOpenGLContext *setCurrentContext(QOpenGLContext *context); int maxTextureSize(); -- cgit v1.2.3