From 558978a0f26a777390447f478c420260b7f874ef Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Tue, 17 Jun 2025 18:01:18 +0800 Subject: [PATCH] add makeUint8List helper method for ffi/jsinterop --- thermion_dart/lib/src/bindings/src/ffi.dart | 4 ++++ .../lib/src/bindings/src/js_interop.dart | 15 +++++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/thermion_dart/lib/src/bindings/src/ffi.dart b/thermion_dart/lib/src/bindings/src/ffi.dart index 178ea93d..644530a6 100644 --- a/thermion_dart/lib/src/bindings/src/ffi.dart +++ b/thermion_dart/lib/src/bindings/src/ffi.dart @@ -11,6 +11,10 @@ const FILAMENT_SINGLE_THREADED = false; const FILAMENT_WASM = false; bool get IS_WINDOWS => Platform.isWindows; +Uint8List makeUint8List(int length) { + return Uint8List(length); +} + Int32List makeInt32List(int length) { return Int32List(length); } diff --git a/thermion_dart/lib/src/bindings/src/js_interop.dart b/thermion_dart/lib/src/bindings/src/js_interop.dart index a570c13e..9c4849d2 100644 --- a/thermion_dart/lib/src/bindings/src/js_interop.dart +++ b/thermion_dart/lib/src/bindings/src/js_interop.dart @@ -12,6 +12,14 @@ const IS_WINDOWS = false; final _allocations = {}; +Uint8List makeUint8List(int length) { + var ptr = malloc(length); + var buf = _NativeLibrary.instance._emscripten_make_uint8_buffer(ptr, length); + var uint8List = buf.toDart; + _allocations.add(uint8List); + return uint8List; +} + Int32List makeInt32List(int length) { var ptr = stackAlloc(length * 4); var buf = _NativeLibrary.instance._emscripten_make_int32_buffer(ptr, length); @@ -132,6 +140,10 @@ extension Uint8ListExtension on Uint8List { if (this.lengthInBytes == 0) { return nullptr; } + if (_allocations.contains(this)) { + return Pointer( + _NativeLibrary.instance._emscripten_get_byte_offset(this.toJS)); + } final ptr = getPointer(this, this.toJS); final bar = Uint8ArrayWrapper(NativeLibrary.instance.HEAPU8.buffer, ptr, length) @@ -139,14 +151,13 @@ extension Uint8ListExtension on Uint8List { var now = DateTime.now(); bar.toDart.setRange(0, length, this); var finished = DateTime.now(); - print( - "uint8list copy finished in ${finished.millisecondsSinceEpoch - now.millisecondsSinceEpoch}ms"); return ptr; } } extension Float32ListExtension on Float32List { Pointer get address { + final ptr = getPointer(this, this.toJS); final bar = Float32ArrayWrapper(NativeLibrary.instance.HEAPU8.buffer, ptr, length)