summaryrefslogtreecommitdiff
path: root/src/util/asset_manager.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/asset_manager.cc')
-rw-r--r--src/util/asset_manager.cc36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/util/asset_manager.cc b/src/util/asset_manager.cc
index 264ddda..82c07be 100644
--- a/src/util/asset_manager.cc
+++ b/src/util/asset_manager.cc
@@ -245,29 +245,25 @@ void DropAsset(AssetId asset_id, const uint8_t* asset) {
return; // Invalid asset_id
}
- // Check if the asset is in cache and is procedural, and if the pointer
- // matches. This prevents accidentally freeing static data or freeing twice.
- if (g_asset_cache[index].data == asset &&
- (g_asset_cache[index].type == AssetType::PROC ||
- g_asset_cache[index].type == AssetType::PROC_GPU)) {
- delete[] g_asset_cache[index].data;
- g_asset_cache[index] = {}; // Zero out the struct to force re-generation
- }
- // Heap-allocated decompressed buffer (compression != NONE): cache owns it.
- if (g_asset_cache[index].data == asset &&
- g_asset_cache[index].compression != AssetCompression::NONE) {
- delete[] g_asset_cache[index].data;
- g_asset_cache[index] = {};
+ // Check if the asset is in cache and the pointer matches.
+ // This prevents accidentally freeing static data or freeing twice.
+ if (g_asset_cache[index].data != asset) {
+ return; // Pointer mismatch — not our allocation
}
+
+ // Heap-owned: procedural, compressed, or disk-loaded (debug)
+ if (g_asset_cache[index].type == AssetType::PROC ||
+ g_asset_cache[index].type == AssetType::PROC_GPU ||
+ g_asset_cache[index].compression != AssetCompression::NONE
#if !defined(STRIP_ALL)
- if (g_asset_cache[index].data == asset &&
- (g_asset_cache[index].type == AssetType::SPEC ||
- g_asset_cache[index].type == AssetType::MP3 ||
- g_asset_cache[index].type == AssetType::WGSL)) {
+ || g_asset_cache[index].type == AssetType::SPEC ||
+ g_asset_cache[index].type == AssetType::MP3 ||
+ g_asset_cache[index].type == AssetType::WGSL
+#endif
+ ) {
delete[] g_asset_cache[index].data;
g_asset_cache[index] = {};
}
-#endif
// For static assets, no dynamic memory to free.
}
@@ -283,7 +279,9 @@ bool ReloadAssetsFromFile(const char* config_path) {
const AssetRecord& e = g_asset_cache[i];
if (e.data &&
(e.type == AssetType::PROC || e.type == AssetType::PROC_GPU ||
- e.compression != AssetCompression::NONE)) {
+ e.compression != AssetCompression::NONE ||
+ e.type == AssetType::SPEC || e.type == AssetType::MP3 ||
+ e.type == AssetType::WGSL)) {
delete[] e.data;
}
g_asset_cache[i] = {};