Quick fix for model loading

This commit is contained in:
MysterD 2022-04-10 16:35:53 -07:00
parent 3225de7e2c
commit 1bfd8b09f8
1 changed files with 7 additions and 2 deletions

View File

@ -463,6 +463,7 @@ static u16 sCustomModelsCount = 0;
#define MAX_CACHED_ASSETS 256 #define MAX_CACHED_ASSETS 256
struct ModelUtilsInfo* sCachedAssets[MAX_CACHED_ASSETS] = { 0 }; struct ModelUtilsInfo* sCachedAssets[MAX_CACHED_ASSETS] = { 0 };
bool sCachedAssetTaken[MAX_CACHED_ASSETS] = { 0 };
void smlua_model_util_remember(u8 loadedId, UNUSED u8 layer, const void* asset, UNUSED u8 isDisplayList) { void smlua_model_util_remember(u8 loadedId, UNUSED u8 layer, const void* asset, UNUSED u8 isDisplayList) {
struct ModelUtilsInfo* found = NULL; struct ModelUtilsInfo* found = NULL;
@ -492,8 +493,9 @@ void smlua_model_util_remember(u8 loadedId, UNUSED u8 layer, const void* asset,
} }
// remember // remember
if (sCachedAssets[loadedId] != NULL && sCachedAssets[loadedId] != found) { if (sCachedAssetTaken[loadedId] && sCachedAssets[loadedId] != found) {
if (sCachedAssets[loadedId]->permanent) { if (sCachedAssets[loadedId]->permanent) {
// TODO: we need to restore the permanent model afterward
LOG_ERROR("OVERRIDING PERMANENT MODEL: %u -> %u", sCachedAssets[loadedId]->loadedId, loadedId); LOG_ERROR("OVERRIDING PERMANENT MODEL: %u -> %u", sCachedAssets[loadedId]->loadedId, loadedId);
} else { } else {
LOG_INFO("Overriding model: loadedId %u was extId %u, now extId %u", loadedId, sCachedAssets[loadedId]->extId, found->extId); LOG_INFO("Overriding model: loadedId %u was extId %u, now extId %u", loadedId, sCachedAssets[loadedId]->extId, found->extId);
@ -502,16 +504,19 @@ void smlua_model_util_remember(u8 loadedId, UNUSED u8 layer, const void* asset,
} }
found->loadedId = loadedId; found->loadedId = loadedId;
sCachedAssets[loadedId] = found; sCachedAssets[loadedId] = found;
sCachedAssetTaken[loadedId] = true;
//LOG_INFO("Remember model: %u -> %u", found->extId, loadedId); //LOG_INFO("Remember model: %u -> %u", found->extId, loadedId);
} }
void smlua_model_util_clear(void) { void smlua_model_util_clear(void) {
// TODO: we need to restore replaced permanent models
for (int i = 0; i < MAX_CACHED_ASSETS; i++) { for (int i = 0; i < MAX_CACHED_ASSETS; i++) {
struct ModelUtilsInfo* m = sCachedAssets[i]; struct ModelUtilsInfo* m = sCachedAssets[i];
if (m == NULL || m->permanent) { continue; } if (m == NULL || m->permanent) { continue; }
//LOG_INFO("Forget: %u -> %u", m->extId, m->loadedId); //LOG_INFO("Forget: %u -> %u", m->extId, m->loadedId);
m->loadedId = UNLOADED_ID; m->loadedId = UNLOADED_ID;
sCachedAssets[i] = NULL; sCachedAssets[i] = NULL;
sCachedAssetTaken[i] = false;
} }
//LOG_INFO("Cleared runtime model cache."); //LOG_INFO("Cleared runtime model cache.");
@ -543,7 +548,7 @@ u8 smlua_model_util_load_with_pool_and_cache_id(enum ModelExtendedId extId, stru
//LOG_INFO("Found in cache (but late, confused?) - %u -> %u", extId, i); //LOG_INFO("Found in cache (but late, confused?) - %u -> %u", extId, i);
info->loadedId = m->loadedId; info->loadedId = m->loadedId;
return info->loadedId; return info->loadedId;
} else if (m == NULL) { } else if (!sCachedAssetTaken[i]) {
pickLoadedId = i; pickLoadedId = i;
} }
} }