summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-02-27 11:23:17 +0200
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-02-28 11:05:25 +0200
commit86b4e19ee160ee3e84210595db5e6af08a8b9e46 (patch)
treee1f7f1d8dbaa7cc520f7efc8b45868d29aa6c71f /src/datavisualization/engine
parent34a7223467a45e33c1b344f1e1880bc818b66b27 (diff)
Introduce state storing for mac and android.
At least some mac and android environments do not handle shared contexts properly, leading to slowdowns and/or artifacts. Disable context sharing on mac and android, and instead store and restore relevant opengl state. Also improve renderer and context cleanup Change-Id: I8fa596b95f6ff20d53c950a34b5c28513acbc18f Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r--src/datavisualization/engine/abstract3dcontroller.cpp10
-rw-r--r--src/datavisualization/engine/abstract3dcontroller_p.h1
-rw-r--r--src/datavisualization/engine/qabstract3dgraph.cpp3
3 files changed, 12 insertions, 2 deletions
diff --git a/src/datavisualization/engine/abstract3dcontroller.cpp b/src/datavisualization/engine/abstract3dcontroller.cpp
index d2b59c58..acb63f0a 100644
--- a/src/datavisualization/engine/abstract3dcontroller.cpp
+++ b/src/datavisualization/engine/abstract3dcontroller.cpp
@@ -81,13 +81,19 @@ Abstract3DController::Abstract3DController(QRect initialViewport, Q3DScene *scen
Abstract3DController::~Abstract3DController()
{
+ destroyRenderer();
+ delete m_scene;
+ delete m_themeManager;
+}
+
+void Abstract3DController::destroyRenderer()
+{
// Renderer can be in another thread, don't delete it directly in that case
if (m_renderer && m_renderer->thread() != QThread::currentThread())
m_renderer->deleteLater();
else
delete m_renderer;
- delete m_scene;
- delete m_themeManager;
+ m_renderer = 0;
}
/**
diff --git a/src/datavisualization/engine/abstract3dcontroller_p.h b/src/datavisualization/engine/abstract3dcontroller_p.h
index f9b6588d..5bae17d6 100644
--- a/src/datavisualization/engine/abstract3dcontroller_p.h
+++ b/src/datavisualization/engine/abstract3dcontroller_p.h
@@ -161,6 +161,7 @@ public:
virtual ~Abstract3DController();
inline bool isInitialized() { return (m_renderer != 0); }
+ virtual void destroyRenderer();
virtual void synchDataToRenderer();
virtual void render(const GLuint defaultFboHandle = 0);
virtual void initializeOpenGL() = 0;
diff --git a/src/datavisualization/engine/qabstract3dgraph.cpp b/src/datavisualization/engine/qabstract3dgraph.cpp
index 1551c639..cce2c235 100644
--- a/src/datavisualization/engine/qabstract3dgraph.cpp
+++ b/src/datavisualization/engine/qabstract3dgraph.cpp
@@ -450,6 +450,9 @@ QAbstract3DGraphPrivate::QAbstract3DGraphPrivate(QAbstract3DGraph *q)
QAbstract3DGraphPrivate::~QAbstract3DGraphPrivate()
{
+ if (m_context)
+ m_context->makeCurrent(q_ptr);
+
delete m_visualController;
}