diff options
author | Paul Lemire <paul.lemire@kdab.com> | 2015-11-10 12:27:24 +0100 |
---|---|---|
committer | Andy Nichols <andy.nichols@theqtcompany.com> | 2015-11-16 12:26:39 +0000 |
commit | b4e90c79976b11c3d1a083b106f4085e5937059f (patch) | |
tree | 417c114dc8058ecbb5f74aaf5450d30a20e51373 /src/render/io | |
parent | e17b8554cb8b72a029c9272f5fead98bf748688a (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.cpp | 5 | ||||
-rw-r--r-- | src/render/io/scene.cpp | 3 |
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())); |