diff options
author | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2014-10-14 14:35:03 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@theqtcompany.com> | 2014-10-15 09:37:17 +0300 |
commit | 91a9698b80bcb072a5ec3af69515249bac96aff5 (patch) | |
tree | dc2ffcce10e20c499addd739314ae1bda661eaba /src/datavisualization/engine/abstract3drenderer.cpp | |
parent | d0244a84f150fe59327afa9bd59d0f9cdde72406 (diff) |
Simplify context handling at cleanup.
If the context exists at renderer deletion, it is possible that
it no longer has valid surface, which means it won't be possible
to set it back to current if we change context for deletion cleanup.
Since the current context will be one of our shared contexts anyway,
there is no need to do a dummy context for cleanup unless the current
context is null.
Change-Id: Ibabe081742beb975ee848ccb3690703ef5b027a9
Reviewed-by: Mika Salmela <mika.salmela@digia.com>
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r-- | src/datavisualization/engine/abstract3drenderer.cpp | 22 |
1 files changed, 9 insertions, 13 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index d7bad300..e4141f4c 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -105,8 +105,6 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller) m_reflectionEnabled(false), m_reflectivity(0.5), m_context(0), - m_currentContextAtDelete(0), - m_currentSurfaceAtDelete(0), m_dummySurfaceAtDelete(0) { QObject::connect(m_drawer, &Drawer::drawerChanged, this, &Abstract3DRenderer::updateTextures); @@ -158,6 +156,10 @@ Abstract3DRenderer::~Abstract3DRenderer() delete m_textureHelper; } + m_axisCacheX.clearLabels(); + m_axisCacheY.clearLabels(); + m_axisCacheZ.clearLabels(); + restoreContextAfterDelete(); } @@ -1784,10 +1786,9 @@ void Abstract3DRenderer::queriedGraphPosition(const QMatrix4x4 &projectionViewMa void Abstract3DRenderer::fixContextBeforeDelete() { - m_currentContextAtDelete = QOpenGLContext::currentContext(); - if (m_currentContextAtDelete) - m_currentSurfaceAtDelete = m_currentContextAtDelete->surface(); - if (!m_context.isNull() && m_context.data() != m_currentContextAtDelete + // Only need to fix context if the current context is null. + // Otherwise we expect it to be our shared context, so we can use it for cleanup. + if (!QOpenGLContext::currentContext() && !m_context.isNull() && QThread::currentThread() == this->thread()) { m_dummySurfaceAtDelete = new QWindow(); m_dummySurfaceAtDelete->setSurfaceType(QWindow::OpenGLSurface); @@ -1800,15 +1801,10 @@ void Abstract3DRenderer::fixContextBeforeDelete() void Abstract3DRenderer::restoreContextAfterDelete() { - if (m_currentContextAtDelete && m_currentSurfaceAtDelete - && m_context.data() != m_currentContextAtDelete) { - m_currentContextAtDelete->makeCurrent(m_currentSurfaceAtDelete); - } else if (m_dummySurfaceAtDelete) { + if (m_dummySurfaceAtDelete) m_context->doneCurrent(); - } + delete m_dummySurfaceAtDelete; - m_currentContextAtDelete = 0; - m_currentSurfaceAtDelete = 0; m_dummySurfaceAtDelete = 0; } |