From adfdecd274a2b75ee5a0eae3cb9d46bd42bbfb1d Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Thu, 9 May 2024 13:35:50 +0800 Subject: [PATCH] remove animation components on destroyAll --- dart_filament/native/src/SceneManager.cpp | 28 +++++++++++++++-------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/dart_filament/native/src/SceneManager.cpp b/dart_filament/native/src/SceneManager.cpp index b8e0a688..adbde9ff 100644 --- a/dart_filament/native/src/SceneManager.cpp +++ b/dart_filament/native/src/SceneManager.cpp @@ -411,8 +411,27 @@ namespace flutter_filament void SceneManager::destroyAll() { + std::lock_guard lock(_mutex); + for (auto &asset : _assets) { + auto numInstances = asset.second->getAssetInstanceCount(); + for(int i = 0; i < numInstances; i++) { + auto instance = asset.second->getAssetInstances()[i]; + for (int j = 0; j < instance->getEntityCount(); j++) + { + auto childEntity = instance->getEntities()[j]; + if (_collisionComponentManager->hasComponent(childEntity)) + { + _collisionComponentManager->removeComponent(childEntity); + } + if (_animationComponentManager->hasComponent(childEntity)) + { + _animationComponentManager->removeComponent(childEntity); + } + } + } + _scene->removeEntities(asset.second->getEntities(), asset.second->getEntityCount()); _scene->removeEntities(asset.second->getLightEntities(), @@ -574,7 +593,6 @@ namespace flutter_filament _animationComponentManager->removeComponent(childEntity); } } - // if this a FilamentAsset Entity } else { @@ -612,14 +630,6 @@ namespace flutter_filament } _assetLoader->destroyAsset(asset); } - - // if (sceneAsset.texture) - // { - // _engine->destroy(sceneAsset.texture); - // } - // - // utils::EntityManager &em = utils::EntityManager::get(); - // em.destroy(entity); } bool SceneManager::setMorphTargetWeights(EntityId entityId, const float *const weights, const int count)