update tests + bindings

This commit is contained in:
Nick Fisher
2025-05-17 21:52:21 +08:00
parent ee306549d8
commit 4b2342979f
3 changed files with 26 additions and 20 deletions

View File

@@ -2490,14 +2490,12 @@ external void GltfAssetLoader_createRenderThread(
@ffi.Native< @ffi.Native<
ffi.Void Function( ffi.Void Function(
ffi.Pointer<TEngine>, ffi.Pointer<TEngine>,
ffi.Pointer<ffi.Char>,
ffi.Pointer< ffi.Pointer<
ffi.NativeFunction< ffi.NativeFunction<
ffi.Void Function( ffi.Void Function(
ffi.Pointer<TGltfResourceLoader>)>>)>(isLeaf: true) ffi.Pointer<TGltfResourceLoader>)>>)>(isLeaf: true)
external void GltfResourceLoader_createRenderThread( external void GltfResourceLoader_createRenderThread(
ffi.Pointer<TEngine> tEngine, ffi.Pointer<TEngine> tEngine,
ffi.Pointer<ffi.Char> relativeResourcePath,
ffi.Pointer< ffi.Pointer<
ffi ffi
.NativeFunction<ffi.Void Function(ffi.Pointer<TGltfResourceLoader>)>> .NativeFunction<ffi.Void Function(ffi.Pointer<TGltfResourceLoader>)>>
@@ -2616,12 +2614,10 @@ external void Gizmo_createRenderThread(
callback, callback,
); );
@ffi.Native< @ffi.Native<ffi.Pointer<TGltfResourceLoader> Function(ffi.Pointer<TEngine>)>(
ffi.Pointer<TGltfResourceLoader> Function( isLeaf: true)
ffi.Pointer<TEngine>, ffi.Pointer<ffi.Char>)>(isLeaf: true)
external ffi.Pointer<TGltfResourceLoader> GltfResourceLoader_create( external ffi.Pointer<TGltfResourceLoader> GltfResourceLoader_create(
ffi.Pointer<TEngine> tEngine, ffi.Pointer<TEngine> tEngine,
ffi.Pointer<ffi.Char> relativeResourcePath,
); );
@ffi.Native< @ffi.Native<

View File

@@ -41,11 +41,10 @@ void main() async {
}, cameraPosition: Vector3(0, 0, 5)); }, cameraPosition: Vector3(0, 0, 5));
}); });
test('load/remove gltf', () async { test('sync load/remove gltf from uri', () async {
await testHelper.withViewer((viewer) async { await testHelper.withViewer((viewer) async {
var asset = await viewer.loadGltf( var asset = await viewer.loadGltf(
"file://${testHelper.testDir}/assets/cube.gltf", "file://${testHelper.testDir}/assets/cube.gltf");
relativeResourcePath: "${testHelper.testDir}/assets");
await viewer await viewer
.loadIbl("file://${testHelper.testDir}/assets/default_env_ibl.ktx"); .loadIbl("file://${testHelper.testDir}/assets/default_env_ibl.ktx");
await testHelper.capture(viewer.view, "gltf_loaded"); await testHelper.capture(viewer.view, "gltf_loaded");
@@ -54,12 +53,9 @@ void main() async {
}, cameraPosition: Vector3(0, 0, 5)); }, cameraPosition: Vector3(0, 0, 5));
}); });
test('load/remove gltf (async)', () async { test('async load/remove gltf from uri', () async {
await testHelper.withViewer((viewer) async { await testHelper.withViewer((viewer) async {
var assetData = var asset = await viewer.loadGltf("file://${testHelper.testDir}/assets/cube.gltf", loadAsync: true);
File("${testHelper.testDir}/assets/cube.gltf").readAsBytesSync();
var asset = await viewer.loadGltfFromBuffer(assetData,
relativeResourcePath: "${testHelper.testDir}/assets", loadResourcesAsync: true);
await viewer await viewer
.loadIbl("file://${testHelper.testDir}/assets/default_env_ibl.ktx"); .loadIbl("file://${testHelper.testDir}/assets/default_env_ibl.ktx");
await testHelper.capture(viewer.view, "gltf_async_loaded"); await testHelper.capture(viewer.view, "gltf_async_loaded");
@@ -68,11 +64,22 @@ void main() async {
}, cameraPosition: Vector3(0, 0, 5)); }, cameraPosition: Vector3(0, 0, 5));
}); });
test('sync load/remove gltf from buffer', () async {
await testHelper.withViewer((viewer) async {
var assetData =
File("${testHelper.testDir}/assets/cube.gltf").readAsBytesSync();
var asset = await viewer.loadGltfFromBuffer(assetData,
resourceUri: "${testHelper.testDir}/assets", loadResourcesAsync: false);
await viewer
.loadIbl("file://${testHelper.testDir}/assets/default_env_ibl.ktx");
await testHelper.capture(viewer.view, "gltf_load_from_buffer");
}, cameraPosition: Vector3(0, 0, 5));
});
test('transform gltf to unit cube', () async { test('transform gltf to unit cube', () async {
await testHelper.withViewer((viewer) async { await testHelper.withViewer((viewer) async {
var asset = await viewer.loadGltf( var asset = await viewer.loadGltf(
"file://${testHelper.testDir}/assets/cube.gltf", "file://${testHelper.testDir}/assets/cube.gltf");
relativeResourcePath: "${testHelper.testDir}/assets");
await viewer await viewer
.loadIbl("file://${testHelper.testDir}/assets/default_env_ibl.ktx"); .loadIbl("file://${testHelper.testDir}/assets/default_env_ibl.ktx");

View File

@@ -195,8 +195,13 @@ class TestHelper {
return object; return object;
} }
Future<Uint8List> _loadResource(String uri) async {
uri = uri.replaceAll("file://", "");
return File(uri).readAsBytesSync();
}
Future setup() async { Future setup() async {
await FFIFilamentApp.create(); await FFIFilamentApp.create(config: FFIFilamentConfig(loadResource: _loadResource));
} }
Future createViewer( Future createViewer(
@@ -244,9 +249,7 @@ class TestHelper {
color: color, depth: depth) as FFIRenderTarget; color: color, depth: depth) as FFIRenderTarget;
} }
var viewer = ThermionViewerFFI( var viewer = ThermionViewerFFI();
loadAssetFromUri: (path) async =>
File(path.replaceAll("file://", "")).readAsBytesSync());
await viewer.initialized; await viewer.initialized;
await FilamentApp.instance!.register(swapChain, viewer.view); await FilamentApp.instance!.register(swapChain, viewer.view);