don't free Int32List for childEntities, stackRestore takes care of this

This commit is contained in:
Nick Fisher
2025-06-12 11:37:18 +08:00
parent 828354abe5
commit fe5279f942

View File

@@ -58,16 +58,17 @@ class FFIAsset extends ThermionAsset {
Future<List<ThermionEntity>> getChildEntities() async { Future<List<ThermionEntity>> getChildEntities() async {
if (_childEntities == null) { if (_childEntities == null) {
var count = SceneAsset_getChildEntityCount(asset); var count = SceneAsset_getChildEntityCount(asset);
var childEntities = makeInt32List(count);
late Pointer stackPtr; late Pointer stackPtr;
if (FILAMENT_WASM) { if (FILAMENT_WASM) {
stackPtr = stackSave(); stackPtr = stackSave();
} }
var childEntities = makeInt32List(count);
if (count > 0) { if (count > 0) {
SceneAsset_getChildEntities(asset, childEntities.address); SceneAsset_getChildEntities(asset, childEntities.address);
} }
_childEntities = Int32List.fromList(childEntities); _childEntities = Int32List.fromList(childEntities);
childEntities.free();
if (FILAMENT_WASM) { if (FILAMENT_WASM) {
stackRestore(stackPtr); stackRestore(stackPtr);
} }
@@ -86,7 +87,6 @@ class FFIAsset extends ThermionAsset {
for (final entity in childEntities) { for (final entity in childEntities) {
var name = await FilamentApp.instance!.getNameForEntity(entity); var name = await FilamentApp.instance!.getNameForEntity(entity);
names.add(name); names.add(name);
} }
return names; return names;
} }
@@ -369,7 +369,6 @@ class FFIAsset extends ThermionAsset {
@override @override
Future<MaterialInstance> getMaterialInstanceAt( Future<MaterialInstance> getMaterialInstanceAt(
{ThermionEntity? entity, int index = 0}) async { {ThermionEntity? entity, int index = 0}) async {
if (entity == null) { if (entity == null) {
if (RenderableManager_isRenderable(app.renderableManager, this.entity)) { if (RenderableManager_isRenderable(app.renderableManager, this.entity)) {
entity ??= this.entity; entity ??= this.entity;
@@ -463,7 +462,7 @@ class FFIAsset extends ThermionAsset {
_logger.warning("Provided entity is not renderable"); _logger.warning("Provided entity is not renderable");
return; return;
} }
if (entity == null) { if (entity == null) {
if (RenderableManager_isRenderable(app.renderableManager, this.entity)) { if (RenderableManager_isRenderable(app.renderableManager, this.entity)) {
entity ??= this.entity; entity ??= this.entity;