summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine
diff options
context:
space:
mode:
authorMiikka Heikkinen <miikka.heikkinen@digia.com>2014-05-21 13:37:11 +0300
committerMiikka Heikkinen <miikka.heikkinen@digia.com>2014-05-22 08:03:06 +0300
commitcb79f11be1c0c379a1eccea62606a58b73442f2f (patch)
tree0e8409d491897b4fc9d1929ea1e13e575c6b7198 /src/datavisualization/engine
parent37a82fbeb7aa59260fe5f31b62228914ee4a44a3 (diff)
Cache ObjectHelper instances
Task-number: QTRD-2792 Change-Id: I90d83bd9b73a0f337fd26f1b92000e72b3ec0607 Reviewed-by: Tomi Korpipää <tomi.korpipaa@digia.com>
Diffstat (limited to 'src/datavisualization/engine')
-rw-r--r--src/datavisualization/engine/abstract3drenderer.cpp1
-rw-r--r--src/datavisualization/engine/bars3drenderer.cpp24
-rw-r--r--src/datavisualization/engine/bars3drenderer_p.h6
-rw-r--r--src/datavisualization/engine/scatter3drenderer.cpp24
-rw-r--r--src/datavisualization/engine/scatter3drenderer_p.h6
-rw-r--r--src/datavisualization/engine/selectionpointer.cpp15
-rw-r--r--src/datavisualization/engine/selectionpointer_p.h4
-rw-r--r--src/datavisualization/engine/seriesrendercache.cpp10
-rw-r--r--src/datavisualization/engine/seriesrendercache_p.h2
-rw-r--r--src/datavisualization/engine/surface3drenderer.cpp26
-rw-r--r--src/datavisualization/engine/surface3drenderer_p.h6
11 files changed, 49 insertions, 75 deletions
diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp
index 988ea21e..8c2e9578 100644
--- a/src/datavisualization/engine/abstract3drenderer.cpp
+++ b/src/datavisualization/engine/abstract3drenderer.cpp
@@ -570,6 +570,7 @@ QVector4D Abstract3DRenderer::indexToSelectionColor(GLint index)
CustomRenderItem *Abstract3DRenderer::addCustomItem(QCustom3DItem *item)
{
CustomRenderItem *newItem = new CustomRenderItem();
+ newItem->setRenderer(this);
newItem->setItemPointer(item); // Store pointer for render item updates
newItem->setMesh(item->meshFile());
newItem->setScaling(item->scaling());
diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp
index 4dcf296f..ec13525b 100644
--- a/src/datavisualization/engine/bars3drenderer.cpp
+++ b/src/datavisualization/engine/bars3drenderer.cpp
@@ -120,9 +120,9 @@ Bars3DRenderer::~Bars3DRenderer()
delete m_depthShader;
delete m_selectionShader;
delete m_backgroundShader;
- delete m_backgroundObj;
- delete m_gridLineObj;
- delete m_labelObj;
+ ObjectHelper::releaseObjectHelper(this, m_backgroundObj);
+ ObjectHelper::releaseObjectHelper(this, m_gridLineObj);
+ ObjectHelper::releaseObjectHelper(this, m_labelObj);
delete m_labelShader;
}
@@ -2336,26 +2336,20 @@ void Bars3DRenderer::updateShadowQuality(QAbstract3DGraph::ShadowQuality quality
void Bars3DRenderer::loadBackgroundMesh()
{
- if (m_backgroundObj)
- delete m_backgroundObj;
- m_backgroundObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/negativeBackground"));
- m_backgroundObj->load();
+ ObjectHelper::resetObjectHelper(this, m_backgroundObj,
+ QStringLiteral(":/defaultMeshes/negativeBackground"));
}
void Bars3DRenderer::loadGridLineMesh()
{
- if (m_gridLineObj)
- delete m_gridLineObj;
- m_gridLineObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/plane"));
- m_gridLineObj->load();
+ ObjectHelper::resetObjectHelper(this, m_gridLineObj,
+ QStringLiteral(":/defaultMeshes/plane"));
}
void Bars3DRenderer::loadLabelMesh()
{
- if (m_labelObj)
- delete m_labelObj;
- m_labelObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/plane"));
- m_labelObj->load();
+ ObjectHelper::resetObjectHelper(this, m_labelObj,
+ QStringLiteral(":/defaultMeshes/plane"));
}
void Bars3DRenderer::updateTextures()
diff --git a/src/datavisualization/engine/bars3drenderer_p.h b/src/datavisualization/engine/bars3drenderer_p.h
index 2e9ec0de..d62171eb 100644
--- a/src/datavisualization/engine/bars3drenderer_p.h
+++ b/src/datavisualization/engine/bars3drenderer_p.h
@@ -73,9 +73,9 @@ private:
ShaderHelper *m_selectionShader;
ShaderHelper *m_backgroundShader;
ShaderHelper *m_labelShader;
- ObjectHelper *m_backgroundObj;
- ObjectHelper *m_gridLineObj;
- ObjectHelper *m_labelObj;
+ ObjectHelper *m_backgroundObj; // Shared reference
+ ObjectHelper *m_gridLineObj; // Shared reference
+ ObjectHelper *m_labelObj; // Shared reference
GLuint m_bgrTexture;
GLuint m_depthTexture;
GLuint m_selectionTexture;
diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp
index acdd3cb8..3c1adfa0 100644
--- a/src/datavisualization/engine/scatter3drenderer.cpp
+++ b/src/datavisualization/engine/scatter3drenderer.cpp
@@ -118,11 +118,11 @@ Scatter3DRenderer::~Scatter3DRenderer()
delete m_selectionShader;
delete m_backgroundShader;
delete m_labelShader;
- delete m_backgroundObj;
+ ObjectHelper::releaseObjectHelper(this, m_backgroundObj);
#if !defined(QT_OPENGL_ES_2)
- delete m_gridLineObj;
+ ObjectHelper::releaseObjectHelper(this, m_gridLineObj);
#endif
- delete m_labelObj;
+ ObjectHelper::releaseObjectHelper(this, m_labelObj);
}
void Scatter3DRenderer::initializeOpenGL()
@@ -1731,28 +1731,22 @@ void Scatter3DRenderer::updateShadowQuality(QAbstract3DGraph::ShadowQuality qual
void Scatter3DRenderer::loadBackgroundMesh()
{
- if (m_backgroundObj)
- delete m_backgroundObj;
- m_backgroundObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/background"));
- m_backgroundObj->load();
+ ObjectHelper::resetObjectHelper(this, m_backgroundObj,
+ QStringLiteral(":/defaultMeshes/background"));
}
#if !(defined QT_OPENGL_ES_2)
void Scatter3DRenderer::loadGridLineMesh()
{
- if (m_gridLineObj)
- delete m_gridLineObj;
- m_gridLineObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/plane"));
- m_gridLineObj->load();
+ ObjectHelper::resetObjectHelper(this, m_gridLineObj,
+ QStringLiteral(":/defaultMeshes/plane"));
}
#endif
void Scatter3DRenderer::loadLabelMesh()
{
- if (m_labelObj)
- delete m_labelObj;
- m_labelObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/plane"));
- m_labelObj->load();
+ ObjectHelper::resetObjectHelper(this, m_labelObj,
+ QStringLiteral(":/defaultMeshes/plane"));
}
void Scatter3DRenderer::updateTextures()
diff --git a/src/datavisualization/engine/scatter3drenderer_p.h b/src/datavisualization/engine/scatter3drenderer_p.h
index 0b58102b..b6a110ff 100644
--- a/src/datavisualization/engine/scatter3drenderer_p.h
+++ b/src/datavisualization/engine/scatter3drenderer_p.h
@@ -68,11 +68,11 @@ private:
ShaderHelper *m_selectionShader;
ShaderHelper *m_backgroundShader;
ShaderHelper *m_labelShader;
- ObjectHelper *m_backgroundObj;
+ ObjectHelper *m_backgroundObj; // Shared reference
#if !(defined QT_OPENGL_ES_2)
- ObjectHelper *m_gridLineObj;
+ ObjectHelper *m_gridLineObj; // Shared reference
#endif
- ObjectHelper *m_labelObj;
+ ObjectHelper *m_labelObj; // Shared reference
GLuint m_bgrTexture;
GLuint m_depthTexture;
GLuint m_selectionTexture;
diff --git a/src/datavisualization/engine/selectionpointer.cpp b/src/datavisualization/engine/selectionpointer.cpp
index 646212f0..fe9325cf 100644
--- a/src/datavisualization/engine/selectionpointer.cpp
+++ b/src/datavisualization/engine/selectionpointer.cpp
@@ -54,7 +54,6 @@ SelectionPointer::~SelectionPointer()
{
delete m_labelShader;
delete m_pointShader;
- delete m_labelObj;
delete m_textureHelper;
}
@@ -66,7 +65,6 @@ void SelectionPointer::initializeOpenGL()
m_drawer->initializeOpenGL();
initShaders();
- loadLabelMesh();
}
void SelectionPointer::updateScene(Q3DScene *scene)
@@ -235,6 +233,11 @@ void SelectionPointer::setPointerObject(ObjectHelper *object)
m_pointObj = object;
}
+void SelectionPointer::setLabelObject(ObjectHelper *object)
+{
+ m_labelObj = object;
+}
+
void SelectionPointer::handleDrawerChange()
{
m_cachedTheme = m_drawer->theme();
@@ -269,12 +272,4 @@ void SelectionPointer::initShaders()
}
-void SelectionPointer::loadLabelMesh()
-{
- if (m_labelObj)
- delete m_labelObj;
- m_labelObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/plane"));
- m_labelObj->load();
-}
-
QT_END_NAMESPACE_DATAVISUALIZATION
diff --git a/src/datavisualization/engine/selectionpointer_p.h b/src/datavisualization/engine/selectionpointer_p.h
index 03e09cca..f33cd6cd 100644
--- a/src/datavisualization/engine/selectionpointer_p.h
+++ b/src/datavisualization/engine/selectionpointer_p.h
@@ -53,6 +53,7 @@ public:
void setPosition(const QVector3D &position);
void setLabel(const QString &label);
void setPointerObject(ObjectHelper *object);
+ void setLabelObject(ObjectHelper *object);
void handleDrawerChange();
void updateBoundingRect(const QRect &rect);
void updateScene(Q3DScene *scene);
@@ -63,12 +64,11 @@ public:
private:
void initializeOpenGL();
void initShaders();
- void loadLabelMesh();
private:
ShaderHelper *m_labelShader;
ShaderHelper *m_pointShader;
- ObjectHelper *m_labelObj;
+ ObjectHelper *m_labelObj; // Not owned
ObjectHelper *m_pointObj; // Not owned
TextureHelper *m_textureHelper;
Q3DTheme *m_cachedTheme;
diff --git a/src/datavisualization/engine/seriesrendercache.cpp b/src/datavisualization/engine/seriesrendercache.cpp
index e674ae43..e4f221f8 100644
--- a/src/datavisualization/engine/seriesrendercache.cpp
+++ b/src/datavisualization/engine/seriesrendercache.cpp
@@ -109,13 +109,7 @@ void SeriesRenderCache::populate(bool newSeries)
m_renderer->fixMeshFileName(meshFileName, m_mesh);
}
- delete m_object;
- if (meshFileName.isEmpty()) {
- m_object = 0;
- } else {
- m_object = new ObjectHelper(meshFileName);
- m_object->load();
- }
+ ObjectHelper::resetObjectHelper(m_renderer, m_object, meshFileName);
}
if (newSeries || changeTracker.meshRotationChanged) {
@@ -193,7 +187,7 @@ void SeriesRenderCache::populate(bool newSeries)
void SeriesRenderCache::cleanup(TextureHelper *texHelper)
{
- delete m_object;
+ ObjectHelper::releaseObjectHelper(m_renderer, m_object);
if (QOpenGLContext::currentContext()) {
texHelper->deleteTexture(&m_baseUniformTexture);
texHelper->deleteTexture(&m_baseGradientTexture);
diff --git a/src/datavisualization/engine/seriesrendercache_p.h b/src/datavisualization/engine/seriesrendercache_p.h
index 3cd94487..96b61b87 100644
--- a/src/datavisualization/engine/seriesrendercache_p.h
+++ b/src/datavisualization/engine/seriesrendercache_p.h
@@ -74,7 +74,7 @@ public:
protected:
QAbstract3DSeries *m_series;
- ObjectHelper *m_object;
+ ObjectHelper *m_object; // Shared reference
QAbstract3DSeries::Mesh m_mesh;
QQuaternion m_meshRotation;
diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp
index 4b5464d5..1f3a6932 100644
--- a/src/datavisualization/engine/surface3drenderer.cpp
+++ b/src/datavisualization/engine/surface3drenderer.cpp
@@ -142,11 +142,11 @@ Surface3DRenderer::~Surface3DRenderer()
delete m_surfaceSliceSmoothShader;
delete m_labelShader;
- delete m_backgroundObj;
+ ObjectHelper::releaseObjectHelper(this, m_backgroundObj);
#if !defined(QT_OPENGL_ES_2)
- delete m_gridLineObj;
+ ObjectHelper::releaseObjectHelper(this, m_gridLineObj);
#endif
- delete m_labelObj;
+ ObjectHelper::releaseObjectHelper(this, m_labelObj);
}
void Surface3DRenderer::initializeOpenGL()
@@ -2311,19 +2311,15 @@ void Surface3DRenderer::resetClickedStatus()
void Surface3DRenderer::loadBackgroundMesh()
{
- if (m_backgroundObj)
- delete m_backgroundObj;
- m_backgroundObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/background"));
- m_backgroundObj->load();
+ ObjectHelper::resetObjectHelper(this, m_backgroundObj,
+ QStringLiteral(":/defaultMeshes/background"));
}
#if !(defined QT_OPENGL_ES_2)
void Surface3DRenderer::loadGridLineMesh()
{
- if (m_gridLineObj)
- delete m_gridLineObj;
- m_gridLineObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/plane"));
- m_gridLineObj->load();
+ ObjectHelper::resetObjectHelper(this, m_gridLineObj,
+ QStringLiteral(":/defaultMeshes/plane"));
}
#endif
@@ -2407,6 +2403,7 @@ void Surface3DRenderer::updateSelectionPoint(SurfaceSeriesRenderCache *cache, co
slicePointer->setPosition((subPosFront + subPosBack) / 2.0f);
slicePointer->setLabel(selectionLabel);
slicePointer->setPointerObject(cache->object());
+ slicePointer->setLabelObject(m_labelObj);
slicePointer->setHighlightColor(cache->singleHighlightColor());
slicePointer->updateScene(m_cachedScene);
slicePointer->setRotation(cache->meshRotation());
@@ -2420,6 +2417,7 @@ void Surface3DRenderer::updateSelectionPoint(SurfaceSeriesRenderCache *cache, co
mainPointer->setPosition(mainPos);
mainPointer->setLabel(selectionLabel);
mainPointer->setPointerObject(cache->object());
+ mainPointer->setLabelObject(m_labelObj);
mainPointer->setHighlightColor(cache->singleHighlightColor());
mainPointer->updateScene(m_cachedScene);
mainPointer->setRotation(cache->meshRotation());
@@ -2548,10 +2546,8 @@ void Surface3DRenderer::updateSlicingActive(bool isSlicing)
void Surface3DRenderer::loadLabelMesh()
{
- if (m_labelObj)
- delete m_labelObj;
- m_labelObj = new ObjectHelper(QStringLiteral(":/defaultMeshes/plane"));
- m_labelObj->load();
+ ObjectHelper::resetObjectHelper(this, m_labelObj,
+ QStringLiteral(":/defaultMeshes/plane"));
}
void Surface3DRenderer::initShaders(const QString &vertexShader, const QString &fragmentShader)
diff --git a/src/datavisualization/engine/surface3drenderer_p.h b/src/datavisualization/engine/surface3drenderer_p.h
index 7c3e461d..e6c66a90 100644
--- a/src/datavisualization/engine/surface3drenderer_p.h
+++ b/src/datavisualization/engine/surface3drenderer_p.h
@@ -73,11 +73,11 @@ private:
GLfloat m_maxVisibleRowValue;
GLfloat m_visibleColumnRange;
GLfloat m_visibleRowRange;
- ObjectHelper *m_backgroundObj;
+ ObjectHelper *m_backgroundObj; // Shared reference
#if !(defined QT_OPENGL_ES_2)
- ObjectHelper *m_gridLineObj;
+ ObjectHelper *m_gridLineObj; // Shared reference
#endif
- ObjectHelper *m_labelObj;
+ ObjectHelper *m_labelObj; // Shared reference
GLuint m_depthTexture;
GLuint m_depthModelTexture;
GLuint m_depthFrameBuffer;