summaryrefslogtreecommitdiffstats
path: root/src/plugins/sceneparsers
diff options
context:
space:
mode:
authorSean Harmer <sean.harmer@kdab.com>2017-08-19 15:53:30 +0100
committerSean Harmer <sean.harmer@kdab.com>2017-08-19 16:28:52 +0100
commit8f863343a9e2e2f3630f22407f4e5e30e72745cf (patch)
tree5574e3c2215d74345e15df5f45ed3211e065541a /src/plugins/sceneparsers
parent3edb85002b848033bbeefa33001d19fb514ef489 (diff)
parent9d8c9ada161ad97634992c444196add0abb4f9d1 (diff)
Merge branch '5.9' into dev
Conflicts: src/render/backend/renderer.cpp src/render/backend/renderview.cpp src/render/graphicshelpers/graphicscontext_p.h src/render/graphicshelpers/graphicshelperes2_p.h src/render/graphicshelpers/graphicshelpergl2_p.h src/render/graphicshelpers/graphicshelpergl3_2_p.h src/render/graphicshelpers/graphicshelpergl3_3_p.h src/render/graphicshelpers/graphicshelpergl4_p.h src/render/graphicshelpers/graphicshelperinterface_p.h src/render/jobs/pickboundingvolumejob.cpp tests/auto/animation/clipanimator/tst_clipanimator.cpp tests/auto/auto.pro tests/manual/manual.pro Also disabled the QQmlMetaType codepaths following commit 49a11e882059ee1729f776722e085dd21d378c36 in qtdeclarative. The QQmlMetaType codepaths will be re-enabled once a qt5.git integration has succeeded. Change-Id: Ia654d75425e6d406c472d19864383612208cad2b
Diffstat (limited to 'src/plugins/sceneparsers')
-rw-r--r--src/plugins/sceneparsers/assimp/assimpimporter.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/plugins/sceneparsers/assimp/assimpimporter.cpp b/src/plugins/sceneparsers/assimp/assimpimporter.cpp
index fb0d8b1a9..a2f500a6c 100644
--- a/src/plugins/sceneparsers/assimp/assimpimporter.cpp
+++ b/src/plugins/sceneparsers/assimp/assimpimporter.cpp
@@ -693,6 +693,13 @@ void AssimpImporter::loadMaterial(uint materialIndex)
copyMaterialTextures(material, assimpMaterial);
m_scene->m_materials.insert(materialIndex, material);
+
+ Qt3DRender::AssimpImporter::SceneImporter *scene = m_scene;
+ QObject::connect(material, &QObject::destroyed, [&, scene, materialIndex](QObject *object) {
+ QMaterial *r = static_cast<QMaterial *>(object);
+ if (scene->m_materials[materialIndex] == r)
+ scene->m_materials.remove(materialIndex);
+ });
}
/*!
@@ -844,6 +851,13 @@ void AssimpImporter::loadMesh(uint meshIndex)
m_scene->m_meshes[meshIndex] = geometryRenderer;
+ Qt3DRender::AssimpImporter::SceneImporter *scene = m_scene;
+ QObject::connect(geometryRenderer, &QObject::destroyed, [&, scene, meshIndex](QObject *object) {
+ QGeometryRenderer *r = static_cast<QGeometryRenderer *>(object);
+ if (scene->m_meshes[meshIndex] == r)
+ scene->m_meshes.remove(meshIndex);
+ });
+
if (mesh->mNumAnimMeshes > 0) {
aiAnimMesh *animesh = mesh->mAnimMeshes[0];
@@ -1004,6 +1018,13 @@ void AssimpImporter::loadEmbeddedTexture(uint textureIndex)
imageData->setData(textureContent);
texture->addTextureImage(imageData);
m_scene->m_embeddedTextures[textureIndex] = texture;
+
+ Qt3DRender::AssimpImporter::SceneImporter *scene = m_scene;
+ QObject::connect(texture, &QObject::destroyed, [&, scene, textureIndex](QObject *object) {
+ QAbstractTexture *r = static_cast<QAbstractTexture *>(object);
+ if (scene->m_embeddedTextures[textureIndex] == r)
+ scene->m_embeddedTextures.remove(textureIndex);
+ });
}
/*!
@@ -1047,6 +1068,13 @@ void AssimpImporter::loadCamera(uint cameraIndex)
camera->addComponent(transform);
m_scene->m_cameras[cameraNode] = camera;
+
+ Qt3DRender::AssimpImporter::SceneImporter *scene = m_scene;
+ QObject::connect(camera, &QObject::destroyed, [&, scene, cameraNode](QObject *object) {
+ QEntity *r = static_cast<QEntity *>(object);
+ if (scene->m_cameras[cameraNode] == r)
+ scene->m_cameras.remove(cameraNode);
+ });
}
int findTimeIndex(const QVector<float> &times, float time) {
@@ -1377,9 +1405,15 @@ AssimpImporter::SceneImporter::SceneImporter()
// The Assimp::Importer manages the lifetime of the aiScene object
}
+
+
AssimpImporter::SceneImporter::~SceneImporter()
{
delete m_importer;
+ qDeleteAll(m_materials.values());
+ qDeleteAll(m_meshes.values());
+ qDeleteAll(m_embeddedTextures.values());
+ qDeleteAll(m_cameras.values());
}
} // namespace Qt3DRender