From 4b2a7b063bd8a75dd10859d477e53c833fc844fa Mon Sep 17 00:00:00 2001 From: Charles Yin Date: Wed, 7 Mar 2012 10:20:06 +1000 Subject: Fix texture leaks in QQuickCanvasItem In commit be4c74948371ddf6f1ed260783b43b5a3d9e60a7 we removed the QQuickCanvasItemNode, but textures are not automatically deleted with QSGSimpleTextureNode, so add a very thin sub class of QSGSimpleTextureNode to just cleanup canvas texture to avoid texture leaks. Change-Id: I31aac1068e8218a75129b52afbbf30fb66e4bbf7 Reviewed-by: Michael Brasser --- src/quick/items/context2d/qquickcanvasitem.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/quick/items/context2d/qquickcanvasitem.cpp b/src/quick/items/context2d/qquickcanvasitem.cpp index 3b4adc15ca..e2f57fe162 100644 --- a/src/quick/items/context2d/qquickcanvasitem.cpp +++ b/src/quick/items/context2d/qquickcanvasitem.cpp @@ -564,9 +564,16 @@ QSGNode *QQuickCanvasItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData if (!d->contextInitialized) return 0; - QSGSimpleTextureNode *node = static_cast(oldNode); + class CanvasTextureNode : public QSGSimpleTextureNode + { + public: + CanvasTextureNode() : QSGSimpleTextureNode() {} + ~CanvasTextureNode() {delete texture();} + }; + + CanvasTextureNode *node = static_cast(oldNode); if (!node) { - node = new QSGSimpleTextureNode; + node = new CanvasTextureNode; } if (d->renderStrategy == QQuickCanvasItem::Cooperative) -- cgit v1.2.3