move grid material instantiation to GridOverlay

This commit is contained in:
Nick Fisher
2025-07-01 11:07:44 +08:00
parent 8a997d533a
commit 4379313932
2 changed files with 19 additions and 12 deletions

View File

@@ -534,12 +534,6 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
return instance;
}
Material? _gridMaterial;
Future<Material> get gridMaterial async {
_gridMaterial ??= FFIMaterial(Material_createGridMaterial(engine), this);
return _gridMaterial!;
}
///
///
///

View File

@@ -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<GridOverlay> create(FFIFilamentApp app, Pointer<TAnimationManager> animationManager) async {
final gridMaterial = await app.gridMaterial;
final asset = await withPointerCallback<TSceneAsset>((cb) => SceneAsset_createGridRenderThread(app.engine, gridMaterial.pointer, cb));
return GridOverlay(asset, app, animationManager);
static GridOverlay? _overlay;
static Material? _gridMaterial;
static Future<GridOverlay> create(
FFIFilamentApp app, Pointer<TAnimationManager> animationManager) async {
if (_overlay == null) {
_gridMaterial ??= FFIMaterial(Material_createGridMaterial(app.engine), app);
final asset = await withPointerCallback<TSceneAsset>((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!;
}
}