diff --git a/thermion_dart/native/include/c_api/TSceneManager.h b/thermion_dart/native/include/c_api/TSceneManager.h index 1b910bec..49e6fd9a 100644 --- a/thermion_dart/native/include/c_api/TSceneManager.h +++ b/thermion_dart/native/include/c_api/TSceneManager.h @@ -48,7 +48,7 @@ extern "C" EMSCRIPTEN_KEEPALIVE int SceneManager_removeFromScene(TSceneManager *tSceneManager, EntityId entity); EMSCRIPTEN_KEEPALIVE void SceneManager_transformToUnitCube(TSceneManager *sceneManager, EntityId asset); - EMSCRIPTEN_KEEPALIVE TSceneAsset *SceneManager_loadGlbFromBuffer(TSceneManager *tSceneManager, const uint8_t *const, size_t length, bool keepData, int priority, int layer, bool loadResourcesAsync); + EMSCRIPTEN_KEEPALIVE TSceneAsset *SceneManager_loadGlbFromBuffer(TSceneManager *tSceneManager, const uint8_t *const, size_t length, int numInstances, bool keepData, int priority, int layer, bool loadResourcesAsync); EMSCRIPTEN_KEEPALIVE TSceneAsset *SceneManager_loadGlb(TSceneManager *sceneManager, const char *assetPath, int numInstances, bool keepData); EMSCRIPTEN_KEEPALIVE TSceneAsset *SceneManager_loadGltf(TSceneManager *sceneManager, const char *assetPath, const char *relativePath, bool keepData); diff --git a/thermion_dart/native/include/scene/GltfSceneAsset.hpp b/thermion_dart/native/include/scene/GltfSceneAsset.hpp index bb4ad079..7ed274a7 100644 --- a/thermion_dart/native/include/scene/GltfSceneAsset.hpp +++ b/thermion_dart/native/include/scene/GltfSceneAsset.hpp @@ -42,6 +42,7 @@ namespace thermion _materialInstances(materialInstances), _materialInstanceCount(materialInstanceCount) { + TRACE("Created GltfSceneAsset with %d reserved instances", asset->getAssetInstanceCount()); } ~GltfSceneAsset(); diff --git a/thermion_dart/native/src/c_api/TSceneManager.cpp b/thermion_dart/native/src/c_api/TSceneManager.cpp index 893c182f..3da8abc0 100644 --- a/thermion_dart/native/src/c_api/TSceneManager.cpp +++ b/thermion_dart/native/src/c_api/TSceneManager.cpp @@ -57,10 +57,10 @@ extern "C" } - EMSCRIPTEN_KEEPALIVE TSceneAsset *SceneManager_loadGlbFromBuffer(TSceneManager *tSceneManager, const uint8_t *const data, size_t length, bool keepData, int priority, int layer, bool loadResourcesAsync) + EMSCRIPTEN_KEEPALIVE TSceneAsset *SceneManager_loadGlbFromBuffer(TSceneManager *tSceneManager, const uint8_t *const data, size_t length, int numInstances, bool keepData, int priority, int layer, bool loadResourcesAsync) { auto *sceneManager = reinterpret_cast(tSceneManager); - auto *asset = sceneManager->loadGlbFromBuffer((const uint8_t *)data, length, 1, keepData, priority, layer, loadResourcesAsync); + auto *asset = sceneManager->loadGlbFromBuffer((const uint8_t *)data, length, numInstances, keepData, priority, layer, loadResourcesAsync); return reinterpret_cast(asset); } diff --git a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp index 862c98d0..58a9a47d 100644 --- a/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp +++ b/thermion_dart/native/src/c_api/ThermionDartRenderThreadApi.cpp @@ -495,7 +495,7 @@ extern "C" std::packaged_task lambda( [=]() mutable { - auto *asset = SceneManager_loadGlbFromBuffer(sceneManager, data, length, keepData, priority, layer, loadResourcesAsync); + auto *asset = SceneManager_loadGlbFromBuffer(sceneManager, data, length, numInstances, keepData, priority, layer, loadResourcesAsync); callback(asset); }); auto fut = _rl->add_task(lambda); diff --git a/thermion_dart/native/src/scene/GltfSceneAsset.cpp b/thermion_dart/native/src/scene/GltfSceneAsset.cpp index 5deb6713..2bc3a694 100644 --- a/thermion_dart/native/src/scene/GltfSceneAsset.cpp +++ b/thermion_dart/native/src/scene/GltfSceneAsset.cpp @@ -19,7 +19,9 @@ namespace thermion if (instanceNumber > _asset->getAssetInstanceCount() - 1) { - Log("No instances available for reuse. When loading the asset, you must pre-allocate the number of instances you wish to make available for use. Try increasing this number."); + Log("glTF asset was created with %d instances reserved, and %d instances have been used. Increase the number of instances pre-allocated when the asset is loaded.", + _asset->getAssetInstanceCount(), _instances.size() + ); return std::nullptr_t(); } TRACE("Creating instance %d", instanceNumber); diff --git a/thermion_dart/native/src/scene/SceneManager.cpp b/thermion_dart/native/src/scene/SceneManager.cpp index 817722c7..8f146a14 100644 --- a/thermion_dart/native/src/scene/SceneManager.cpp +++ b/thermion_dart/native/src/scene/SceneManager.cpp @@ -369,7 +369,7 @@ namespace thermion FilamentAsset *asset = _assetLoader->createInstancedAsset((const uint8_t *)data, length, instances.data(), numInstances); - Log("Created instanced asset."); + Log("Created glTF asset with %d instances.", numInstances); if (!asset) {