From feeb757a1018c78605bddc4126a8274e6c1c46bc Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Fri, 27 Jun 2025 13:34:01 +0800 Subject: [PATCH] use render thread method for creating grid overlay & reinstate overlay tests --- .github/workflows/dart.yml | 6 +-- .../src/bindings/src/thermion_dart_ffi.g.dart | 24 +++++++++ .../src/thermion_dart_js_interop.g.dart | 52 +++++++++++++++---- .../src/implementation/grid_overlay.dart | 2 +- .../c_api/ThermionDartRenderThreadApi.h | 2 + .../src/c_api/ThermionDartRenderThreadApi.cpp | 10 ++++ 6 files changed, 82 insertions(+), 14 deletions(-) diff --git a/.github/workflows/dart.yml b/.github/workflows/dart.yml index e2a54955..ff1a86d8 100644 --- a/.github/workflows/dart.yml +++ b/.github/workflows/dart.yml @@ -23,10 +23,10 @@ jobs: test/geometry_tests.dart \ test/view_tests.dart \ test/postprocessing_tests.dart \ - test/scene_tests.dart - test/picking_tests.dart + test/scene_tests.dart \ + test/picking_tests.dart \ + test/overlay_tests.dart \ --concurrency=1 - # test/overlay_tests.dart - name: Zip output run: zip -r output.zip ./thermion_dart/test/output - name: Upload test output diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart index a816ffcd..3bd7302d 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart @@ -1390,6 +1390,15 @@ external void RenderTicker_setRenderable( int numViews, ); +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(isLeaf: true) +external void RenderTicker_foo( + ffi.Pointer tRenderTicker, + ffi.Pointer tOverlayView, + ffi.Pointer tMaterialInstance, +); + @ffi.Native< ffi.Pointer Function(ffi.UnsignedInt, ffi.Pointer, ffi.Pointer, ffi.Uint8, ffi.Bool)>(isLeaf: true) @@ -2216,6 +2225,21 @@ external void View_setCameraRenderThread( VoidCallback onComplete, ); +@ffi.Native< + ffi.Void Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer< + ffi + .NativeFunction)>>)>( + isLeaf: true) +external void SceneAsset_createGridRenderThread( + ffi.Pointer tEngine, + ffi.Pointer tMaterial, + ffi.Pointer)>> + callback, +); + @ffi.Native< ffi.Void Function( ffi.Pointer, ffi.Uint32, VoidCallback)>(isLeaf: true) diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart index c0d5a554..e311f702 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart @@ -1181,6 +1181,11 @@ extension type NativeLibrary(JSObject _) implements JSObject { Pointer> views, int numViews, ); + external void _RenderTicker_foo( + Pointer tRenderTicker, + Pointer tOverlayView, + Pointer tMaterialInstance, + ); external Pointer _Engine_create( int backend, Pointer platform, @@ -1605,6 +1610,12 @@ extension type NativeLibrary(JSObject _) implements JSObject { int requestId, VoidCallback onComplete, ); + external void _SceneAsset_createGridRenderThread( + Pointer tEngine, + Pointer tMaterial, + Pointer)>> + callback, + ); external void _SceneAsset_destroyRenderThread( Pointer tSceneAsset, int requestId, @@ -3886,6 +3897,16 @@ void RenderTicker_setRenderable( return result; } +void RenderTicker_foo( + self.Pointer tRenderTicker, + self.Pointer tOverlayView, + self.Pointer tMaterialInstance, +) { + final result = _lib._RenderTicker_foo( + tRenderTicker.cast(), tOverlayView.cast(), tMaterialInstance.cast()); + return result; +} + self.Pointer Engine_create( int backend, self.Pointer platform, @@ -4787,6 +4808,17 @@ void View_setCameraRenderThread( return result; } +void SceneAsset_createGridRenderThread( + self.Pointer tEngine, + self.Pointer tMaterial, + self.Pointer)>> + callback, +) { + final result = _lib._SceneAsset_createGridRenderThread( + tEngine.cast(), tMaterial.cast(), callback.cast()); + return result; +} + void SceneAsset_destroyRenderThread( self.Pointer tSceneAsset, int requestId, @@ -7560,7 +7592,7 @@ extension NativeFunctionPointer20 on void Function( } } -extension NativeFunctionPointer26 on void Function( +extension NativeFunctionPointer27 on void Function( self.Pointer) { // orignal type void Function(self.Pointer ) void Function(Pointer ) dart type void Function(self.Pointer ) @@ -7573,7 +7605,7 @@ extension NativeFunctionPointer26 on void Function( } } -extension NativeFunctionPointer28 on void Function( +extension NativeFunctionPointer29 on void Function( self.Pointer) { // orignal type void Function(self.Pointer ) void Function(Pointer ) dart type void Function(self.Pointer ) @@ -7584,7 +7616,7 @@ extension NativeFunctionPointer28 on void Function( } } -extension NativeFunctionPointer29 on void Function(int) { +extension NativeFunctionPointer30 on void Function(int) { // orignal type void Function(int ) void Function(int ) dart type void Function(int ) Pointer> addFunction() { @@ -7594,7 +7626,7 @@ extension NativeFunctionPointer29 on void Function(int) { } } -extension NativeFunctionPointer35 on void Function( +extension NativeFunctionPointer36 on void Function( self.Pointer) { // orignal type void Function(self.Pointer ) void Function(Pointer ) dart type void Function(self.Pointer ) @@ -7607,7 +7639,7 @@ extension NativeFunctionPointer35 on void Function( } } -extension NativeFunctionPointer36 on void Function( +extension NativeFunctionPointer37 on void Function( self.Pointer) { // orignal type void Function(self.Pointer ) void Function(Pointer ) dart type void Function(self.Pointer ) @@ -7621,7 +7653,7 @@ extension NativeFunctionPointer36 on void Function( } } -extension NativeFunctionPointer40 on void Function( +extension NativeFunctionPointer41 on void Function( self.Pointer) { // orignal type void Function(self.Pointer ) void Function(Pointer ) dart type void Function(self.Pointer ) @@ -7635,7 +7667,7 @@ extension NativeFunctionPointer40 on void Function( } } -extension NativeFunctionPointer41 on void Function( +extension NativeFunctionPointer42 on void Function( self.Pointer) { // orignal type void Function(self.Pointer ) void Function(Pointer ) dart type void Function(self.Pointer ) @@ -7650,7 +7682,7 @@ extension NativeFunctionPointer41 on void Function( } } -extension NativeFunctionPointer44 on void Function( +extension NativeFunctionPointer45 on void Function( double) { // orignal type void Function(double ) void Function(double ) dart type void Function(double ) @@ -7661,7 +7693,7 @@ extension NativeFunctionPointer44 on void Function( } } -extension NativeFunctionPointer45 on void Function( +extension NativeFunctionPointer46 on void Function( self.Pointer) { // orignal type void Function(self.Pointer ) void Function(Pointer ) dart type void Function(self.Pointer ) @@ -7674,7 +7706,7 @@ extension NativeFunctionPointer45 on void Function( } } -extension NativeFunctionPointer46 on void Function( +extension NativeFunctionPointer47 on void Function( self.Pointer) { // orignal type void Function(self.Pointer ) void Function(Pointer ) dart type void Function(self.Pointer ) diff --git a/thermion_dart/lib/src/filament/src/implementation/grid_overlay.dart b/thermion_dart/lib/src/filament/src/implementation/grid_overlay.dart index f7d8baf1..63de8da4 100644 --- a/thermion_dart/lib/src/filament/src/implementation/grid_overlay.dart +++ b/thermion_dart/lib/src/filament/src/implementation/grid_overlay.dart @@ -8,7 +8,7 @@ class GridOverlay extends FFIAsset { static Future create(FFIFilamentApp app, Pointer animationManager) async { final gridMaterial = await app.gridMaterial; - final asset = SceneAsset_createGrid(app.engine, gridMaterial.pointer); + final asset = await withPointerCallback((cb) => SceneAsset_createGridRenderThread(app.engine, gridMaterial.pointer, cb)); return GridOverlay(asset, app, animationManager); } } diff --git a/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h b/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h index 9c18db89..b746ea44 100644 --- a/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h +++ b/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h @@ -97,6 +97,8 @@ namespace thermion void View_setBloomRenderThread(TView *tView, bool enabled, double strength, uint32_t requestId, VoidCallback onComplete); void View_setCameraRenderThread(TView *tView, TCamera *tCamera, uint32_t requestId, VoidCallback onComplete); + void SceneAsset_createGridRenderThread(TEngine *tEngine, TMaterial * tMaterial, void (*callback)(TSceneAsset *)); + void SceneAsset_destroyRenderThread(TSceneAsset *tSceneAsset, uint32_t requestId, VoidCallback onComplete); void SceneAsset_createFromFilamentAssetRenderThread( TEngine *tEngine, diff --git a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp index be17d6c1..b7b194a2 100644 --- a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp +++ b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp @@ -524,6 +524,16 @@ extern "C" auto fut = _renderThread->add_task(lambda); } + EMSCRIPTEN_KEEPALIVE void SceneAsset_createGridRenderThread(TEngine *tEngine, TMaterial * tMaterial, void (*onComplete)(TSceneAsset *)) { + std::packaged_task lambda( + [=]() mutable + { + auto *asset = SceneAsset_createGrid(tEngine, tMaterial); + PROXY(onComplete(asset)); + }); + auto fut = _renderThread->add_task(lambda); + } + EMSCRIPTEN_KEEPALIVE void SceneAsset_destroyRenderThread(TSceneAsset *tSceneAsset, uint32_t requestId, VoidCallback onComplete) { std::packaged_task lambda(