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.Pointer<TMaterialInstance> Function(
ffi.Pointer<TSceneManager>)>(isLeaf: true)
external ffi.Pointer<TMaterialInstance> create_unlit_material_instance(
external ffi.Pointer<TMaterialInstance> SceneManager_createUnlitMaterialInstance(
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.Void Function(ffi.Pointer<TSceneManager>,
ffi.Pointer<TMaterialInstance>)>(isLeaf: true)
@@ -960,7 +970,7 @@ external void remove_animation_component(
ffi.Int,
ffi.Pointer<TMaterialInstance>,
ffi.Bool)>(isLeaf: true)
external int create_geometry(
external int SceneManager_createGeometry(
ffi.Pointer<TSceneManager> sceneManager,
ffi.Pointer<ffi.Float> vertices,
int numVertices,
@@ -1757,7 +1767,7 @@ external void reset_to_rest_pose_render_thread(
ffi.Bool,
ffi.Pointer<ffi.NativeFunction<ffi.Void Function(EntityId)>>)>(
isLeaf: true)
external void create_geometry_render_thread(
external void SceneManager_createGeometryRenderThread(
ffi.Pointer<TSceneManager> sceneManager,
ffi.Pointer<ffi.Float> vertices,
int numVertices,

View File

@@ -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<ThermionFFIMaterialInstance> createUnlitMaterialInstance() async {
var instance = create_unlit_material_instance(_sceneManager!);
var instance = await withPointerCallback<TMaterialInstance>((cb) {
SceneManager_createUnlitMaterialInstanceRenderThread(_sceneManager!, cb);
});
if (instance == nullptr) {
throw Exception("Failed to create material instance");
}
@@ -2109,8 +2111,8 @@ class ThermionViewerFFI extends ThermionViewer {
///
Future<Camera> 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 = <Future Function()>[];