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:
parent
5f915d0b91
commit
e24c8d1266
@ -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;
|
||||
}
|
||||
|
||||
|
@ -224,7 +224,7 @@ public:
|
||||
|
||||
QPaintEngineEx *active_engine;
|
||||
|
||||
static void setCurrentContext(QOpenGLContext *context);
|
||||
static QOpenGLContext *setCurrentContext(QOpenGLContext *context);
|
||||
|
||||
int maxTextureSize();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user