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 <paul.tvete@digia.com>
This commit is contained in:
Samuel Rødal 2012-11-05 15:55:49 +01:00 committed by The Qt Project
parent 5f915d0b91
commit e24c8d1266
2 changed files with 17 additions and 4 deletions

View File

@ -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;
}

View File

@ -224,7 +224,7 @@ public:
QPaintEngineEx *active_engine;
static void setCurrentContext(QOpenGLContext *context);
static QOpenGLContext *setCurrentContext(QOpenGLContext *context);
int maxTextureSize();