From fe5279f942e0bb997822ec647001c11d6a59d535 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Thu, 12 Jun 2025 11:37:18 +0800 Subject: [PATCH] don't free Int32List for childEntities, stackRestore takes care of this --- .../lib/src/filament/src/implementation/ffi_asset.dart | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_asset.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_asset.dart index 8cc17a10..37e9049b 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_asset.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_asset.dart @@ -58,16 +58,17 @@ class FFIAsset extends ThermionAsset { Future> getChildEntities() async { if (_childEntities == null) { var count = SceneAsset_getChildEntityCount(asset); - var childEntities = makeInt32List(count); + late Pointer stackPtr; if (FILAMENT_WASM) { stackPtr = stackSave(); } + var childEntities = makeInt32List(count); if (count > 0) { SceneAsset_getChildEntities(asset, childEntities.address); } _childEntities = Int32List.fromList(childEntities); - childEntities.free(); + if (FILAMENT_WASM) { stackRestore(stackPtr); } @@ -86,7 +87,6 @@ class FFIAsset extends ThermionAsset { for (final entity in childEntities) { var name = await FilamentApp.instance!.getNameForEntity(entity); names.add(name); - } return names; } @@ -369,7 +369,6 @@ class FFIAsset extends ThermionAsset { @override Future getMaterialInstanceAt( {ThermionEntity? entity, int index = 0}) async { - if (entity == null) { if (RenderableManager_isRenderable(app.renderableManager, this.entity)) { entity ??= this.entity; @@ -463,7 +462,7 @@ class FFIAsset extends ThermionAsset { _logger.warning("Provided entity is not renderable"); return; } - + if (entity == null) { if (RenderableManager_isRenderable(app.renderableManager, this.entity)) { entity ??= this.entity;