summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@theqtcompany.com>2015-02-09 10:56:59 +0100
committerSean Harmer <sean.harmer@kdab.com>2015-02-09 15:45:46 +0000
commitd3d1088dbbf21c5d4792f434178c942ff6198f45 (patch)
treefcfefa96afc54692e08158505a3a7433307b46e4 /src
parent9837a5735fae7a24c3ec9b528c08ebffb955fc20 (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.cpp26
-rw-r--r--src/render/backend/qgraphicscontext_p.h2
-rw-r--r--src/render/backend/renderer.cpp3
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