diff --git a/thermion_dart/test/instancing_tests.dart b/thermion_dart/test/instancing_tests.dart index b5c2a83c..c046d6d3 100644 --- a/thermion_dart/test/instancing_tests.dart +++ b/thermion_dart/test/instancing_tests.dart @@ -4,6 +4,7 @@ import 'dart:math'; import 'package:test/test.dart'; import 'package:thermion_dart/src/filament/src/interface/asset.dart'; import 'package:thermion_dart/src/filament/src/interface/filament_app.dart'; +import 'package:thermion_dart/src/utils/src/geometry.dart'; import 'package:vector_math/vector_math_64.dart'; import 'helpers.dart'; @@ -22,6 +23,32 @@ class PhysicsState { void main() async { final testHelper = TestHelper("instancing"); await testHelper.setup(); + + test('create/destroy instance for geometry asset', () async { + await testHelper.withViewer((viewer) async { + final mi = await FilamentApp.instance!.createUbershaderMaterialInstance(); + var asset = await viewer.createGeometry(GeometryHelper.cube(), + materialInstances: [mi], addToScene: true, keepData: true); + + await testHelper.capture(viewer.view, "geometry_no_instance"); + expect(await asset.getInstanceCount(), 0); + + var instance = await asset.createInstance(); + + expect(await asset.getInstanceCount(), 1); + + await viewer.addToScene(instance); + await instance.setTransform(Matrix4.translation(Vector3(1, 0, 0))); + await testHelper.capture(viewer.view, "geometry_with_instance"); + + await viewer.destroyAsset(instance); + await testHelper.capture(viewer.view, "geometry_instance_destroyed"); + + await viewer.destroyAssets(); + await testHelper.capture(viewer.view, "geometry_asset_destroyed"); + }, bg: kRed); + }); + test('gltf assets always create one instance', () async { await testHelper.withViewer((viewer) async { var asset = @@ -167,8 +194,10 @@ void main() async { state.position.add(state.velocity * timeStep); // Queue the asynchronous transform update - transformUpdates.add(state.instance - .setTransform(Matrix4.compose(state.position, Quaternion.identity(), Vector3.all(state.scale)))); + transformUpdates.add(state.instance.setTransform(Matrix4.compose( + state.position, + Quaternion.identity(), + Vector3.all(state.scale)))); } } // Wait for all instance transforms in this step to complete @@ -214,6 +243,6 @@ void main() async { // Optional: Capture one final frame after simulation ends await testHelper.capture(viewer.view, "capture_physics_orbit_final"); - }, viewportDimensions: (width:1024, height:1024)); // End withViewer + }, viewportDimensions: (width: 1024, height: 1024)); // End withViewer }); }