diff options
author | Laszlo Agocs <laszlo.agocs@theqtcompany.com> | 2015-02-09 10:56:59 +0100 |
---|---|---|
committer | Sean Harmer <sean.harmer@kdab.com> | 2015-02-09 15:45:46 +0000 |
commit | d3d1088dbbf21c5d4792f434178c942ff6198f45 (patch) | |
tree | fcfefa96afc54692e08158505a3a7433307b46e4 /src | |
parent | 9837a5735fae7a24c3ec9b528c08ebffb955fc20 (diff) |
Make sure the context is current when needed
Task-number: QTBUG-44148
Change-Id: Ia15592328638dd243b7f82d8e2dcc7e523447cbf
Reviewed-by: Sean Harmer <sean.harmer@kdab.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/render/backend/qgraphicscontext.cpp | 26 | ||||
-rw-r--r-- | src/render/backend/qgraphicscontext_p.h | 2 | ||||
-rw-r--r-- | src/render/backend/renderer.cpp | 3 |
3 files changed, 24 insertions, 7 deletions
diff --git a/src/render/backend/qgraphicscontext.cpp b/src/render/backend/qgraphicscontext.cpp index 75eb217c2..7145d5451 100644 --- a/src/render/backend/qgraphicscontext.cpp +++ b/src/render/backend/qgraphicscontext.cpp @@ -144,11 +144,8 @@ bool QGraphicsContext::beginDrawing(QSurface *surface, const QColor &clearColor) return false; } - bool ok = m_gl->makeCurrent(m_surface); - if (!ok) { - qCWarning(Backend) << Q_FUNC_INFO << "make current failed"; + if (!makeCurrent(m_surface)) return false; - } GLint err = m_gl->functions()->glGetError(); if (err != 0) { @@ -234,8 +231,25 @@ void QGraphicsContext::setOpenGLContext(QOpenGLContext* ctx, QSurface *surface) releaseOpenGL(); m_gl = ctx; - m_gl->makeCurrent(surface); - resolveHighestOpenGLFunctions(); + if (makeCurrent(surface)) { + resolveHighestOpenGLFunctions(); + m_gl->doneCurrent(); + } +} + +bool QGraphicsContext::makeCurrent(QSurface *surface) +{ + Q_ASSERT(m_gl); + if (!m_gl->makeCurrent(surface)) { + qCWarning(Backend) << Q_FUNC_INFO << "makeCurrent failed"; + return false; + } + return true; +} + +void QGraphicsContext::doneCurrent() +{ + Q_ASSERT(m_gl); m_gl->doneCurrent(); } diff --git a/src/render/backend/qgraphicscontext_p.h b/src/render/backend/qgraphicscontext_p.h index 37b55500f..6cae74612 100644 --- a/src/render/backend/qgraphicscontext_p.h +++ b/src/render/backend/qgraphicscontext_p.h @@ -104,6 +104,8 @@ public: void releaseOpenGL(); void setOpenGLContext(QOpenGLContext* ctx, QSurface *surface); QOpenGLContext *openGLContext() { return m_gl; } + bool makeCurrent(QSurface *surface); + void doneCurrent(); void activateShader(RenderShader* shader); QOpenGLShaderProgram *containsProgram(const ProgramDNA &dna) const diff --git a/src/render/backend/renderer.cpp b/src/render/backend/renderer.cpp index 3b4105488..1451253fe 100644 --- a/src/render/backend/renderer.cpp +++ b/src/render/backend/renderer.cpp @@ -331,7 +331,7 @@ void Renderer::initialize(QOpenGLContext *context) } m_graphicsContext->setOpenGLContext(ctx, m_surface); - if (enableDebugLogging) { + if (enableDebugLogging && ctx->makeCurrent(m_surface)) { bool supported = ctx->hasExtension("GL_KHR_debug"); if (supported) { qCDebug(Backend) << "Qt3D: Enabling OpenGL debug logging"; @@ -350,6 +350,7 @@ void Renderer::initialize(QOpenGLContext *context) } else { qCDebug(Backend) << "Qt3D: OpenGL debug logging requested but GL_KHR_debug not supported"; } + ctx->doneCurrent(); } // Awake setScenegraphRoot in case it was waiting |