diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-02-27 11:23:17 +0200 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-02-28 11:05:25 +0200 |
commit | 86b4e19ee160ee3e84210595db5e6af08a8b9e46 (patch) | |
tree | e1f7f1d8dbaa7cc520f7efc8b45868d29aa6c71f /src/datavisualization/engine | |
parent | 34a7223467a45e33c1b344f1e1880bc818b66b27 (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.cpp | 10 | ||||
-rw-r--r-- | src/datavisualization/engine/abstract3dcontroller_p.h | 1 | ||||
-rw-r--r-- | src/datavisualization/engine/qabstract3dgraph.cpp | 3 |
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; } |