From fe11479b08eb80b028b6bde4f0ec91c6d3cfc3aa Mon Sep 17 00:00:00 2001 From: Nick Fisher Date: Sat, 17 May 2025 21:48:18 +0800 Subject: [PATCH] remove relativeResourcePath from gltf resource loading; all external resources should be added on the Dart side, Filament should never attempt to load these directly from the filesystem. relativeResourcePath (called gltfPath on the Filament side) is only used for desktop loading, so this is now irrelevant. Note that Filament must be compiled with GLTFIO_USE_FILESYSTEM=0 --- .../src/filament/src/implementation/ffi_filament_app.dart | 3 +-- thermion_dart/native/include/c_api/TGltfResourceLoader.h | 2 +- .../native/include/c_api/ThermionDartRenderThreadApi.h | 2 +- thermion_dart/native/src/c_api/TGltfResourceLoader.cpp | 7 ++++--- .../native/src/c_api/ThermionDartRenderThreadApi.cpp | 4 ++-- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart index 797b809e..2379b81e 100644 --- a/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart +++ b/thermion_dart/lib/src/filament/src/implementation/ffi_filament_app.dart @@ -923,8 +923,7 @@ class FFIFilamentApp extends FilamentApp { } var gltfResourceLoader = await withPointerCallback( - (cb) => - GltfResourceLoader_createRenderThread(engine, nullptr.cast(), cb)); + (cb) => GltfResourceLoader_createRenderThread(engine, cb)); final gizmo = await withPointerCallback((cb) { Gizmo_createRenderThread( diff --git a/thermion_dart/native/include/c_api/TGltfResourceLoader.h b/thermion_dart/native/include/c_api/TGltfResourceLoader.h index 12067c72..e2a5a2dd 100644 --- a/thermion_dart/native/include/c_api/TGltfResourceLoader.h +++ b/thermion_dart/native/include/c_api/TGltfResourceLoader.h @@ -8,7 +8,7 @@ extern "C" { #endif -EMSCRIPTEN_KEEPALIVE TGltfResourceLoader *GltfResourceLoader_create(TEngine *tEngine, const char *relativeResourcePath); +EMSCRIPTEN_KEEPALIVE TGltfResourceLoader *GltfResourceLoader_create(TEngine *tEngine); EMSCRIPTEN_KEEPALIVE void GltfResourceLoader_destroy(TEngine *tEngine, TGltfResourceLoader *tGltfResourceLoader); EMSCRIPTEN_KEEPALIVE bool GltfResourceLoader_asyncBeginLoad(TGltfResourceLoader *tGltfResourceLoader, TFilamentAsset *tFilamentAsset); EMSCRIPTEN_KEEPALIVE void GltfResourceLoader_asyncUpdateLoad(TGltfResourceLoader *tGltfResourceLoader); diff --git a/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h b/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h index f67097e7..67227b3d 100644 --- a/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h +++ b/thermion_dart/native/include/c_api/ThermionDartRenderThreadApi.h @@ -260,7 +260,7 @@ namespace thermion void AnimationManager_resetToRestPoseRenderThread(TAnimationManager *tAnimationManager, EntityId entityId, VoidCallback onComplete); void GltfAssetLoader_createRenderThread(TEngine *tEngine, TMaterialProvider *tMaterialProvider, void (*callback)(TGltfAssetLoader *)); - void GltfResourceLoader_createRenderThread(TEngine *tEngine, const char* relativeResourcePath, void (*callback)(TGltfResourceLoader *)); + void GltfResourceLoader_createRenderThread(TEngine *tEngine, void (*callback)(TGltfResourceLoader *)); void GltfResourceLoader_destroyRenderThread(TEngine *tEngine, TGltfResourceLoader *tResourceLoader, VoidCallback onComplete); void GltfResourceLoader_loadResourcesRenderThread(TGltfResourceLoader *tGltfResourceLoader, TFilamentAsset *tFilamentAsset, void (*callback)(bool)); void GltfResourceLoader_addResourceDataRenderThread(TGltfResourceLoader *tGltfResourceLoader, const char *uri, uint8_t *data, size_t length, VoidCallback onComplete); diff --git a/thermion_dart/native/src/c_api/TGltfResourceLoader.cpp b/thermion_dart/native/src/c_api/TGltfResourceLoader.cpp index b5c700f1..5811da8a 100644 --- a/thermion_dart/native/src/c_api/TGltfResourceLoader.cpp +++ b/thermion_dart/native/src/c_api/TGltfResourceLoader.cpp @@ -37,11 +37,10 @@ namespace thermion #endif -EMSCRIPTEN_KEEPALIVE TGltfResourceLoader *GltfResourceLoader_create(TEngine *tEngine, const char *relativeResourcePath) { +EMSCRIPTEN_KEEPALIVE TGltfResourceLoader *GltfResourceLoader_create(TEngine *tEngine) { auto *engine = reinterpret_cast(tEngine); auto *gltfResourceLoader = new gltfio::ResourceLoader({ .engine = engine, - .gltfPath = relativeResourcePath }); auto stbDecoder = gltfio::createStbProvider(engine); auto ktxDecoder = gltfio::createKtx2Provider(engine); @@ -60,7 +59,9 @@ EMSCRIPTEN_KEEPALIVE void GltfResourceLoader_destroy(TEngine *tEngine, TGltfReso EMSCRIPTEN_KEEPALIVE void GltfResourceLoader_addResourceData(TGltfResourceLoader *tGltfResourceLoader, const char *uri, uint8_t *data, size_t length) { TRACE("Adding data (length %d) for glTF resource URI %s", length, uri); auto *gltfResourceLoader = reinterpret_cast(tGltfResourceLoader); - gltfResourceLoader->addResourceData(uri, { data, length}); + gltfResourceLoader->addResourceData(uri, { + data, + length}); } EMSCRIPTEN_KEEPALIVE bool GltfResourceLoader_loadResources(TGltfResourceLoader *tGltfResourceLoader, TFilamentAsset *tFilamentAsset) { diff --git a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp index ad261caa..21352abf 100644 --- a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp +++ b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp @@ -1018,11 +1018,11 @@ EMSCRIPTEN_KEEPALIVE void SceneAsset_createFromFilamentAssetRenderThread( auto fut = _renderThread->add_task(lambda); } - EMSCRIPTEN_KEEPALIVE void GltfResourceLoader_createRenderThread(TEngine *tEngine, const char* relativeResourcePath, void (*callback)(TGltfResourceLoader *)) { + EMSCRIPTEN_KEEPALIVE void GltfResourceLoader_createRenderThread(TEngine *tEngine, void (*callback)(TGltfResourceLoader *)) { std::packaged_task lambda( [=]() mutable { - auto loader = GltfResourceLoader_create(tEngine, relativeResourcePath); + auto loader = GltfResourceLoader_create(tEngine); PROXY(callback(loader)); }); auto fut = _renderThread->add_task(lambda);