diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart index 94adc43c..c71dacbc 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart @@ -263,6 +263,15 @@ class FFIFilamentApp extends FilamentApp { /// Future destroyAsset(covariant FFIAsset asset) async { await asset.removeAnimationComponent(); + if (!asset.isInstance) { + for (final instance in (await asset.getInstances()).cast()) { + await instance.removeAnimationComponent(); + await withVoidCallback((requestId, cb) => + SceneAsset_destroyRenderThread(instance.asset, requestId, cb)); + await instance.dispose(); + } + } + await withVoidCallback((requestId, cb) => SceneAsset_destroyRenderThread(asset.asset, requestId, cb)); await asset.dispose(); diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart index 92ea3c5f..709a1a60 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart @@ -480,7 +480,11 @@ class ThermionViewerFFI extends ThermionViewer { await scene.remove(asset.boundingBoxAsset! as FFIAsset); await FilamentApp.instance!.destroyAsset(asset.boundingBoxAsset!); } + for (final instance in (await asset.getInstances()).cast()) { + await scene.remove(instance); + } await FilamentApp.instance!.destroyAsset(asset); + _logger.info("Destroyed asset"); } _assets.clear(); }