diff options
| author | skal <pascal.massimino@gmail.com> | 2026-02-03 08:42:12 +0100 |
|---|---|---|
| committer | skal <pascal.massimino@gmail.com> | 2026-02-03 08:42:12 +0100 |
| commit | 59c72c95b5fdd756d4b0134fad32f7a3f4daa2aa (patch) | |
| tree | c60e6b69f3cfeaa0856e17b26690bea63ea44fc2 /src/util | |
| parent | dd849f36c09d08c4cd7a66348232206032455700 (diff) | |
fix(assets): Resolve static initialization order fiasco
Replaces the global array with which wraps a local static array. This ensures the asset table is initialized on first use, preventing crashes when other globals (like shader strings) try to access assets during dynamic initialization.
Diffstat (limited to 'src/util')
| -rw-r--r-- | src/util/asset_manager.cc | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/src/util/asset_manager.cc b/src/util/asset_manager.cc index 65b3200..d9ecfe1 100644 --- a/src/util/asset_manager.cc +++ b/src/util/asset_manager.cc @@ -24,14 +24,6 @@ static const std::map<std::string, ProcGenFunc> kAssetManagerProcGenFuncMap = { {"make_periodic", procedural::make_periodic}, }; -// These are defined in the generated assets_data.cc -#if defined(USE_TEST_ASSETS) -extern const AssetRecord g_assets[]; -extern const size_t g_assets_count; -#else -extern const AssetRecord g_assets[]; -extern const size_t g_assets_count; -#endif // Array-based cache for assets. // Initialized to all zeros (nullptr data, 0 size, false is_procedural) // The size is derived from the generated ASSET_LAST_ID enum value. @@ -59,15 +51,19 @@ const uint8_t* GetAsset(AssetId asset_id, size_t* out_size) { return g_asset_cache[index].data; } + const AssetRecord* assets = GetAssetRecordTable(); + size_t count = GetAssetCount(); + // Not in cache, retrieve from static data (packed in binary) or generate // procedurally - if (index >= g_assets_count) { + if (index >= count) { if (out_size) *out_size = 0; return nullptr; // Invalid asset_id or asset not in static packed data. } - AssetRecord source_record = g_assets[index]; + AssetRecord source_record = assets[index]; + AssetRecord cached_record = source_record; if (source_record.is_procedural) { |
