diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart index d78c811d..06c8f8ff 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart @@ -534,12 +534,6 @@ class FFIFilamentApp extends FilamentApp { return instance; } - Material? _gridMaterial; - Future get gridMaterial async { - _gridMaterial ??= FFIMaterial(Material_createGridMaterial(engine), this); - return _gridMaterial!; - } - /// /// /// diff --git a/thermion_dart/lib/src/filament/src/implementation/grid_overlay.dart b/thermion_dart/lib/src/filament/src/implementation/grid_overlay.dart index 63de8da4..3bb6ec53 100644 --- a/thermion_dart/lib/src/filament/src/implementation/grid_overlay.dart +++ b/thermion_dart/lib/src/filament/src/implementation/grid_overlay.dart @@ -1,14 +1,27 @@ -import 'package:thermion_dart/src/bindings/bindings.dart'; import 'package:thermion_dart/src/filament/src/implementation/ffi_asset.dart'; import 'package:thermion_dart/src/filament/src/implementation/ffi_filament_app.dart'; +import 'package:thermion_dart/src/filament/src/implementation/ffi_material.dart'; +import 'package:thermion_dart/thermion_dart.dart'; class GridOverlay extends FFIAsset { - GridOverlay(super.asset, super.app, super.animationManager); - static Future create(FFIFilamentApp app, Pointer animationManager) async { - final gridMaterial = await app.gridMaterial; - final asset = await withPointerCallback((cb) => SceneAsset_createGridRenderThread(app.engine, gridMaterial.pointer, cb)); - return GridOverlay(asset, app, animationManager); + static GridOverlay? _overlay; + static Material? _gridMaterial; + + static Future create( + FFIFilamentApp app, Pointer animationManager) async { + if (_overlay == null) { + _gridMaterial ??= FFIMaterial(Material_createGridMaterial(app.engine), app); + + final asset = await withPointerCallback((cb) => + SceneAsset_createGridRenderThread( + app.engine, _gridMaterial!.getNativeHandle(), cb)); + + _overlay = GridOverlay(asset, app, animationManager); + var materialInstance = await _overlay!.getMaterialInstanceAt(); + await materialInstance.setParameterFloat3("gridColor", 0.1, 0.1, 0.1); + } + return _overlay!; } }