pass shared NameComponentManager to gltfio AssetLoader

This commit is contained in:
Nick Fisher
2025-05-31 11:21:57 +08:00
parent 7f0ec01937
commit 2f7f363db9
9 changed files with 52 additions and 19 deletions

View File

@@ -8,7 +8,7 @@ extern "C"
{
#endif
EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine, TMaterialProvider *tMaterialProvider);
EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine, TMaterialProvider *tMaterialProvider, TNameComponentManager *tNameComponentManager);
EMSCRIPTEN_KEEPALIVE TFilamentAsset *GltfAssetLoader_load(
TEngine *tEngine,

View File

@@ -301,7 +301,7 @@ namespace thermion
void AnimationManager_resetToRestPoseRenderThread(TAnimationManager *tAnimationManager, EntityId entityId, uint32_t requestId, VoidCallback onComplete);
void GltfAssetLoader_createRenderThread(TEngine *tEngine, TMaterialProvider *tMaterialProvider, void (*callback)(TGltfAssetLoader *));
void GltfAssetLoader_createRenderThread(TEngine *tEngine, TMaterialProvider *tMaterialProvider, TNameComponentManager *tNameComponentManager, void (*callback)(TGltfAssetLoader *));
void GltfResourceLoader_createRenderThread(TEngine *tEngine, void (*callback)(TGltfResourceLoader *));
void GltfResourceLoader_destroyRenderThread(TEngine *tEngine, TGltfResourceLoader *tResourceLoader, uint32_t requestId, VoidCallback onComplete);
void GltfResourceLoader_loadResourcesRenderThread(TGltfResourceLoader *tGltfResourceLoader, TFilamentAsset *tFilamentAsset, void (*callback)(bool));

View File

@@ -38,8 +38,9 @@ namespace thermion
#endif
EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine, TMaterialProvider *tMaterialProvider) {
EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine, TMaterialProvider *tMaterialProvider, TNameComponentManager *tNameComponentManager) {
auto *engine = reinterpret_cast<filament::Engine *>(tEngine);
auto *nameComponentManager = reinterpret_cast<utils::NameComponentManager *>(tNameComponentManager);
auto *materialProvider = reinterpret_cast<gltfio::MaterialProvider *>(tMaterialProvider);
if(!materialProvider) {
@@ -52,8 +53,7 @@ EMSCRIPTEN_KEEPALIVE TGltfAssetLoader *GltfAssetLoader_create(TEngine *tEngine,
}
utils::EntityManager &em = utils::EntityManager::get();
auto ncm = new utils::NameComponentManager(em);
auto *assetLoader = gltfio::AssetLoader::create({engine, materialProvider, ncm, &em});
auto *assetLoader = gltfio::AssetLoader::create({engine, materialProvider, nameComponentManager, &em});
return reinterpret_cast<TGltfAssetLoader *>(assetLoader);
}

View File

@@ -1118,12 +1118,16 @@ extern "C"
auto fut = _renderThread->add_task(lambda);
}
EMSCRIPTEN_KEEPALIVE void GltfAssetLoader_createRenderThread(TEngine *tEngine, TMaterialProvider *tMaterialProvider, void (*callback)(TGltfAssetLoader *))
EMSCRIPTEN_KEEPALIVE void GltfAssetLoader_createRenderThread(
TEngine *tEngine,
TMaterialProvider *tMaterialProvider,
TNameComponentManager *tNameComponentManager,
void (*callback)(TGltfAssetLoader *))
{
std::packaged_task<void()> lambda(
[=]() mutable
{
auto loader = GltfAssetLoader_create(tEngine, tMaterialProvider);
auto loader = GltfAssetLoader_create(tEngine, tMaterialProvider, tNameComponentManager);
PROXY(callback(loader));
});
auto fut = _renderThread->add_task(lambda);