refactor!: move light methods from FilamentViewer to SceneManager/TLightManager and rename clearLights/clearAssets to destroyLights/destroyAssets

This commit is contained in:
Nick Fisher
2025-01-04 14:43:37 +08:00
parent 3e181b6aff
commit baf86d1ade
21 changed files with 355 additions and 272 deletions

View File

@@ -29,6 +29,7 @@ class ThermionViewerFFI extends ThermionViewer {
Pointer<TMaterialProvider>? _unlitMaterialProvider;
Pointer<TMaterialProvider>? _ubershaderMaterialProvider;
Pointer<TTransformManager>? _transformManager;
Pointer<TLightManager>? _lightManager;
Pointer<TRenderableManager>? _renderableManager;
Pointer<TViewer>? _viewer;
Pointer<TAnimationManager>? _animationManager;
@@ -197,6 +198,7 @@ class ThermionViewerFFI extends ThermionViewer {
SceneManager_getUbershaderMaterialProvider(_sceneManager!);
_engine = Viewer_getEngine(_viewer!);
_transformManager = Engine_getTransformManager(_engine!);
_lightManager = Engine_getLightManager(_engine!);
_animationManager = SceneManager_getAnimationManager(_sceneManager!);
_nameComponentManager =
SceneManager_getNameComponentManager(_sceneManager!);
@@ -284,11 +286,11 @@ class ThermionViewerFFI extends ThermionViewer {
}
_disposing = true;
await setRendering(false);
await clearEntities();
await destroyAssets();
for (final mInstance in _materialInstances) {
await mInstance.dispose();
}
await clearLights();
await destroyLights();
Viewer_destroyOnRenderThread(_viewer!);
_sceneManager = null;
@@ -450,8 +452,8 @@ class ThermionViewerFFI extends ThermionViewer {
///
@override
Future<ThermionEntity> addDirectLight(DirectLight directLight) async {
var entity = add_light(
_viewer!,
var entity = SceneManager_addLight(
_sceneManager!,
directLight.type.index,
directLight.color,
directLight.intensity,
@@ -480,15 +482,15 @@ class ThermionViewerFFI extends ThermionViewer {
///
@override
Future removeLight(ThermionEntity entity) async {
remove_light(_viewer!, entity);
SceneManager_removeLight(_sceneManager!, entity);
}
///
///
///
@override
Future clearLights() async {
clear_lights(_viewer!);
Future destroyLights() async {
SceneManager_destroyLights(_sceneManager!);
}
///
@@ -987,7 +989,7 @@ class ThermionViewerFFI extends ThermionViewer {
///
///
@override
Future clearEntities() async {
Future destroyAssets() async {
await withVoidCallback((callback) {
SceneManager_destroyAllRenderThread(_sceneManager!, callback);
});
@@ -1314,7 +1316,7 @@ class ThermionViewerFFI extends ThermionViewer {
@override
Future setLightPosition(
ThermionEntity lightEntity, double x, double y, double z) async {
set_light_position(_viewer!, lightEntity, x, y, z);
LightManager_setPosition(_lightManager!, lightEntity, x, y, z);
}
///
@@ -1324,8 +1326,8 @@ class ThermionViewerFFI extends ThermionViewer {
Future setLightDirection(
ThermionEntity lightEntity, Vector3 direction) async {
direction.normalize();
set_light_direction(
_viewer!, lightEntity, direction.x, direction.y, direction.z);
LightManager_setPosition(
_lightManager!, lightEntity, direction.x, direction.y, direction.z);
}
///

View File

@@ -206,7 +206,7 @@ abstract class ThermionViewer {
///
/// Remove all lights (excluding IBL) from the scene.
///
Future clearLights();
Future destroyLights();
///
/// Load the .glb asset at the given path, adding all entities to the scene.
@@ -386,7 +386,7 @@ abstract class ThermionViewer {
/// Removes/destroys all renderable entities from the scene (including cameras).
/// All [ThermionEntity] handles will no longer be valid after this method is called; ensure you immediately discard all references to all entities once this method is complete.
///
Future clearEntities();
Future destroyAssets();
///
/// Schedules the glTF animation at [index] in [asset] to start playing on the next frame.

View File

@@ -55,14 +55,14 @@ class ThermionViewerStub extends ThermionViewer {
}
@override
Future clearEntities() {
// TODO: implement clearEntities
Future destroyAssets() {
// TODO: implement destroyAssets
throw UnimplementedError();
}
@override
Future clearLights() {
// TODO: implement clearLights
Future destroyLights() {
// TODO: implement destroyLights
throw UnimplementedError();
}
@@ -1008,8 +1008,8 @@ class ThermionViewerStub extends ThermionViewer {
}
@override
Future removeEntity(ThermionAsset asset) {
// TODO: implement removeEntity
Future removeAsset(ThermionAsset asset) {
// TODO: implement removeAsset
throw UnimplementedError();
}
@@ -1074,8 +1074,8 @@ class ThermionViewerStub extends ThermionViewer {
}
@override
Future removeEntityFromScene(ThermionEntity entity) {
// TODO: implement removeEntityFromScene
Future removeAssetFromScene(ThermionEntity entity) {
// TODO: implement removeAssetFromScene
throw UnimplementedError();
}

View File

@@ -131,7 +131,7 @@
// JSPromise removeLight(ThermionEntity light) => viewer.removeLight(light).toJS;
// @JSExport()
// JSPromise clearLights() => viewer.clearLights().toJS;
// JSPromise destroyLights() => viewer.destroyLights().toJS;
// @JSExport()
// JSPromise<JSNumber> loadGlb(String path, {int numInstances = 1}) {
@@ -319,12 +319,12 @@
// }
// @JSExport()
// JSPromise removeEntity(ThermionEntity entity) =>
// viewer.removeEntity(entity).toJS;
// JSPromise removeAsset(ThermionEntity entity) =>
// viewer.removeAsset(entity).toJS;
// @JSExport()
// JSPromise clearEntities() {
// return viewer.clearEntities().toJS;
// JSPromise destroyAssets() {
// return viewer.destroyAssets().toJS;
// }
// @JSExport()

View File

@@ -161,8 +161,8 @@
// }
// @override
// Future<void> clearLights() async {
// await _shim.clearLights().toDart;
// Future<void> destroyLights() async {
// await _shim.destroyLights().toDart;
// }
// @override
@@ -339,13 +339,13 @@
// }
// @override
// Future<void> removeEntity(ThermionEntity entity) async {
// await _shim.removeEntity(entity).toDart;
// Future<void> removeAsset(ThermionEntity entity) async {
// await _shim.removeAsset(entity).toDart;
// }
// @override
// Future<void> clearEntities() async {
// await _shim.clearEntities().toDart;
// Future<void> destroyAssets() async {
// await _shim.destroyAssets().toDart;
// }
// @override

View File

@@ -81,8 +81,8 @@ extension type ThermionViewerJSShim(JSObject _) implements JSObject {
@JS('removeLight')
external JSPromise removeLight(ThermionEntity light);
@JS('clearLights')
external JSPromise clearLights();
@JS('destroyLights')
external JSPromise destroyLights();
@JS('loadGlb')
external JSPromise<JSNumber> loadGlb(String path, int numInstances);
@@ -164,11 +164,11 @@ extension type ThermionViewerJSShim(JSObject _) implements JSObject {
JSNumber fadeOutInSecs,
JSNumber maxDelta);
@JS('removeEntity')
external JSPromise removeEntity(ThermionEntity entity);
@JS('removeAsset')
external JSPromise removeAsset(ThermionEntity entity);
@JS('clearEntities')
external JSPromise clearEntities();
@JS('destroyAssets')
external JSPromise destroyAssets();
@JS('zoomBegin')
external JSPromise zoomBegin();