From 4a9d28e59de57083e9dce0b2410815eee15ebd91 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Wed, 23 Oct 2024 16:39:42 +1100 Subject: [PATCH] fix:move createUnlitMaterialInstance and createGeometry to render thread --- .../src/viewer/src/ffi/src/thermion_dart.g.dart | 16 +++++++++++++--- .../viewer/src/ffi/src/thermion_viewer_ffi.dart | 10 ++++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart index 36ebc3a1..38d8b632 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart @@ -421,10 +421,20 @@ external ffi.Pointer create_material_instance( @ffi.Native< ffi.Pointer Function( ffi.Pointer)>(isLeaf: true) -external ffi.Pointer create_unlit_material_instance( +external ffi.Pointer SceneManager_createUnlitMaterialInstance( ffi.Pointer sceneManager, ); + +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>>)>(isLeaf: true) +external ffi.Pointer SceneManager_createUnlitMaterialInstanceRenderThread( + ffi.Pointer sceneManager, + ffi.Pointer)>> + onComplete +); + @ffi.Native< ffi.Void Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true) @@ -960,7 +970,7 @@ external void remove_animation_component( ffi.Int, ffi.Pointer, ffi.Bool)>(isLeaf: true) -external int create_geometry( +external int SceneManager_createGeometry( ffi.Pointer sceneManager, ffi.Pointer vertices, int numVertices, @@ -1757,7 +1767,7 @@ external void reset_to_rest_pose_render_thread( ffi.Bool, ffi.Pointer>)>( isLeaf: true) -external void create_geometry_render_thread( +external void SceneManager_createGeometryRenderThread( ffi.Pointer sceneManager, ffi.Pointer vertices, int numVertices, diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart index 59771d9c..3cbc1035 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart @@ -1751,7 +1751,7 @@ class ThermionViewerFFI extends ThermionViewer { } var entity = await withIntCallback((callback) => - create_geometry_render_thread( + SceneManager_createGeometryRenderThread( _sceneManager!, geometry.vertices.address, geometry.vertices.length, @@ -2036,7 +2036,9 @@ class ThermionViewerFFI extends ThermionViewer { } Future createUnlitMaterialInstance() async { - var instance = create_unlit_material_instance(_sceneManager!); + var instance = await withPointerCallback((cb) { + SceneManager_createUnlitMaterialInstanceRenderThread(_sceneManager!, cb); + }); if (instance == nullptr) { throw Exception("Failed to create material instance"); } @@ -2109,8 +2111,8 @@ class ThermionViewerFFI extends ThermionViewer { /// Future getActiveCamera() async { final view = (await getViewAt(0)) as FFIView; - final ptr = View_getCamera(view.view); - return FFICamera(ptr, Viewer_getEngine(_viewer!)); + var camera = view.getCamera(); + return camera; } final _hooks = [];