From e9b87a9a9ad4dd3d01deae1e55b75595447748a2 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Sun, 19 May 2024 14:18:40 +0800 Subject: [PATCH] don't use asTypedList/setRange on Float32List as this doesn't work with WASM --- .../dart_filament/filament_viewer_impl.dart | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/dart_filament/lib/dart_filament/filament_viewer_impl.dart b/dart_filament/lib/dart_filament/filament_viewer_impl.dart index d2430219..ef034c9e 100644 --- a/dart_filament/lib/dart_filament/filament_viewer_impl.dart +++ b/dart_filament/lib/dart_filament/filament_viewer_impl.dart @@ -62,10 +62,14 @@ class FilamentViewer extends AbstractFilamentViewer { this._renderCallback = renderCallback ?? nullptr; this._driver = driver ?? nullptr; this._sharedContext = sharedContext ?? nullptr; - - // _onPickResultCallable = - // NativeCallable.listener( - // _onPickResult); + try { + _onPickResultCallable = + NativeCallable.listener( + _onPickResult); + } catch (err) { + print( + "Failed to set pick result callback. This is expected if running on web/wasm"); + } _initialize(); } @@ -364,12 +368,10 @@ class FilamentViewer extends AbstractFilamentViewer { for (int i = 0; i < weights.length; i++) { weightsPtr[i] = weights[i]; } - var success = await withBoolCallback((cb) { set_morph_target_weights_ffi( _sceneManager!, entity, weightsPtr, weights.length, cb); }); - allocator.free(weightsPtr); if (!success) { @@ -451,8 +453,10 @@ class FilamentViewer extends AbstractFilamentViewer { var meshEntity = meshEntities[i]; if (targetMeshNames?.contains(meshName) == false) { + print("Skipping $meshName, not contained in target"); continue; } + var meshMorphTargets = await getMorphTargetNames(entity, meshEntity); var intersection = animation.morphTargets @@ -474,9 +478,13 @@ class FilamentViewer extends AbstractFilamentViewer { var dataPtr = allocator(frameData.length); - dataPtr - .asTypedList(frameData.length) - .setRange(0, frameData.length, frameData); + // not currently working on WASM :( wasted a lot of time figuring that out as no error is thrown + // dataPtr + // .asTypedList(frameData.length) + // .setRange(0, frameData.length, frameData); + for (int i = 0; i < frameData.length; i++) { + dataPtr[i] = frameData[i]; + } final idxPtr = allocator(indices.length);