add setTransform/getWorldTransform to FilamentApp

This commit is contained in:
Nick Fisher
2025-05-28 10:47:00 +08:00
parent c6ceea4f8b
commit 4a7a366fc6
3 changed files with 34 additions and 21 deletions

View File

@@ -888,33 +888,15 @@ class FFIAsset extends ThermionAsset {
///
///
Future<Matrix4> getWorldTransform({ThermionEntity? entity}) async {
late Pointer stackPtr;
if (FILAMENT_WASM) {
stackPtr = stackSave();
}
entity ??= this.entity;
var transform = double4x4ToMatrix4(
TransformManager_getWorldTransform(app.transformManager, entity));
if (FILAMENT_WASM) {
stackRestore(stackPtr);
}
return transform;
return FilamentApp.instance!.getWorldTransform(entity ?? this.entity);
}
///
///
///
Future setTransform(Matrix4 transform, {ThermionEntity? entity}) async {
late Pointer stackPtr;
if (FILAMENT_WASM) {
stackPtr = stackSave();
}
entity ??= this.entity;
TransformManager_setTransform(
app.transformManager, entity, matrix4ToDouble4x4(transform));
if (FILAMENT_WASM) {
stackRestore(stackPtr);
}
await FilamentApp.instance!.setTransform(
entity ?? this.entity, transform);
}
///

View File

@@ -1110,6 +1110,32 @@ class FFIFilamentApp extends FilamentApp<Pointer> {
///
///
Future setTransform(ThermionEntity entity, Matrix4 transform) async {
late Pointer stackPtr;
if (FILAMENT_WASM) {
stackPtr = stackSave();
}
TransformManager_setTransform(transformManager, entity, matrix4ToDouble4x4(transform));
if (FILAMENT_WASM) {
stackRestore(stackPtr);
}
}
///
///
///
Future<Matrix4> getWorldTransform(ThermionEntity entity) async {
late Pointer stackPtr;
if (FILAMENT_WASM) {
stackPtr = stackSave();
}
var transform = double4x4ToMatrix4(
TransformManager_getWorldTransform(transformManager, entity));
if (FILAMENT_WASM) {
stackRestore(stackPtr);
}
return transform;
}
}

View File

@@ -330,4 +330,9 @@ abstract class FilamentApp<T> {
///
///
Future setTransform(ThermionEntity entity, Matrix4 transform);
///
///
///
Future<Matrix4> getWorldTransform(ThermionEntity entity);
}