diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart index 1745b1f1..c638f468 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_ffi.g.dart @@ -571,6 +571,17 @@ external void View_setFogOptions( TFogOptions tFogOptions, ); +@ffi.Native, ffi.Bool)>(isLeaf: true) +external void View_setTransparentPickingEnabled( + ffi.Pointer tView, + bool enabled, +); + +@ffi.Native)>(isLeaf: true) +external bool View_isTransparentPickingEnabled( + ffi.Pointer tView, +); + @ffi.Native< ffi.Void Function(ffi.Pointer, ffi.Uint32, ffi.Uint32, ffi.Uint32, PickCallback)>(isLeaf: true) diff --git a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart index 1008e18b..c8589684 100644 --- a/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart +++ b/thermion_dart/lib/src/bindings/src/thermion_dart_js_interop.g.dart @@ -720,6 +720,13 @@ extension type NativeLibrary(JSObject _) implements JSObject { Pointer tView, Pointer tFogOptionsPtr, ); + external void _View_setTransparentPickingEnabled( + Pointer tView, + bool enabled, + ); + external int _View_isTransparentPickingEnabled( + Pointer tView, + ); external void _View_pick( Pointer tView, int requestId, @@ -3008,6 +3015,21 @@ void View_setFogOptions( return result; } +void View_setTransparentPickingEnabled( + self.Pointer tView, + bool enabled, +) { + final result = _lib._View_setTransparentPickingEnabled(tView.cast(), enabled); + return result; +} + +bool View_isTransparentPickingEnabled( + self.Pointer tView, +) { + final result = _lib._View_isTransparentPickingEnabled(tView.cast()); + return result == 1; +} + void View_pick( self.Pointer tView, int requestId, diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_view.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_view.dart index 71d5fe5d..5c9bd86b 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_view.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_view.dart @@ -335,4 +335,12 @@ class FFIView extends View> { void setName(String name) { View_setName(getNativeHandle(), name.toNativeUtf8().cast()); } + + Future setTransparentPickingEnabled(bool enabled) async { + View_setTransparentPickingEnabled(getNativeHandle(), enabled); + } + + Future isTransparentPickingEnabled() async { + return View_isTransparentPickingEnabled(getNativeHandle()); + } } diff --git a/thermion_dart/lib/src/filament/src/interface/view.dart b/thermion_dart/lib/src/filament/src/interface/view.dart index 920f9d70..57e1c5db 100644 --- a/thermion_dart/lib/src/filament/src/interface/view.dart +++ b/thermion_dart/lib/src/filament/src/interface/view.dart @@ -92,6 +92,9 @@ abstract class View extends NativeHandle { Future setShadowsEnabled(bool enabled); Future setLayerVisibility(VisibilityLayers layer, bool visible); + Future setTransparentPickingEnabled(bool enabled); + Future isTransparentPickingEnabled(); + /// Renders an outline around [entity] with the given color. Future setStencilHighlight(ThermionAsset asset, {double r = 1.0, diff --git a/thermion_dart/native/include/c_api/TView.h b/thermion_dart/native/include/c_api/TView.h index b633220a..e5afbc1c 100644 --- a/thermion_dart/native/include/c_api/TView.h +++ b/thermion_dart/native/include/c_api/TView.h @@ -89,6 +89,8 @@ EMSCRIPTEN_KEEPALIVE bool View_isDitheringEnabled(TView *tView); EMSCRIPTEN_KEEPALIVE void View_setScene(TView *tView, TScene *tScene); EMSCRIPTEN_KEEPALIVE void View_setFrontFaceWindingInverted(TView *tView, bool inverted); EMSCRIPTEN_KEEPALIVE void View_setFogOptions(TView *tView, TFogOptions tFogOptions); +EMSCRIPTEN_KEEPALIVE void View_setTransparentPickingEnabled(TView *tView, bool enabled); +EMSCRIPTEN_KEEPALIVE bool View_isTransparentPickingEnabled(TView *tView); typedef void (*PickCallback)(uint32_t requestId, EntityId entityId, float depth, float fragX, float fragY, float fragZ); EMSCRIPTEN_KEEPALIVE void View_pick(TView* tView, uint32_t requestId, uint32_t x, uint32_t y, PickCallback callback); diff --git a/thermion_dart/native/src/c_api/TView.cpp b/thermion_dart/native/src/c_api/TView.cpp index fb244b04..18649c97 100644 --- a/thermion_dart/native/src/c_api/TView.cpp +++ b/thermion_dart/native/src/c_api/TView.cpp @@ -284,6 +284,16 @@ namespace thermion view->setName(name); } + EMSCRIPTEN_KEEPALIVE void View_setTransparentPickingEnabled(TView* tView, bool enabled) { + auto view = reinterpret_cast(tView); + view->setTransparentPickingEnabled(enabled); + } + + EMSCRIPTEN_KEEPALIVE bool View_isTransparentPickingEnabled(TView* tView) { + auto view = reinterpret_cast(tView); + return view->isTransparentPickingEnabled(); + } + #ifdef __cplusplus } }