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.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,
|
||||||
|
|||||||
@@ -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()>[];
|
||||||
|
|||||||
Reference in New Issue
Block a user