diff options
Diffstat (limited to 'src/util')
| -rw-r--r-- | src/util/asset_manager.cc | 41 | ||||
| -rw-r--r-- | src/util/asset_manager.h | 8 |
2 files changed, 47 insertions, 2 deletions
diff --git a/src/util/asset_manager.cc b/src/util/asset_manager.cc index 2285f3a..52a60ee 100644 --- a/src/util/asset_manager.cc +++ b/src/util/asset_manager.cc @@ -76,6 +76,39 @@ const uint8_t* GetAsset(AssetId asset_id, size_t* out_size) { AssetRecord source_record = assets[index]; +#if !defined(DEMO_STRIP_ALL) + if (source_record.type == AssetType::SPEC || + source_record.type == AssetType::MP3) { + const char* path = (const char*)source_record.data; + FILE* f = fopen(path, "rb"); + if (!f) { + if (out_size) + *out_size = 0; + return nullptr; + } + fseek(f, 0, SEEK_END); + long size = ftell(f); + fseek(f, 0, SEEK_SET); + uint8_t* buffer = new (std::nothrow) uint8_t[size + 1]; + if (!buffer) { + fclose(f); + if (out_size) + *out_size = 0; + return nullptr; + } + fread(buffer, 1, size, f); + fclose(f); + buffer[size] = 0; // Null-terminate + + g_asset_cache[index].data = buffer; + g_asset_cache[index].size = size; + g_asset_cache[index].type = source_record.type; + if (out_size) + *out_size = size; + return buffer; + } +#endif + AssetRecord cached_record = source_record; if (source_record.type == AssetType::PROC || @@ -188,6 +221,14 @@ void DropAsset(AssetId asset_id, const uint8_t* asset) { delete[] g_asset_cache[index].data; g_asset_cache[index] = {}; // Zero out the struct to force re-generation } +#if !defined(DEMO_STRIP_ALL) + if (g_asset_cache[index].data == asset && + (g_asset_cache[index].type == AssetType::SPEC || + g_asset_cache[index].type == AssetType::MP3)) { + delete[] g_asset_cache[index].data; + g_asset_cache[index] = {}; + } +#endif // For static assets, no dynamic memory to free. } diff --git a/src/util/asset_manager.h b/src/util/asset_manager.h index 5380257..786a8db 100644 --- a/src/util/asset_manager.h +++ b/src/util/asset_manager.h @@ -6,10 +6,14 @@ #include "asset_manager_dcl.h" enum class AssetType : uint8_t { - STATIC, + WGSL, + SPEC, + TEXTURE, + MESH, + BINARY, + MP3, PROC, PROC_GPU, - MP3 }; struct AssetRecord { |
