diff options
author | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-05-21 13:37:11 +0300 |
---|---|---|
committer | Miikka Heikkinen <miikka.heikkinen@digia.com> | 2014-05-22 08:03:06 +0300 |
commit | cb79f11be1c0c379a1eccea62606a58b73442f2f (patch) | |
tree | 0e8409d491897b4fc9d1929ea1e13e575c6b7198 /src/datavisualization/engine | |
parent | 37a82fbeb7aa59260fe5f31b62228914ee4a44a3 (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.cpp | 1 | ||||
-rw-r--r-- | src/datavisualization/engine/bars3drenderer.cpp | 24 | ||||
-rw-r--r-- | src/datavisualization/engine/bars3drenderer_p.h | 6 | ||||
-rw-r--r-- | src/datavisualization/engine/scatter3drenderer.cpp | 24 | ||||
-rw-r--r-- | src/datavisualization/engine/scatter3drenderer_p.h | 6 | ||||
-rw-r--r-- | src/datavisualization/engine/selectionpointer.cpp | 15 | ||||
-rw-r--r-- | src/datavisualization/engine/selectionpointer_p.h | 4 | ||||
-rw-r--r-- | src/datavisualization/engine/seriesrendercache.cpp | 10 | ||||
-rw-r--r-- | src/datavisualization/engine/seriesrendercache_p.h | 2 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer.cpp | 26 | ||||
-rw-r--r-- | src/datavisualization/engine/surface3drenderer_p.h | 6 |
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; |