From 168f46cf567c27f01fa572977de071a33301ce93 Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Thu, 4 Jul 2024 14:19:04 +0800 Subject: [PATCH] add shadow methods to wasm/js viewers --- .../web/interop/thermion_viewer_js.dart | 15 ++++++++ .../web/interop/thermion_viewer_js_shim.dart | 12 +++++++ .../web/interop/thermion_viewer_wasm.dart | 34 +++++++++++++++++-- 3 files changed, 59 insertions(+), 2 deletions(-) diff --git a/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_js.dart b/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_js.dart index ab325097..6c924179 100644 --- a/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_js.dart +++ b/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_js.dart @@ -826,4 +826,19 @@ class ThermionViewerJS implements ThermionViewer { void onDispose(Future Function() callback) { _onDispose.add(callback); } + + @override + Future setShadowType(ShadowType shadowType) { + return _shim.setShadowType(shadowType).toDart; + } + + @override + Future setShadowsEnabled(bool enabled) { + return _shim.setShadowsEnabled(enabled).toDart; + } + + @override + Future setSoftShadowOptions(double penumbraScale, double penumbraRatioScale) { + return _shim.setSoftShadowOptions(penumbraScale, penumbraRatioScale).toDart; + } } diff --git a/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_js_shim.dart b/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_js_shim.dart index 41dd763d..b7492b4a 100644 --- a/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_js_shim.dart +++ b/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_js_shim.dart @@ -405,5 +405,17 @@ extension type ThermionViewerJSShim(JSObject _) implements JSObject { @JS('setBoneTransform') external JSPromise setBoneTransform( ThermionEntity entity, int boneIndex, JSArray transform, int skinIndex); + + @JS('setShadowsEnabled') + external JSPromise setShadowsEnabled( + bool enabled); + + @JS('setShadowType') + external JSPromise setShadowType( + ShadowType shadowType); + + @JS('setSoftShadowOptions') + external JSPromise setSoftShadowOptions( + double penumbraScale, double penumbraRatioScale); } diff --git a/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_wasm.dart b/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_wasm.dart index b881443f..ad867119 100644 --- a/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_wasm.dart +++ b/thermion_dart/lib/thermion_dart/compatibility/web/interop/thermion_viewer_wasm.dart @@ -631,8 +631,8 @@ class ThermionViewerWasm implements ThermionViewer { final promise = _module.ccall( "load_gltf", "int", - ["void*".toJS, "string".toJS, "string".toJS, "bool".toJS].toJS, - [_sceneManager!, path.toJS, relativeResourcePath.toJS, force.toJS].toJS, + ["void*".toJS, "string".toJS, "string".toJS].toJS, + [_sceneManager!, path.toJS, relativeResourcePath.toJS].toJS, {"async": true}.jsify()) as JSPromise; final entityId = (await promise.toDart).toDartInt; if (entityId == -1) { @@ -1847,4 +1847,34 @@ class ThermionViewerWasm implements ThermionViewer { // TODO: implement zoomUpdate throw UnimplementedError(); } + + @override + Future setShadowType(ShadowType shadowType) async { + _module.ccall( + "set_shadow_type", + "void", + ["void*".toJS, "int".toJS].toJS, + [_viewer!, shadowType.index.toJS].toJS, + null); + } + + @override + Future setShadowsEnabled(bool enabled) async { + _module.ccall( + "set_shadows_enabled", + "void", + ["void*".toJS, "bool".toJS].toJS, + [_viewer!, enabled.toJS].toJS, + null); + } + + @override + Future setSoftShadowOptions(double penumbraScale, double penumbraRatioScale) async { + _module.ccall( + "set_soft_shadow_options", + "void", + ["void*".toJS, "float".toJS, "float".toJS].toJS, + [_viewer!, penumbraScale.toJS, penumbraRatioScale.toJS].toJS, + null); + } }