summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp22
-rw-r--r--src/datavisualization/engine/abstract3drenderer_p.h2
-rw-r--r--src/datavisualization/engine/axisrendercache.cpp10
-rw-r--r--src/datavisualization/engine/axisrendercache_p.h1
4 files changed, 18 insertions, 17 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;
}
diff --git a/src/datavisualization/engine/abstract3drenderer_p.h b/src/datavisualization/engine/abstract3drenderer_p.h
index 1857278c..38665c65 100644
--- a/src/datavisualization/engine/abstract3drenderer_p.h
+++ b/src/datavisualization/engine/abstract3drenderer_p.h
@@ -324,8 +324,6 @@ protected:
QLocale m_locale;
QPointer<QOpenGLContext> m_context; // Not owned
- QOpenGLContext *m_currentContextAtDelete; // Not owned
- QSurface *m_currentSurfaceAtDelete; // Not owned
QWindow *m_dummySurfaceAtDelete;
private:
diff --git a/src/datavisualization/engine/axisrendercache.cpp b/src/datavisualization/engine/axisrendercache.cpp
index 2448483e..f467cc76 100644
--- a/src/datavisualization/engine/axisrendercache.cpp
+++ b/src/datavisualization/engine/axisrendercache.cpp
@@ -44,8 +44,7 @@ AxisRenderCache::AxisRenderCache()
AxisRenderCache::~AxisRenderCache()
{
- foreach (LabelItem *label, m_labelItems)
- delete label;
+ clearLabels();
delete m_formatter;
}
@@ -175,6 +174,13 @@ void AxisRenderCache::updateTextures()
}
}
+void AxisRenderCache::clearLabels()
+{
+ m_titleItem.clear();
+ for (int i = 0; i < m_labels.size(); i++)
+ m_labelItems[i]->clear();
+}
+
int AxisRenderCache::maxLabelWidth(const QStringList &labels) const
{
int labelWidth = 0;
diff --git a/src/datavisualization/engine/axisrendercache_p.h b/src/datavisualization/engine/axisrendercache_p.h
index 9fb04837..e32c590e 100644
--- a/src/datavisualization/engine/axisrendercache_p.h
+++ b/src/datavisualization/engine/axisrendercache_p.h
@@ -108,6 +108,7 @@ public:
inline void setTitleFixed(bool fixed) { m_titleFixed = fixed; }
void updateTextures();
+ void clearLabels();
private:
int maxLabelWidth(const QStringList &labels) const;