summaryrefslogtreecommitdiffstats
path: root/src/render/io
diff options
context:
space:
mode:
authorPaul Lemire <paul.lemire@kdab.com>2015-11-10 12:27:24 +0100
committerAndy Nichols <andy.nichols@theqtcompany.com>2015-11-16 12:26:39 +0000
commitb4e90c79976b11c3d1a083b106f4085e5937059f (patch)
tree417c114dc8058ecbb5f74aaf5450d30a20e51373 /src/render/io
parente17b8554cb8b72a029c9272f5fead98bf748688a (diff)
QSceneLoader: do not leak built scene
Change-Id: Id1649bf16330dba009549f3f7e0eab3aef0fadba Reviewed-by: Andy Nichols <andy.nichols@theqtcompany.com>
Diffstat (limited to 'src/render/io')
-rw-r--r--src/render/io/qsceneloader.cpp5
-rw-r--r--src/render/io/scene.cpp3
2 files changed, 5 insertions, 3 deletions
diff --git a/src/render/io/qsceneloader.cpp b/src/render/io/qsceneloader.cpp
index d25a9bf55..a2f739e13 100644
--- a/src/render/io/qsceneloader.cpp
+++ b/src/render/io/qsceneloader.cpp
@@ -65,8 +65,9 @@ void QSceneLoader::sceneChangeEvent(const Qt3DCore::QSceneChangePtr &change)
QScenePropertyChangePtr e = qSharedPointerCast<QScenePropertyChange>(change);
if (e->type() == NodeUpdated) {
if (e->propertyName() == QByteArrayLiteral("scene")) {
- QEntity *scene = e->value().value<QEntity *>();
- // TO DO: We should send a QNodePtr so that it is release automatically
+ // We receive a QNodePtr so that it is released automatically
+ QNodePtr nodePtr = e->value().value<QNodePtr>();
+ QEntity *scene = static_cast<QEntity *>(nodePtr.data());
if (scene != Q_NULLPTR && d->m_scene != Q_NULLPTR) {
QList<QNodeId> entities = d->m_scene->entitiesForComponent(d->m_id);
if (entities.size() > 1) // TO DO: QComponent shareable property
diff --git a/src/render/io/scene.cpp b/src/render/io/scene.cpp
index 0d4c97649..8564f6c74 100644
--- a/src/render/io/scene.cpp
+++ b/src/render/io/scene.cpp
@@ -37,6 +37,7 @@
#include "scene_p.h"
#include <Qt3DCore/qentity.h>
#include <Qt3DCore/qscenepropertychange.h>
+#include <Qt3DCore/private/qnode_p.h>
#include <Qt3DCore/private/qscene_p.h>
#include <Qt3DCore/qbackendscenepropertychange.h>
#include <Qt3DRender/qabstractsceneloader.h>
@@ -83,7 +84,7 @@ void Scene::setSceneSubtree(Qt3DCore::QEntity *subTree)
e->setPropertyName("scene");
// The Frontend element has to perform the clone
// So that the objects are created in the main thread
- e->setValue(QVariant::fromValue(subTree));
+ e->setValue(QVariant::fromValue(QNodePtr(subTree, &QNodePrivate::nodePtrDeleter)));
e->setTargetNode(peerUuid());
notifyObservers(e);
QBackendScenePropertyChangePtr e2(new QBackendScenePropertyChange(NodeUpdated, peerUuid()));