add test for create/destroy geometry instances

This commit is contained in:
Nick Fisher
2025-06-04 11:07:58 +08:00
parent c484eeb37f
commit e594a42496

View File

@@ -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
});
}