From 149c93ced7fdfa7af2192d4999837a74c268cc25 Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Tue, 25 Feb 2014 12:01:21 +0200 Subject: Fix Valgrind found issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Iccacab527abf745e7ccd1e562ff9ea5dea4c8005 Reviewed-by: Tomi Korpipää --- src/datavisualization/engine/seriesrendercache.cpp | 10 ++++--- src/datavisualization/engine/seriesrendercache_p.h | 2 +- src/datavisualization/engine/surface3drenderer.cpp | 9 +++--- .../engine/surfaceseriesrendercache.cpp | 33 ++++++++++++++-------- .../engine/surfaceseriesrendercache_p.h | 2 +- .../declarativerendernode.cpp | 1 + tests/multigraphs/data.cpp | 1 + tests/scattertest/scatterchart.cpp | 28 +++++++++--------- tests/surfacetest/main.cpp | 28 +++++++++--------- 9 files changed, 64 insertions(+), 50 deletions(-) diff --git a/src/datavisualization/engine/seriesrendercache.cpp b/src/datavisualization/engine/seriesrendercache.cpp index 1c7e5e80..896b3b28 100644 --- a/src/datavisualization/engine/seriesrendercache.cpp +++ b/src/datavisualization/engine/seriesrendercache.cpp @@ -185,10 +185,12 @@ void SeriesRenderCache::populate(QAbstract3DSeries *series, Abstract3DRenderer * void SeriesRenderCache::cleanup(TextureHelper *texHelper) { delete m_object; - texHelper->deleteTexture(&m_baseUniformTexture); - texHelper->deleteTexture(&m_baseGradientTexture); - texHelper->deleteTexture(&m_singleHighlightGradientTexture); - texHelper->deleteTexture(&m_multiHighlightGradientTexture); + if (QOpenGLContext::currentContext()) { + texHelper->deleteTexture(&m_baseUniformTexture); + texHelper->deleteTexture(&m_baseGradientTexture); + texHelper->deleteTexture(&m_singleHighlightGradientTexture); + texHelper->deleteTexture(&m_multiHighlightGradientTexture); + } } QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualization/engine/seriesrendercache_p.h b/src/datavisualization/engine/seriesrendercache_p.h index 7994339a..77e050b0 100644 --- a/src/datavisualization/engine/seriesrendercache_p.h +++ b/src/datavisualization/engine/seriesrendercache_p.h @@ -45,7 +45,7 @@ public: virtual ~SeriesRenderCache(); void populate(QAbstract3DSeries *series, Abstract3DRenderer *renderer); - void cleanup(TextureHelper *texHelper); + virtual void cleanup(TextureHelper *texHelper); // NOTE: Series pointer can only be used to access the series when syncing with controller. // It is not guaranteed to be valid while rendering and should only be used as an identifier. diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index 47978170..ffcdeb7a 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -119,10 +119,6 @@ Surface3DRenderer::~Surface3DRenderer() m_textureHelper->deleteTexture(&m_depthTexture); m_textureHelper->deleteTexture(&m_depthModelTexture); m_textureHelper->deleteTexture(&m_selectionResultTexture); - foreach (SurfaceSeriesRenderCache *cache, m_renderCacheList) { - GLuint texture = cache->selectionTexture(); - m_textureHelper->deleteTexture(&texture); - } } delete m_depthShader; delete m_backgroundShader; @@ -136,8 +132,10 @@ Surface3DRenderer::~Surface3DRenderer() delete m_gridLineObj; delete m_labelObj; - foreach (SurfaceSeriesRenderCache *cache, m_renderCacheList) + foreach (SurfaceSeriesRenderCache *cache, m_renderCacheList) { + cache->cleanup(m_textureHelper); delete cache; + } m_renderCacheList.clear(); } @@ -272,6 +270,7 @@ void Surface3DRenderer::updateSeries(const QList &seriesLis updateSelectedPoint(Surface3DController::invalidSelectionPosition(), 0); m_renderCacheList.remove(cache->series()); + cache->cleanup(m_textureHelper); delete cache; m_selectionTexturesDirty = true; diff --git a/src/datavisualization/engine/surfaceseriesrendercache.cpp b/src/datavisualization/engine/surfaceseriesrendercache.cpp index bc261f05..ba25d71d 100644 --- a/src/datavisualization/engine/surfaceseriesrendercache.cpp +++ b/src/datavisualization/engine/surfaceseriesrendercache.cpp @@ -50,18 +50,6 @@ SurfaceSeriesRenderCache::SurfaceSeriesRenderCache() SurfaceSeriesRenderCache::~SurfaceSeriesRenderCache() { - delete m_surfaceObj; - delete m_sliceSurfaceObj; - for (int i = 0; i < m_dataArray.size(); i++) - delete m_dataArray.at(i); - m_dataArray.clear(); - - for (int i = 0; i < m_sliceDataArray.size(); i++) - delete m_sliceDataArray.at(i); - m_sliceDataArray.clear(); - - delete m_sliceSelectionPointer; - delete m_mainSelectionPointer; } void SurfaceSeriesRenderCache::populate(QSurface3DSeries *series, Abstract3DRenderer *renderer) @@ -79,4 +67,25 @@ void SurfaceSeriesRenderCache::populate(QSurface3DSeries *series, Abstract3DRend } } +void SurfaceSeriesRenderCache::cleanup(TextureHelper *texHelper) +{ + if (QOpenGLContext::currentContext()) + texHelper->deleteTexture(&m_selectionTexture); + + delete m_surfaceObj; + delete m_sliceSurfaceObj; + for (int i = 0; i < m_dataArray.size(); i++) + delete m_dataArray.at(i); + m_dataArray.clear(); + + for (int i = 0; i < m_sliceDataArray.size(); i++) + delete m_sliceDataArray.at(i); + m_sliceDataArray.clear(); + + delete m_sliceSelectionPointer; + delete m_mainSelectionPointer; + + SeriesRenderCache::cleanup(texHelper); +} + QT_END_NAMESPACE_DATAVISUALIZATION diff --git a/src/datavisualization/engine/surfaceseriesrendercache_p.h b/src/datavisualization/engine/surfaceseriesrendercache_p.h index e44691fd..2dda0670 100644 --- a/src/datavisualization/engine/surfaceseriesrendercache_p.h +++ b/src/datavisualization/engine/surfaceseriesrendercache_p.h @@ -51,7 +51,7 @@ public: virtual ~SurfaceSeriesRenderCache(); void populate(QSurface3DSeries *series, Abstract3DRenderer *renderer); - void cleanup(TextureHelper *texHelper); + virtual void cleanup(TextureHelper *texHelper); inline bool surfaceVisible() const { return m_surfaceVisible; } inline bool surfaceGridVisible() const { return m_surfaceGridVisible; } diff --git a/src/datavisualizationqml2/declarativerendernode.cpp b/src/datavisualizationqml2/declarativerendernode.cpp index 00e4caa5..1f6d4b56 100644 --- a/src/datavisualizationqml2/declarativerendernode.cpp +++ b/src/datavisualizationqml2/declarativerendernode.cpp @@ -46,6 +46,7 @@ DeclarativeRenderNode::~DeclarativeRenderNode() { delete m_fbo; delete m_multisampledFBO; + delete m_texture; } void DeclarativeRenderNode::setSize(const QSize &size) diff --git a/tests/multigraphs/data.cpp b/tests/multigraphs/data.cpp index 1164a2f1..9fd27b96 100644 --- a/tests/multigraphs/data.cpp +++ b/tests/multigraphs/data.cpp @@ -149,6 +149,7 @@ void Data::setResolution(int selection) if (m_mode == Scatter) { m_resize = true; m_resolution /= 3; + delete m_scatterDataArray; m_scatterDataArray = new QScatterDataArray; m_scatterDataArray->resize(m_resolution.width() * m_resolution.height()); } else if (m_mode == Bars) { diff --git a/tests/scattertest/scatterchart.cpp b/tests/scattertest/scatterchart.cpp index 6ee7711e..aa0c5454 100644 --- a/tests/scattertest/scatterchart.cpp +++ b/tests/scattertest/scatterchart.cpp @@ -433,19 +433,21 @@ void ScatterDataModifier::setGradient() singleHighlightGradient.setColorAt(0.25, Qt::yellow); singleHighlightGradient.setColorAt(0.0, Qt::white); - m_targetSeries->setBaseColor(Qt::green); - m_targetSeries->setSingleHighlightColor(Qt::white); - - m_targetSeries->setBaseGradient(baseGradient); - m_targetSeries->setSingleHighlightGradient(singleHighlightGradient); - - Q3DTheme::ColorStyle oldStyle = m_targetSeries->colorStyle(); - if (oldStyle == Q3DTheme::ColorStyleUniform) - m_targetSeries->setColorStyle(Q3DTheme::ColorStyleObjectGradient); - else if (oldStyle == Q3DTheme::ColorStyleObjectGradient) - m_targetSeries->setColorStyle(Q3DTheme::ColorStyleRangeGradient); - if (oldStyle == Q3DTheme::ColorStyleRangeGradient) - m_targetSeries->setColorStyle(Q3DTheme::ColorStyleUniform); + if (m_targetSeries) { + m_targetSeries->setBaseColor(Qt::green); + m_targetSeries->setSingleHighlightColor(Qt::white); + + m_targetSeries->setBaseGradient(baseGradient); + m_targetSeries->setSingleHighlightGradient(singleHighlightGradient); + + Q3DTheme::ColorStyle oldStyle = m_targetSeries->colorStyle(); + if (oldStyle == Q3DTheme::ColorStyleUniform) + m_targetSeries->setColorStyle(Q3DTheme::ColorStyleObjectGradient); + else if (oldStyle == Q3DTheme::ColorStyleObjectGradient) + m_targetSeries->setColorStyle(Q3DTheme::ColorStyleRangeGradient); + if (oldStyle == Q3DTheme::ColorStyleRangeGradient) + m_targetSeries->setColorStyle(Q3DTheme::ColorStyleUniform); + } } void ScatterDataModifier::addSeries() diff --git a/tests/surfacetest/main.cpp b/tests/surfacetest/main.cpp index 5ebd1a33..99c60893 100644 --- a/tests/surfacetest/main.cpp +++ b/tests/surfacetest/main.cpp @@ -382,23 +382,23 @@ int main(int argc, char *argv[]) vLayout->addWidget(new QLabel(QStringLiteral("Adjust axis minimum"))); vLayout->addWidget(axisMinSliderX); vLayout->addWidget(axisMinSliderZ); - vLayout->addWidget(colorPB); - vLayout->addWidget(new QLabel(QStringLiteral("Change font"))); - vLayout->addWidget(fontList); - vLayout->addWidget(labelButton); - vLayout->addWidget(meshButton); - vLayout->addWidget(new QLabel(QStringLiteral("Change theme"))); - vLayout->addWidget(themeList); - vLayout->addWidget(new QLabel(QStringLiteral("Adjust shadow quality"))); - vLayout->addWidget(shadowQuality); - vLayout->addWidget(new QLabel(QStringLiteral("Selection Mode"))); - vLayout->addWidget(selectionMode); + vLayout2->addWidget(new QLabel(QStringLiteral("Change font"))); + vLayout2->addWidget(fontList); + vLayout2->addWidget(labelButton); + vLayout2->addWidget(meshButton); + vLayout2->addWidget(new QLabel(QStringLiteral("Change theme"))); + vLayout2->addWidget(themeList); + vLayout2->addWidget(new QLabel(QStringLiteral("Adjust shadow quality"))); + vLayout2->addWidget(shadowQuality); + vLayout2->addWidget(new QLabel(QStringLiteral("Selection Mode"))); + vLayout2->addWidget(selectionMode); #ifndef MULTI_SERIES - vLayout->addWidget(selectButton); - vLayout->addWidget(selectionInfoLabel); - vLayout->addWidget(flipViewsButton); + vLayout2->addWidget(selectButton); + vLayout2->addWidget(selectionInfoLabel); + vLayout2->addWidget(flipViewsButton); #endif + vLayout2->addWidget(colorPB); vLayout2->addWidget(changeRowButton); vLayout2->addWidget(changeRowsButton); vLayout2->addWidget(changeMultipleRowsButton); -- cgit v1.2.3