diff --git a/thermion_dart/ffigen/native.yaml b/thermion_dart/ffigen/native.yaml index eab5cd56..67816336 100644 --- a/thermion_dart/ffigen/native.yaml +++ b/thermion_dart/ffigen/native.yaml @@ -19,3 +19,4 @@ enums: - TPrimitiveType - TPixelDataFormat - TPixelDataType + diff --git a/thermion_dart/lib/src/input/src/implementations/third_person_camera_delegate.dart b/thermion_dart/lib/src/input/src/implementations/third_person_camera_delegate.dart index 8e2ebb4a..212e43d9 100644 --- a/thermion_dart/lib/src/input/src/implementations/third_person_camera_delegate.dart +++ b/thermion_dart/lib/src/input/src/implementations/third_person_camera_delegate.dart @@ -8,7 +8,7 @@ import '../input_handler.dart'; class OverTheShoulderCameraDelegate implements InputHandlerDelegate { final ThermionViewer viewer; - late ThermionEntity player; + late ThermionAsset player; late Camera camera; final double rotationSensitivity; @@ -79,7 +79,7 @@ class OverTheShoulderCameraDelegate implements InputHandlerDelegate { return null; } - Matrix4 currentPlayerTransform = await viewer.getWorldTransform(player); + Matrix4 currentPlayerTransform = await player.getWorldTransform(); // first we need to convert the move vector to player space var newTransform = @@ -87,7 +87,7 @@ class OverTheShoulderCameraDelegate implements InputHandlerDelegate { _queuedMoveDelta = Vector3.zero(); Matrix4 newPlayerTransform = newTransform * currentPlayerTransform; - await viewer.setTransform(player, newPlayerTransform); + await player.setTransform(newPlayerTransform); if (_queuedZoomDelta != 0.0) { // Ignore zoom @@ -112,8 +112,8 @@ class OverTheShoulderCameraDelegate implements InputHandlerDelegate { var newCameraTransform = newPlayerTransform * newCameraViewMatrix; await camera.setTransform(newCameraTransform); - await viewer.queueTransformUpdates( - [camera.getEntity(), player], [newCameraTransform, newPlayerTransform]); + // await viewer.queueTransformUpdates( + // [camera.getEntity(), player], [newCameraTransform, newPlayerTransform]); onUpdate?.call(newPlayerTransform); _executing = false; return newCameraTransform; diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/background_image.dart b/thermion_dart/lib/src/viewer/src/ffi/src/background_image.dart index 208a35a4..b283eb16 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/background_image.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/background_image.dart @@ -263,7 +263,7 @@ class BackgroundImage extends ThermionAsset { } @override - Future setTransform(ThermionEntity entity, Matrix4 transform) { + Future setTransform(Matrix4 transform, { ThermionEntity? entity }) { // TODO: implement setTransform throw UnimplementedError(); } diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_filament_app.dart b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_filament_app.dart index 23299d85..8585d01d 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_filament_app.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_filament_app.dart @@ -425,7 +425,8 @@ class FFIFilamentApp extends FilamentApp { /// @override Future render() async { - RenderTicker_renderRenderThread(renderTicker, 0); + await withVoidCallback((cb) => + RenderTicker_renderRenderThread(renderTicker, 0, cb)); } /// diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_view.dart b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_view.dart index ea1c5287..197fdbfc 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/ffi_view.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/ffi_view.dart @@ -82,7 +82,7 @@ class FFIView extends View { @override Future setToneMapper(ToneMapper mapper) async { View_setToneMappingRenderThread( - view, app.engine, TToneMapping.values[mapper.index].value); + view, app.engine, TToneMapping.values[mapper.index]); } Future setStencilBufferEnabled(bool enabled) async { diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart index ac69a5e2..636efadc 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_dart.g.dart @@ -333,18 +333,22 @@ external void LightManager_setDirection( double z, ); -@ffi.Native, ffi.UnsignedInt)>( - symbol: "LightManager_createLight", isLeaf: true) +@ffi.Native< + ffi.Int Function(ffi.Pointer, ffi.Pointer, + ffi.UnsignedInt)>(symbol: "LightManager_createLight", isLeaf: true) external int _LightManager_createLight( + ffi.Pointer tEngine, ffi.Pointer tLightManager, int tLightTtype, ); int LightManager_createLight( + ffi.Pointer tEngine, ffi.Pointer tLightManager, TLightType tLightTtype, ) => _LightManager_createLight( + tEngine, tLightManager, tLightTtype.value, ); @@ -1492,11 +1496,13 @@ external void RenderLoop_requestAnimationFrame( ffi.Pointer onComplete, ); -@ffi.Native, ffi.Uint64)>( - isLeaf: true) +@ffi.Native< + ffi.Void Function(ffi.Pointer, ffi.Uint64, + ffi.Pointer>)>(isLeaf: true) external void RenderTicker_renderRenderThread( ffi.Pointer tRenderTicker, int frameTimeInNanos, + ffi.Pointer> onComplete, ); @ffi.Native< @@ -1896,14 +1902,26 @@ external void Material_createInstanceRenderThread( ); @ffi.Native< - ffi.Void Function( - ffi.Pointer, ffi.Pointer, ffi.Int)>(isLeaf: true) -external void View_setToneMappingRenderThread( + ffi.Void Function( + ffi.Pointer, ffi.Pointer, ffi.UnsignedInt)>( + symbol: "View_setToneMappingRenderThread", isLeaf: true) +external void _View_setToneMappingRenderThread( ffi.Pointer tView, ffi.Pointer tEngine, int toneMapping, ); +void View_setToneMappingRenderThread( + ffi.Pointer tView, + ffi.Pointer tEngine, + TToneMapping toneMapping, +) => + _View_setToneMappingRenderThread( + tView, + tEngine, + toneMapping.value, + ); + @ffi.Native, ffi.Bool, ffi.Double)>( isLeaf: true) external void View_setBloomRenderThread( @@ -2963,8 +2981,8 @@ ffi.Pointer Engine_create( disableHandleUseAfterFreeCheck, ); -@ffi.Native Function(ffi.Pointer)>(isLeaf: true) -external ffi.Pointer Engine_destroy( +@ffi.Native)>(isLeaf: true) +external void Engine_destroy( ffi.Pointer tEngine, ); @@ -3296,10 +3314,12 @@ external Aabb3 SceneAsset_getBoundingBox( ffi.Pointer asset, ); -@ffi.Native Function(ffi.Pointer)>( - isLeaf: true) +@ffi.Native< + ffi.Pointer Function( + ffi.Pointer, ffi.Pointer)>(isLeaf: true) external ffi.Pointer AnimationManager_create( ffi.Pointer tEngine, + ffi.Pointer tScene, ); @ffi.Native, EntityId)>( diff --git a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart index 9f7f694c..84a8787d 100644 --- a/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart +++ b/thermion_dart/lib/src/viewer/src/ffi/src/thermion_viewer_ffi.dart @@ -128,7 +128,7 @@ class ThermionViewerFFI extends ThermionViewer { /// @override Future render() async { - RenderTicker_renderRenderThread(app.renderTicker, 0); + await withVoidCallback((cb) => RenderTicker_renderRenderThread(app.renderTicker, 0, cb)); } double _msPerFrame = 1000.0 / 60.0; @@ -320,7 +320,7 @@ class ThermionViewerFFI extends ThermionViewer { /// @override Future addDirectLight(DirectLight directLight) async { - var entity = LightManager_createLight( + var entity = LightManager_createLight(app.engine, app.lightManager, TLightType.values[directLight.type.index]); if (entity == FILAMENT_ASSET_ERROR) { throw Exception("Failed to add light to scene");