add test for create/destroy geometry instances
This commit is contained in:
@@ -4,6 +4,7 @@ import 'dart:math';
|
|||||||
import 'package:test/test.dart';
|
import 'package:test/test.dart';
|
||||||
import 'package:thermion_dart/src/filament/src/interface/asset.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/filament/src/interface/filament_app.dart';
|
||||||
|
import 'package:thermion_dart/src/utils/src/geometry.dart';
|
||||||
import 'package:vector_math/vector_math_64.dart';
|
import 'package:vector_math/vector_math_64.dart';
|
||||||
import 'helpers.dart';
|
import 'helpers.dart';
|
||||||
|
|
||||||
@@ -22,6 +23,32 @@ class PhysicsState {
|
|||||||
void main() async {
|
void main() async {
|
||||||
final testHelper = TestHelper("instancing");
|
final testHelper = TestHelper("instancing");
|
||||||
await testHelper.setup();
|
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 {
|
test('gltf assets always create one instance', () async {
|
||||||
await testHelper.withViewer((viewer) async {
|
await testHelper.withViewer((viewer) async {
|
||||||
var asset =
|
var asset =
|
||||||
@@ -167,8 +194,10 @@ void main() async {
|
|||||||
state.position.add(state.velocity * timeStep);
|
state.position.add(state.velocity * timeStep);
|
||||||
|
|
||||||
// Queue the asynchronous transform update
|
// Queue the asynchronous transform update
|
||||||
transformUpdates.add(state.instance
|
transformUpdates.add(state.instance.setTransform(Matrix4.compose(
|
||||||
.setTransform(Matrix4.compose(state.position, Quaternion.identity(), Vector3.all(state.scale))));
|
state.position,
|
||||||
|
Quaternion.identity(),
|
||||||
|
Vector3.all(state.scale))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Wait for all instance transforms in this step to complete
|
// 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
|
// Optional: Capture one final frame after simulation ends
|
||||||
await testHelper.capture(viewer.view, "capture_physics_orbit_final");
|
await testHelper.capture(viewer.view, "capture_physics_orbit_final");
|
||||||
}, viewportDimensions: (width:1024, height:1024)); // End withViewer
|
}, viewportDimensions: (width: 1024, height: 1024)); // End withViewer
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user