@@ -303,7 +303,7 @@ class IAssetLoader : public virtual core::IReferenceCounted
303
303
return true ;
304
304
};
305
305
306
- auto bundle = interm_getAssetInHierarchy_find (std::forward<Args>(args)...);
306
+ auto bundle = interm_getAssetInHierarchy_find (_restoreLevels, std::forward<Args>(args)...);
307
307
308
308
if (bundle.getContents ().empty () || !any_dummy (bundle))
309
309
return bundle;
@@ -339,30 +339,40 @@ class IAssetLoader : public virtual core::IReferenceCounted
339
339
}
340
340
341
341
private:
342
- static IAssetLoader::SAssetLoadParams getFindParams (IAssetLoader::SAssetLoadParams _params)
342
+ static IAssetLoader::SAssetLoadParams getFindParams (IAssetLoader::SAssetLoadParams _params, uint32_t _restoreLevels, uint32_t _hierLevel )
343
343
{
344
- _params.cacheFlags = static_cast <E_CACHING_FLAGS>(_params.cacheFlags & ECF_DONT_CACHE_REFERENCES);
344
+ using flags_t = std::underlying_type_t <E_CACHING_FLAGS>;
345
+ flags_t mask = static_cast <flags_t >(0 );
346
+ mask = core::bitfieldInsert<flags_t >(mask, ECF_DONT_CACHE_REFERENCES, 2u *_hierLevel, 2u *_restoreLevels);
347
+ _params.cacheFlags = static_cast <E_CACHING_FLAGS>(_params.cacheFlags & mask);
345
348
return _params;
346
349
}
347
- SAssetBundle interm_getAssetInHierarchy_find (IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
350
+ SAssetBundle interm_getAssetInHierarchy_find (uint32_t _restoreLevels, IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
348
351
{
349
- return interm_getAssetInHierarchy (_mgr, _file, _supposedFilename, getFindParams (_params), _hierarchyLevel);
352
+ return interm_getAssetInHierarchy (_mgr, _file, _supposedFilename, getFindParams (_params, _restoreLevels, _hierarchyLevel ), _hierarchyLevel);
350
353
}
351
- SAssetBundle interm_getAssetInHierarchy_find (IAssetManager* _mgr, const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
354
+ SAssetBundle interm_getAssetInHierarchy_find (uint32_t _restoreLevels, IAssetManager* _mgr, const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
352
355
{
353
- return interm_getAssetInHierarchy (_mgr, _filename, getFindParams (_params), _hierarchyLevel, _override);
356
+ return interm_getAssetInHierarchy (_mgr, _filename, getFindParams (_params, _restoreLevels, _hierarchyLevel ), _hierarchyLevel, _override);
354
357
}
355
- SAssetBundle interm_getAssetInHierarchy_find (IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
358
+ SAssetBundle interm_getAssetInHierarchy_find (uint32_t _restoreLevels, IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
356
359
{
357
- return interm_getAssetInHierarchy (_mgr, _file, _supposedFilename, getFindParams (_params), _hierarchyLevel);
360
+ return interm_getAssetInHierarchy (_mgr, _file, _supposedFilename, getFindParams (_params, _restoreLevels, _hierarchyLevel ), _hierarchyLevel);
358
361
}
359
- SAssetBundle interm_getAssetInHierarchy_find (IAssetManager* _mgr, const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
362
+ SAssetBundle interm_getAssetInHierarchy_find (uint32_t _restoreLevels, IAssetManager* _mgr, const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel)
360
363
{
361
- return interm_getAssetInHierarchy (_mgr, _filename, getFindParams (_params), _hierarchyLevel);
364
+ return interm_getAssetInHierarchy (_mgr, _filename, getFindParams (_params, _restoreLevels, _hierarchyLevel ), _hierarchyLevel);
362
365
}
363
366
static IAssetLoader::SAssetLoadParams getReloadParams (IAssetLoader::SAssetLoadParams _params, uint32_t _restoreLevels, uint32_t _hierLevel)
364
367
{
365
- _params.cacheFlags = ECF_DUPLICATE_UNTIL_LEVEL (_restoreLevels + _hierLevel);
368
+ using flags_t = std::underlying_type_t <E_CACHING_FLAGS>;
369
+ constexpr uint32_t bitdepth = sizeof (flags_t )*8u ;
370
+ const flags_t zeroOutMask = (~static_cast <flags_t >(0 )) >> (bitdepth - 2u *(_restoreLevels+_hierLevel));
371
+ flags_t reloadFlags = _params.cacheFlags ;
372
+ reloadFlags &= zeroOutMask; // make sure we never pointlessy reload levels above (_restoreLevels+_hierLevel) in reload pass
373
+ // set flags for levels [_hierLevel,_hierLevel+_restoreLevels) to dont look into cache and dont put into cache
374
+ reloadFlags = core::bitfieldInsert<flags_t >(reloadFlags, ECF_DUPLICATE_REFERENCES, _hierLevel*2 , _restoreLevels*2 );
375
+ _params.cacheFlags = static_cast <E_CACHING_FLAGS>(reloadFlags);
366
376
return _params;
367
377
}
368
378
SAssetBundle interm_getAssetInHierarchy_reload (uint32_t _restoreLevels, IAssetManager* _mgr, io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, uint32_t _hierarchyLevel, IAssetLoader::IAssetLoaderOverride* _override)
0 commit comments