aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick/scenegraph/qsgwindowsrenderloop.cpp
diff options
context:
space:
mode:
authorRobert Griebl <robert.griebl@pelagicore.com>2015-04-15 13:57:51 +0200
committerRobert Griebl <robert.griebl@pelagicore.com>2015-04-23 15:00:46 +0000
commit92433623b31388e2e8c4d532033dad6189eaab24 (patch)
tree1a20685ae0f7e5d3137ca001c2c222ae16aaf241 /src/quick/scenegraph/qsgwindowsrenderloop.cpp
parent3fdec636980c23b14cfc6aa74bc48bbb960ba0b4 (diff)
Fix a memory leak in the material shader cache.
There were multiple problems in the implementation of the shader cache: 1) it was not thread-safe 2) nothing was ever removed from the hash 3) since the keys into the hash are the actual shader source code, problem #2 would lead to serious memory consumption over time Change-Id: I20d1fb2074932e23f89edddba12e68ab8adcbff0 Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
Diffstat (limited to 'src/quick/scenegraph/qsgwindowsrenderloop.cpp')
-rw-r--r--src/quick/scenegraph/qsgwindowsrenderloop.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/quick/scenegraph/qsgwindowsrenderloop.cpp b/src/quick/scenegraph/qsgwindowsrenderloop.cpp
index 0e22fa8b7b..309e877dae 100644
--- a/src/quick/scenegraph/qsgwindowsrenderloop.cpp
+++ b/src/quick/scenegraph/qsgwindowsrenderloop.cpp
@@ -48,6 +48,8 @@
#include <private/qquickprofiler_p.h>
+#include <private/qquickshadereffectnode_p.h>
+
QT_BEGIN_NAMESPACE
extern Q_GUI_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha);
@@ -232,6 +234,8 @@ void QSGWindowsRenderLoop::windowDestroyed(QQuickWindow *window)
if (Q_UNLIKELY(!current))
qCDebug(QSG_LOG_RENDERLOOP) << "cleanup without an OpenGL context";
+ QQuickShaderEffectMaterial::cleanupMaterialCache();
+
d->cleanupNodesOnShutdown();
if (m_windows.size() == 0) {
d->context->invalidate();