fix:move createUnlitMaterialInstance and createGeometry to render thread
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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()>[];
|
||||
|
||||
Reference in New Issue
Block a user