fix:move createUnlitMaterialInstance and createGeometry to render thread

This commit is contained in:
Nick Fisher
2024-10-23 16:39:42 +11:00
parent 636e1961dd
commit 4a9d28e59d
2 changed files with 19 additions and 7 deletions

View File

@@ -421,10 +421,20 @@ external ffi.Pointer<TMaterialInstance> create_material_instance(
@ffi.Native< @ffi.Native<
ffi.Pointer<TMaterialInstance> Function( ffi.Pointer<TMaterialInstance> Function(
ffi.Pointer<TSceneManager>)>(isLeaf: true) ffi.Pointer<TSceneManager>)>(isLeaf: true)
external ffi.Pointer<TMaterialInstance> create_unlit_material_instance( external ffi.Pointer<TMaterialInstance> SceneManager_createUnlitMaterialInstance(
ffi.Pointer<TSceneManager> sceneManager, ffi.Pointer<TSceneManager> sceneManager,
); );
@ffi.Native<
ffi.Pointer<TMaterialInstance> Function(
ffi.Pointer<TSceneManager>, ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<TMaterialInstance>)>>)>(isLeaf: true)
external ffi.Pointer<TMaterialInstance> SceneManager_createUnlitMaterialInstanceRenderThread(
ffi.Pointer<TSceneManager> sceneManager,
ffi.Pointer<ffi.NativeFunction<ffi.Void Function(ffi.Pointer<TMaterialInstance>)>>
onComplete
);
@ffi.Native< @ffi.Native<
ffi.Void Function(ffi.Pointer<TSceneManager>, ffi.Void Function(ffi.Pointer<TSceneManager>,
ffi.Pointer<TMaterialInstance>)>(isLeaf: true) ffi.Pointer<TMaterialInstance>)>(isLeaf: true)
@@ -960,7 +970,7 @@ external void remove_animation_component(
ffi.Int, ffi.Int,
ffi.Pointer<TMaterialInstance>, ffi.Pointer<TMaterialInstance>,
ffi.Bool)>(isLeaf: true) ffi.Bool)>(isLeaf: true)
external int create_geometry( external int SceneManager_createGeometry(
ffi.Pointer<TSceneManager> sceneManager, ffi.Pointer<TSceneManager> sceneManager,
ffi.Pointer<ffi.Float> vertices, ffi.Pointer<ffi.Float> vertices,
int numVertices, int numVertices,
@@ -1757,7 +1767,7 @@ external void reset_to_rest_pose_render_thread(
ffi.Bool, ffi.Bool,
ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>>)>( ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>>)>(
isLeaf: true) isLeaf: true)
external void create_geometry_render_thread( external void SceneManager_createGeometryRenderThread(
ffi.Pointer<TSceneManager> sceneManager, ffi.Pointer<TSceneManager> sceneManager,
ffi.Pointer<ffi.Float> vertices, ffi.Pointer<ffi.Float> vertices,
int numVertices, int numVertices,

View File

@@ -1751,7 +1751,7 @@ class ThermionViewerFFI extends ThermionViewer {
} }
var entity = await withIntCallback((callback) => var entity = await withIntCallback((callback) =>
create_geometry_render_thread( SceneManager_createGeometryRenderThread(
_sceneManager!, _sceneManager!,
geometry.vertices.address, geometry.vertices.address,
geometry.vertices.length, geometry.vertices.length,
@@ -2036,7 +2036,9 @@ class ThermionViewerFFI extends ThermionViewer {
} }
Future<ThermionFFIMaterialInstance> createUnlitMaterialInstance() async { Future<ThermionFFIMaterialInstance> createUnlitMaterialInstance() async {
var instance = create_unlit_material_instance(_sceneManager!); var instance = await withPointerCallback<TMaterialInstance>((cb) {
SceneManager_createUnlitMaterialInstanceRenderThread(_sceneManager!, cb);
});
if (instance == nullptr) { if (instance == nullptr) {
throw Exception("Failed to create material instance"); throw Exception("Failed to create material instance");
} }
@@ -2109,8 +2111,8 @@ class ThermionViewerFFI extends ThermionViewer {
/// ///
Future<Camera> getActiveCamera() async { Future<Camera> getActiveCamera() async {
final view = (await getViewAt(0)) as FFIView; final view = (await getViewAt(0)) as FFIView;
final ptr = View_getCamera(view.view); var camera = view.getCamera();
return FFICamera(ptr, Viewer_getEngine(_viewer!)); return camera;
} }
final _hooks = <Future Function()>[]; final _hooks = <Future Function()>[];