From d5fe794178f755a259e7680bbf11571785abe14d Mon Sep 17 00:00:00 2001 From: Miikka Heikkinen Date: Mon, 28 Apr 2014 09:31:10 +0300 Subject: Fix texture cleanup. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Make deleteTexture also zero the pointer and do the check if deletion is needed, as those are required anyway on the caller side in most cases. Change-Id: Ia12102c97a647127230db2518c32f81322ce6743 Reviewed-by: Tomi Korpipää --- src/datavisualization/data/customdataitem.cpp | 7 +++---- src/datavisualization/engine/abstract3drenderer.cpp | 11 ++--------- src/datavisualization/engine/bars3drenderer.cpp | 10 ++-------- src/datavisualization/engine/scatter3drenderer.cpp | 10 ++-------- src/datavisualization/engine/surface3drenderer.cpp | 15 +++------------ src/datavisualization/utils/texturehelper.cpp | 7 +++++-- src/datavisualization/utils/texturehelper_p.h | 2 +- 7 files changed, 18 insertions(+), 44 deletions(-) diff --git a/src/datavisualization/data/customdataitem.cpp b/src/datavisualization/data/customdataitem.cpp index 8d3a033d..d5964c62 100644 --- a/src/datavisualization/data/customdataitem.cpp +++ b/src/datavisualization/data/customdataitem.cpp @@ -31,15 +31,14 @@ CustomDataItem::CustomDataItem() : CustomDataItem::~CustomDataItem() { - if (m_texture) - m_textureHelper->deleteTexture(&m_texture); + m_textureHelper->deleteTexture(&m_texture); delete m_textureHelper; } void CustomDataItem::setTextureImage(const QImage &textureImage) { - if (m_texture) - m_textureHelper->deleteTexture(&m_texture); + m_textureHelper->deleteTexture(&m_texture); + // Make a texture out of the image if (!textureImage.isNull()) m_texture = m_textureHelper->create2DTexture(textureImage, true, true, true); diff --git a/src/datavisualization/engine/abstract3drenderer.cpp b/src/datavisualization/engine/abstract3drenderer.cpp index 458630ed..bd19959b 100644 --- a/src/datavisualization/engine/abstract3drenderer.cpp +++ b/src/datavisualization/engine/abstract3drenderer.cpp @@ -475,11 +475,7 @@ void Abstract3DRenderer::lowerShadowQuality() void Abstract3DRenderer::generateBaseColorTexture(const QColor &color, GLuint *texture) { - if (*texture) { - m_textureHelper->deleteTexture(texture); - *texture = 0; - } - + m_textureHelper->deleteTexture(texture); *texture = m_textureHelper->createUniformTexture(color); } @@ -489,10 +485,7 @@ void Abstract3DRenderer::fixGradientAndGenerateTexture(QLinearGradient *gradient gradient->setStart(qreal(gradientTextureWidth), qreal(gradientTextureHeight)); gradient->setFinalStop(0.0, 0.0); - if (*gradientTexture) { - m_textureHelper->deleteTexture(gradientTexture); - *gradientTexture = 0; - } + m_textureHelper->deleteTexture(gradientTexture); *gradientTexture = m_textureHelper->createGradientTexture(*gradient); } diff --git a/src/datavisualization/engine/bars3drenderer.cpp b/src/datavisualization/engine/bars3drenderer.cpp index e41d35b0..01fcebb2 100644 --- a/src/datavisualization/engine/bars3drenderer.cpp +++ b/src/datavisualization/engine/bars3drenderer.cpp @@ -2267,10 +2267,7 @@ void Bars3DRenderer::initSelectionShader() void Bars3DRenderer::initSelectionBuffer() { - if (m_selectionTexture) { - m_textureHelper->deleteTexture(&m_selectionTexture); - m_selectionTexture = 0; - } + m_textureHelper->deleteTexture(&m_selectionTexture); if (m_cachedIsSlicingActivated || m_primarySubViewport.size().isEmpty()) return; @@ -2292,10 +2289,7 @@ void Bars3DRenderer::initDepthShader() void Bars3DRenderer::updateDepthBuffer() { - if (m_depthTexture) { - m_textureHelper->deleteTexture(&m_depthTexture); - m_depthTexture = 0; - } + m_textureHelper->deleteTexture(&m_depthTexture); if (m_primarySubViewport.size().isEmpty()) return; diff --git a/src/datavisualization/engine/scatter3drenderer.cpp b/src/datavisualization/engine/scatter3drenderer.cpp index 3bd06517..5d37e6e1 100644 --- a/src/datavisualization/engine/scatter3drenderer.cpp +++ b/src/datavisualization/engine/scatter3drenderer.cpp @@ -1690,10 +1690,7 @@ void Scatter3DRenderer::initSelectionShader() void Scatter3DRenderer::initSelectionBuffer() { - if (m_selectionTexture) { - m_textureHelper->deleteTexture(&m_selectionTexture); - m_selectionTexture = 0; - } + m_textureHelper->deleteTexture(&m_selectionTexture); if (m_primarySubViewport.size().isEmpty()) return; @@ -1715,10 +1712,7 @@ void Scatter3DRenderer::initDepthShader() void Scatter3DRenderer::updateDepthBuffer() { - if (m_depthTexture) { - m_textureHelper->deleteTexture(&m_depthTexture); - m_depthTexture = 0; - } + m_textureHelper->deleteTexture(&m_depthTexture); if (m_primarySubViewport.size().isEmpty()) return; diff --git a/src/datavisualization/engine/surface3drenderer.cpp b/src/datavisualization/engine/surface3drenderer.cpp index f79f92f6..f04277f7 100644 --- a/src/datavisualization/engine/surface3drenderer.cpp +++ b/src/datavisualization/engine/surface3drenderer.cpp @@ -2041,10 +2041,7 @@ void Surface3DRenderer::createSelectionTexture(SurfaceSeriesRenderCache *cache, void Surface3DRenderer::initSelectionBuffer() { // Create the result selection texture and buffers - if (m_selectionResultTexture) { - m_textureHelper->deleteTexture(&m_selectionResultTexture); - m_selectionResultTexture = 0; - } + m_textureHelper->deleteTexture(&m_selectionResultTexture); m_selectionResultTexture = m_textureHelper->createSelectionTexture(m_primarySubViewport.size(), m_selectionFrameBuffer, @@ -2480,14 +2477,8 @@ void Surface3DRenderer::initDepthShader() void Surface3DRenderer::updateDepthBuffer() { - if (m_depthTexture) { - m_textureHelper->deleteTexture(&m_depthTexture); - m_depthTexture = 0; - } - if (m_depthModelTexture) { - m_textureHelper->deleteTexture(&m_depthModelTexture); - m_depthModelTexture = 0; - } + m_textureHelper->deleteTexture(&m_depthTexture); + m_textureHelper->deleteTexture(&m_depthModelTexture); if (m_primarySubViewport.size().isEmpty()) return; diff --git a/src/datavisualization/utils/texturehelper.cpp b/src/datavisualization/utils/texturehelper.cpp index 07130d7e..185d99e4 100644 --- a/src/datavisualization/utils/texturehelper.cpp +++ b/src/datavisualization/utils/texturehelper.cpp @@ -241,9 +241,12 @@ void TextureHelper::fillDepthTexture(GLuint texture,const QSize &size, GLuint te } #endif -void TextureHelper::deleteTexture(const GLuint *texture) +void TextureHelper::deleteTexture(GLuint *texture) { - glDeleteTextures(1, texture); + if (texture && *texture) { + glDeleteTextures(1, texture); + *texture = 0; + } } QImage TextureHelper::convertToGLFormat(const QImage &srcImage) diff --git a/src/datavisualization/utils/texturehelper_p.h b/src/datavisualization/utils/texturehelper_p.h index ebfaa042..206cd291 100644 --- a/src/datavisualization/utils/texturehelper_p.h +++ b/src/datavisualization/utils/texturehelper_p.h @@ -56,7 +56,7 @@ class TextureHelper : protected QOpenGLFunctions GLuint createDepthTextureFrameBuffer(const QSize &size, GLuint &frameBuffer, GLuint textureSize); void fillDepthTexture(GLuint texture, const QSize &size, GLuint textureSize, GLfloat value); #endif - void deleteTexture(const GLuint *texture); + void deleteTexture(GLuint *texture); private: QImage convertToGLFormat(const QImage &srcImage); -- cgit v1.2.3