From ddbb4ec5c6e218ac4d7c3d6ac00d1524799b020e Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Fri, 20 Sep 2024 18:31:20 +0800 Subject: [PATCH] rename CameraPtr to TCamera and use named arguments for setCameraLensProjection --- .../viewer/ffi/thermion_dart.g.dart | 66 +++++++++---------- .../viewer/ffi/thermion_viewer_ffi.dart | 9 +-- .../viewer/thermion_viewer_base.dart | 9 ++- .../native/include/APIBoundaryTypes.h | 2 +- .../native/include/ThermionDartApi.h | 32 ++++----- thermion_dart/native/src/ThermionDartApi.cpp | 34 +++++----- thermion_dart/test/integration_test.dart | 2 +- 7 files changed, 77 insertions(+), 77 deletions(-) diff --git a/thermion_dart/lib/thermion_dart/viewer/ffi/thermion_dart.g.dart b/thermion_dart/lib/thermion_dart/viewer/ffi/thermion_dart.g.dart index faee88ce..55dddb20 100644 --- a/thermion_dart/lib/thermion_dart/viewer/ffi/thermion_dart.g.dart +++ b/thermion_dart/lib/thermion_dart/viewer/ffi/thermion_dart.g.dart @@ -766,73 +766,73 @@ external void set_scale( @ffi.Native< ffi.Void Function( - ffi.Pointer, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) + ffi.Pointer, ffi.Float, ffi.Float, ffi.Float)>(isLeaf: true) external void set_camera_exposure( - ffi.Pointer camera, + ffi.Pointer camera, double aperture, double shutterSpeed, double sensitivity, ); -@ffi.Native, double4x4)>(isLeaf: true) +@ffi.Native, double4x4)>(isLeaf: true) external void set_camera_model_matrix( - ffi.Pointer camera, + ffi.Pointer camera, double4x4 matrix, ); -@ffi.Native Function(ffi.Pointer, EntityId)>( +@ffi.Native Function(ffi.Pointer, EntityId)>( isLeaf: true) -external ffi.Pointer get_camera( +external ffi.Pointer get_camera( ffi.Pointer viewer, int entity, ); -@ffi.Native)>(isLeaf: true) +@ffi.Native)>(isLeaf: true) external double get_camera_focal_length( - ffi.Pointer camera, + ffi.Pointer camera, ); -@ffi.Native)>(isLeaf: true) +@ffi.Native)>(isLeaf: true) external double4x4 get_camera_model_matrix( - ffi.Pointer camera, + ffi.Pointer camera, ); -@ffi.Native)>(isLeaf: true) +@ffi.Native)>(isLeaf: true) external double4x4 get_camera_view_matrix( - ffi.Pointer camera, + ffi.Pointer camera, ); -@ffi.Native)>(isLeaf: true) +@ffi.Native)>(isLeaf: true) external double4x4 get_camera_projection_matrix( - ffi.Pointer camera, + ffi.Pointer camera, ); -@ffi.Native)>(isLeaf: true) +@ffi.Native)>(isLeaf: true) external double4x4 get_camera_culling_projection_matrix( - ffi.Pointer camera, + ffi.Pointer camera, ); -@ffi.Native Function(ffi.Pointer)>( +@ffi.Native Function(ffi.Pointer)>( isLeaf: true) external ffi.Pointer get_camera_frustum( - ffi.Pointer camera, + ffi.Pointer camera, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, double4x4, ffi.Double, + ffi.Void Function(ffi.Pointer, double4x4, ffi.Double, ffi.Double)>(isLeaf: true) external void set_camera_projection_matrix( - ffi.Pointer camera, + ffi.Pointer camera, double4x4 matrix, double near, double far, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Double, ffi.Double, + ffi.Void Function(ffi.Pointer, ffi.Double, ffi.Double, ffi.Double, ffi.Double, ffi.Bool)>(isLeaf: true) external void set_camera_projection_from_fov( - ffi.Pointer camera, + ffi.Pointer camera, double fovInDegrees, double aspect, double near, @@ -840,36 +840,36 @@ external void set_camera_projection_from_fov( bool horizontal, ); -@ffi.Native)>(isLeaf: true) +@ffi.Native)>(isLeaf: true) external double get_camera_near( - ffi.Pointer camera, + ffi.Pointer camera, ); -@ffi.Native)>(isLeaf: true) +@ffi.Native)>(isLeaf: true) external double get_camera_culling_far( - ffi.Pointer camera, + ffi.Pointer camera, ); -@ffi.Native, ffi.Bool)>(isLeaf: true) +@ffi.Native, ffi.Bool)>(isLeaf: true) external double get_camera_fov( - ffi.Pointer camera, + ffi.Pointer camera, bool horizontal, ); @ffi.Native< - ffi.Void Function(ffi.Pointer, ffi.Double, ffi.Double, + ffi.Void Function(ffi.Pointer, ffi.Double, ffi.Double, ffi.Double, ffi.Double)>(isLeaf: true) external void set_camera_lens_projection( - ffi.Pointer camera, + ffi.Pointer camera, double near, double far, double aspect, double focalLength, ); -@ffi.Native, ffi.Float)>(isLeaf: true) +@ffi.Native, ffi.Float)>(isLeaf: true) external void set_camera_focus_distance( - ffi.Pointer camera, + ffi.Pointer camera, double focusDistance, ); @@ -1848,7 +1848,7 @@ external void unproject_texture_ffi( ffi.Pointer> callback, ); -final class CameraPtr extends ffi.Opaque {} +final class TCamera extends ffi.Opaque {} final class TMaterialInstance extends ffi.Opaque {} diff --git a/thermion_dart/lib/thermion_dart/viewer/ffi/thermion_viewer_ffi.dart b/thermion_dart/lib/thermion_dart/viewer/ffi/thermion_viewer_ffi.dart index e82a6a8c..5b100b5c 100644 --- a/thermion_dart/lib/thermion_dart/viewer/ffi/thermion_viewer_ffi.dart +++ b/thermion_dart/lib/thermion_dart/viewer/ffi/thermion_viewer_ffi.dart @@ -18,10 +18,6 @@ const ThermionEntity _FILAMENT_ASSET_ERROR = 0; typedef RenderCallback = Pointer)>>; -double kNear = 0.05; -double kFar = 1000.0; -double kFocalLength = 28.0; - class ThermionViewerFFI extends ThermionViewer { final _logger = Logger("ThermionViewerFFI"); @@ -1354,8 +1350,9 @@ class ThermionViewerFFI extends ThermionViewer { /// /// @override - Future setCameraLensProjection( - double near, double far, double aspect, double focalLength) async { + Future setCameraLensProjection({double near = kNear, double far = kFar, double? aspect, + double focalLength = kFocalLength}) async { + aspect ??= viewportDimensions.$1 / viewportDimensions.$2; var mainCamera = get_camera(_viewer!, get_main_camera(_viewer!)); set_camera_lens_projection(mainCamera, near, far, aspect, focalLength); } diff --git a/thermion_dart/lib/thermion_dart/viewer/thermion_viewer_base.dart b/thermion_dart/lib/thermion_dart/viewer/thermion_viewer_base.dart index a67dee2c..105b9897 100644 --- a/thermion_dart/lib/thermion_dart/viewer/thermion_viewer_base.dart +++ b/thermion_dart/lib/thermion_dart/viewer/thermion_viewer_base.dart @@ -1,5 +1,4 @@ import 'package:thermion_dart/thermion_dart/viewer/events.dart'; -import 'package:thermion_dart/thermion_dart/viewer/ffi/thermion_viewer_ffi.dart'; import 'shared_types/shared_types.dart'; export 'shared_types/shared_types.dart'; @@ -11,6 +10,10 @@ import 'package:vector_math/vector_math_64.dart'; import 'dart:async'; import 'package:animation_tools_dart/animation_tools_dart.dart'; +const double kNear = 0.05; +const double kFar = 1000.0; +const double kFocalLength = 28.0; + abstract class ThermionViewer { /// /// A Future that resolves when the underlying rendering context has been successfully created. @@ -490,8 +493,8 @@ abstract class ThermionViewer { /// /// /// - Future setCameraLensProjection( - double near, double far, double aspect, double focalLength); + Future setCameraLensProjection({double near = kNear, double far = kFar, double? aspect, + double focalLength = kFocalLength}); /// /// Sets the focus distance for the camera. diff --git a/thermion_dart/native/include/APIBoundaryTypes.h b/thermion_dart/native/include/APIBoundaryTypes.h index b811c330..e4f7d730 100644 --- a/thermion_dart/native/include/APIBoundaryTypes.h +++ b/thermion_dart/native/include/APIBoundaryTypes.h @@ -9,7 +9,7 @@ extern "C" typedef int32_t EntityId; typedef int32_t _ManipulatorMode; - typedef struct CameraPtr CameraPtr; + typedef struct TCamera TCamera; typedef struct TMaterialInstance TMaterialInstance; struct TMaterialKey { diff --git a/thermion_dart/native/include/ThermionDartApi.h b/thermion_dart/native/include/ThermionDartApi.h index 38ea24f4..a9108025 100644 --- a/thermion_dart/native/include/ThermionDartApi.h +++ b/thermion_dart/native/include/ThermionDartApi.h @@ -208,22 +208,22 @@ extern "C" // Camera methods EMSCRIPTEN_KEEPALIVE void set_view_frustum_culling(const void *const viewer, bool enabled); - EMSCRIPTEN_KEEPALIVE void set_camera_exposure(CameraPtr *camera, float aperture, float shutterSpeed, float sensitivity); - EMSCRIPTEN_KEEPALIVE void set_camera_model_matrix(CameraPtr *camera, double4x4 matrix); - EMSCRIPTEN_KEEPALIVE CameraPtr *get_camera(const void *const viewer, EntityId entity); - EMSCRIPTEN_KEEPALIVE double get_camera_focal_length(CameraPtr *const camera); - EMSCRIPTEN_KEEPALIVE double4x4 get_camera_model_matrix(CameraPtr *const camera); - EMSCRIPTEN_KEEPALIVE double4x4 get_camera_view_matrix(CameraPtr *const camera); - EMSCRIPTEN_KEEPALIVE double4x4 get_camera_projection_matrix(CameraPtr *const camera); - EMSCRIPTEN_KEEPALIVE double4x4 get_camera_culling_projection_matrix(CameraPtr *const camera); - EMSCRIPTEN_KEEPALIVE const double *const get_camera_frustum(CameraPtr *const camera); - EMSCRIPTEN_KEEPALIVE void set_camera_projection_matrix(CameraPtr *camera, double4x4 matrix, double near, double far); - EMSCRIPTEN_KEEPALIVE void set_camera_projection_from_fov(CameraPtr *camera, double fovInDegrees, double aspect, double near, double far, bool horizontal); - EMSCRIPTEN_KEEPALIVE double get_camera_near(CameraPtr *camera); - EMSCRIPTEN_KEEPALIVE double get_camera_culling_far(CameraPtr *camera); - EMSCRIPTEN_KEEPALIVE float get_camera_fov(CameraPtr *camera, bool horizontal); - EMSCRIPTEN_KEEPALIVE void set_camera_lens_projection(CameraPtr *camera, double near, double far, double aspect, double focalLength); - EMSCRIPTEN_KEEPALIVE void set_camera_focus_distance(CameraPtr *camera, float focusDistance); + EMSCRIPTEN_KEEPALIVE void set_camera_exposure(TCamera *camera, float aperture, float shutterSpeed, float sensitivity); + EMSCRIPTEN_KEEPALIVE void set_camera_model_matrix(TCamera *camera, double4x4 matrix); + EMSCRIPTEN_KEEPALIVE TCamera *get_camera(const void *const viewer, EntityId entity); + EMSCRIPTEN_KEEPALIVE double get_camera_focal_length(TCamera *const camera); + EMSCRIPTEN_KEEPALIVE double4x4 get_camera_model_matrix(TCamera *const camera); + EMSCRIPTEN_KEEPALIVE double4x4 get_camera_view_matrix(TCamera *const camera); + EMSCRIPTEN_KEEPALIVE double4x4 get_camera_projection_matrix(TCamera *const camera); + EMSCRIPTEN_KEEPALIVE double4x4 get_camera_culling_projection_matrix(TCamera *const camera); + EMSCRIPTEN_KEEPALIVE const double *const get_camera_frustum(TCamera *const camera); + EMSCRIPTEN_KEEPALIVE void set_camera_projection_matrix(TCamera *camera, double4x4 matrix, double near, double far); + EMSCRIPTEN_KEEPALIVE void set_camera_projection_from_fov(TCamera *camera, double fovInDegrees, double aspect, double near, double far, bool horizontal); + EMSCRIPTEN_KEEPALIVE double get_camera_near(TCamera *camera); + EMSCRIPTEN_KEEPALIVE double get_camera_culling_far(TCamera *camera); + EMSCRIPTEN_KEEPALIVE float get_camera_fov(TCamera *camera, bool horizontal); + EMSCRIPTEN_KEEPALIVE void set_camera_lens_projection(TCamera *camera, double near, double far, double aspect, double focalLength); + EMSCRIPTEN_KEEPALIVE void set_camera_focus_distance(TCamera *camera, float focusDistance); EMSCRIPTEN_KEEPALIVE void set_camera_manipulator_options(const void *const viewer, _ManipulatorMode mode, double orbitSpeedX, double orbitSpeedY, double zoomSpeed); EMSCRIPTEN_KEEPALIVE int hide_mesh(void *sceneManager, EntityId entity, const char *meshName); diff --git a/thermion_dart/native/src/ThermionDartApi.cpp b/thermion_dart/native/src/ThermionDartApi.cpp index b3b96b8b..770ec434 100644 --- a/thermion_dart/native/src/ThermionDartApi.cpp +++ b/thermion_dart/native/src/ThermionDartApi.cpp @@ -217,80 +217,80 @@ extern "C" return ((FilamentViewer *)viewer)->setCamera(asset, nodeName); } - EMSCRIPTEN_KEEPALIVE float get_camera_fov(CameraPtr *camera, bool horizontal) + EMSCRIPTEN_KEEPALIVE float get_camera_fov(TCamera *camera, bool horizontal) { auto cam = reinterpret_cast(camera); return cam->getFieldOfViewInDegrees(horizontal ? Camera::Fov::HORIZONTAL : Camera::Fov::VERTICAL); } - EMSCRIPTEN_KEEPALIVE double get_camera_focal_length(CameraPtr *const camera) + EMSCRIPTEN_KEEPALIVE double get_camera_focal_length(TCamera *const camera) { auto cam = reinterpret_cast(camera); return cam->getFocalLength(); } - EMSCRIPTEN_KEEPALIVE void set_camera_projection_from_fov(CameraPtr *camera, double fovInDegrees, double aspect, double near, double far, bool horizontal) + EMSCRIPTEN_KEEPALIVE void set_camera_projection_from_fov(TCamera *camera, double fovInDegrees, double aspect, double near, double far, bool horizontal) { auto cam = reinterpret_cast(camera); cam->setProjection(fovInDegrees, aspect, near, far, horizontal ? Camera::Fov::HORIZONTAL : Camera::Fov::VERTICAL); } - EMSCRIPTEN_KEEPALIVE CameraPtr *get_camera(const void *const viewer, EntityId entity) + EMSCRIPTEN_KEEPALIVE TCamera *get_camera(const void *const viewer, EntityId entity) { auto filamentCamera = ((FilamentViewer *)viewer)->getCamera(entity); - return reinterpret_cast(filamentCamera); + return reinterpret_cast(filamentCamera); } - double4x4 get_camera_model_matrix(CameraPtr *camera) + double4x4 get_camera_model_matrix(TCamera *camera) { const auto &mat = reinterpret_cast(camera)->getModelMatrix(); return convert_mat4_to_double4x4(mat); } - double4x4 get_camera_view_matrix(CameraPtr *camera) + double4x4 get_camera_view_matrix(TCamera *camera) { const auto &mat = reinterpret_cast(camera)->getViewMatrix(); return convert_mat4_to_double4x4(mat); } - double4x4 get_camera_projection_matrix(CameraPtr *camera) + double4x4 get_camera_projection_matrix(TCamera *camera) { const auto &mat = reinterpret_cast(camera)->getProjectionMatrix(); return convert_mat4_to_double4x4(mat); } - double4x4 get_camera_culling_projection_matrix(CameraPtr *camera) + double4x4 get_camera_culling_projection_matrix(TCamera *camera) { const auto &mat = reinterpret_cast(camera)->getCullingProjectionMatrix(); return convert_mat4_to_double4x4(mat); } - void set_camera_projection_matrix(CameraPtr *camera, double4x4 matrix, double near, double far) + void set_camera_projection_matrix(TCamera *camera, double4x4 matrix, double near, double far) { auto cam = reinterpret_cast(camera); const auto &mat = convert_double4x4_to_mat4(matrix); cam->setCustomProjection(mat, near, far); } - void set_camera_lens_projection(CameraPtr *camera, double near, double far, double aspect, double focalLength) + void set_camera_lens_projection(TCamera *camera, double near, double far, double aspect, double focalLength) { auto cam = reinterpret_cast(camera); cam->setLensProjection(focalLength, aspect, near, far); } - double get_camera_near(CameraPtr *camera) + double get_camera_near(TCamera *camera) { auto cam = reinterpret_cast(camera); return cam->getNear(); } - double get_camera_culling_far(CameraPtr *camera) + double get_camera_culling_far(TCamera *camera) { auto cam = reinterpret_cast(camera); return cam->getCullingFar(); } - const double *const get_camera_frustum(CameraPtr *camera) + const double *const get_camera_frustum(TCamera *camera) { const auto frustum = reinterpret_cast(camera)->getFrustum(); @@ -319,19 +319,19 @@ extern "C" ((FilamentViewer *)viewer)->setViewFrustumCulling(enabled); } - EMSCRIPTEN_KEEPALIVE void set_camera_focus_distance(CameraPtr *camera, float distance) + EMSCRIPTEN_KEEPALIVE void set_camera_focus_distance(TCamera *camera, float distance) { auto *cam = reinterpret_cast(camera); cam->setFocusDistance(distance); } - EMSCRIPTEN_KEEPALIVE void set_camera_exposure(CameraPtr *camera, float aperture, float shutterSpeed, float sensitivity) + EMSCRIPTEN_KEEPALIVE void set_camera_exposure(TCamera *camera, float aperture, float shutterSpeed, float sensitivity) { auto *cam = reinterpret_cast(camera); cam->setExposure(aperture, shutterSpeed, sensitivity); } - EMSCRIPTEN_KEEPALIVE void set_camera_model_matrix(CameraPtr *camera, double4x4 matrix) + EMSCRIPTEN_KEEPALIVE void set_camera_model_matrix(TCamera *camera, double4x4 matrix) { auto *cam = reinterpret_cast(camera); const filament::math::mat4 &mat = convert_double4x4_to_mat4(matrix); diff --git a/thermion_dart/test/integration_test.dart b/thermion_dart/test/integration_test.dart index 22d130ef..d940f47e 100644 --- a/thermion_dart/test/integration_test.dart +++ b/thermion_dart/test/integration_test.dart @@ -92,7 +92,7 @@ void main() async { print(frustum.plane5.normal); print(frustum.plane5.constant); - await viewer.setCameraLensProjection(10.0, 1000.0, 1.0, 28.0); + await viewer.setCameraLensProjection(near:10.0, far:1000.0, aspect:1.0, focalLength:28.0); frustum = await viewer.getCameraFrustum(); print(frustum.plane5.normal); print(frustum.plane5.constant);