summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/kernel/qopenglcontext.cpp19
-rw-r--r--src/gui/kernel/qopenglcontext_p.h2
2 files changed, 17 insertions, 4 deletions
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();