diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-12 09:53:52 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2013-09-12 10:31:27 +0300 |
commit | 7f8966b035c9fd73d2cde04521c92892feefc0f9 (patch) | |
tree | 55fee47c70805ff6bd4df1a8cd7693ea34132b27 /src/datavisualization/engine/abstract3drenderer.cpp | |
parent | 1262c6562d7264c9fe4caf2f433615348c0f2ef8 (diff) |
Fix Q3DScene caching
Task-number: QTRD-2258
Change-Id: Ifce23dca40566e75398e00975e8b2159b325739e
Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Reviewed-by: Pasi Keränen <pasi.keranen@digia.com>
Diffstat (limited to 'src/datavisualization/engine/abstract3drenderer.cpp')
-rw-r--r-- | src/datavisualization/engine/abstract3drenderer.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index 7e5962cc..4a23a1a5 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -20,8 +20,9 @@ #include "q3dvalueaxis.h" #include "texturehelper_p.h" #include "utils_p.h" -#include "q3dscene.h" -#include "q3dcamera.h" +#include "q3dscene_p.h" +#include "q3dcamera_p.h" +#include "q3dlight_p.h" QT_DATAVISUALIZATION_BEGIN_NAMESPACE @@ -39,7 +40,7 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller) m_cachedSelectionMode(QDataVis::ModeNone), m_cachedIsGridEnabled(false), m_cachedIsBackgroundEnabled(false), - m_cachedScene(0) + m_cachedScene(new Q3DScene()) #ifdef DISPLAY_RENDER_SPEED , m_isFirstFrame(true), m_numFrames(0) @@ -47,6 +48,8 @@ Abstract3DRenderer::Abstract3DRenderer(Abstract3DController *controller) { QObject::connect(m_drawer, &Drawer::drawerChanged, this, &Abstract3DRenderer::updateTextures); + QObject::connect(this, &Abstract3DRenderer::needRender, m_controller, + &Abstract3DController::needRender, Qt::QueuedConnection); } Abstract3DRenderer::~Abstract3DRenderer() @@ -150,10 +153,10 @@ void Abstract3DRenderer::updateTheme(Theme theme) void Abstract3DRenderer::updateScene(Q3DScene *scene) { - // Make a copy of the scene to renderer's cache. - Q3DScene *newScene = scene->clone(); - delete m_cachedScene; - m_cachedScene = newScene; + // Synchronize the controller scene to that of the renderer, and vice versa. + // Controller scene had priority if both have changed same values. + scene->d_ptr->sync(*m_cachedScene->d_ptr); + m_cachedScene->d_ptr->sync(*scene->d_ptr); } void Abstract3DRenderer::handleShadowQualityChange() |