Skip to content

Commit d5ac56a

Browse files
committed
Fixed things from PR comments
1 parent a363f73 commit d5ac56a

File tree

4 files changed

+29
-43
lines changed

4 files changed

+29
-43
lines changed

include/nbl/asset/IAssetManager.h

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -211,13 +211,6 @@ class IAssetManager : public core::IReferenceCounted, public core::QuitSignallin
211211
{
212212
params.meshManipulatorOverride = m_meshManipulator.get();
213213
}
214-
if (restoreLevels)
215-
{
216-
using flags_t = std::underlying_type_t<IAssetLoader::E_CACHING_FLAGS>;
217-
flags_t mask = ~static_cast<flags_t>(0);
218-
mask = core::bitfieldInsert<flags_t>(mask, IAssetLoader::ECF_DONT_CACHE_REFERENCES, 2u*_hierarchyLevel, 2u*restoreLevels);
219-
params.cacheFlags = static_cast<IAssetLoader::E_CACHING_FLAGS>(params.cacheFlags & mask);
220-
}
221214

222215
IAssetLoader::SAssetLoadContext ctx{params, _file};
223216

@@ -280,7 +273,7 @@ class IAssetManager : public core::IReferenceCounted, public core::QuitSignallin
280273

281274
if (restoreLevels)
282275
{
283-
auto reloadParams = _params;
276+
auto reloadParams = IAssetLoader::SAssetLoadParams(_params, true);
284277
{
285278
using flags_t = std::underlying_type_t<IAssetLoader::E_CACHING_FLAGS>;
286279
constexpr uint32_t bitdepth = sizeof(flags_t)*8u;
@@ -290,25 +283,25 @@ class IAssetManager : public core::IReferenceCounted, public core::QuitSignallin
290283
// set flags for levels [_hierLevel,_hierLevel+_restoreLevels) to dont look into cache and dont put into cache
291284
reloadFlags = core::bitfieldInsert<flags_t>(reloadFlags, IAssetLoader::ECF_DUPLICATE_REFERENCES, _hierarchyLevel*2u, restoreLevels*2u);
292285
reloadParams.cacheFlags = static_cast<IAssetLoader::E_CACHING_FLAGS>(reloadFlags);
293-
294286
reloadParams.restoreLevels = 0u; // make sure it wont turn into infinite recursion
295-
reloadParams.reload = true; // TODO (consider): alternative to this flag: another method in override just to let user choose asset for restore
296287
}
297288

298289
auto reloadBundle = getAssetInHierarchy_impl<RestoreWholeBundle>(_file, _supposedFilename, reloadParams, _hierarchyLevel, _override);
299290

300-
if constexpr (RestoreWholeBundle)
291+
if constexpr (!RestoreWholeBundle)
301292
{
302293
IAssetLoader::SAssetLoadContext ctx(params, file);
303294
auto asset = _override->chooseDefaultAsset(bundle, ctx);
304295

305-
// user responsible for checking if assets he wanted to be restored are in fact restored
306-
_override->handleRestore(std::move(asset), bundle, reloadBundle, restoreLevels);
296+
auto newChosenAsset = _override->handleRestore(std::move(asset), bundle, reloadBundle, restoreLevels);
297+
if (!newChosenAsset || newChosenAsset->isAnyDependencyDummy(restoreLevels))
298+
return {};
307299
}
308300
else
309301
{
310-
// user responsible for checking if assets he wanted to be restored are in fact restored
311302
_override->handleRestore(bundle, reloadBundle, restoreLevels);
303+
if (!whole_bundle_not_dummy(bundle))
304+
return {};
312305
}
313306
}
314307

@@ -405,26 +398,6 @@ class IAssetManager : public core::IReferenceCounted, public core::QuitSignallin
405398
return getAsset(_file, _supposedFilename, _params, &m_defaultLoaderOverride);
406399
}
407400

408-
SAssetBundle getAssetWholeBundleRestore(const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params, IAssetLoader::IAssetLoaderOverride* _override)
409-
{
410-
return getAssetInHierarchyWholeBundleRestore(_filename, _params, 0u, _override);
411-
}
412-
//TODO change name
413-
SAssetBundle getAssetWholeBundleRestore(io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params, IAssetLoader::IAssetLoaderOverride* _override)
414-
{
415-
return getAssetInHierarchyWholeBundleRestore(_file, _supposedFilename, _params, 0u, _override);
416-
}
417-
//TODO change name
418-
SAssetBundle getAssetWholeBundleRestore(const std::string& _filename, const IAssetLoader::SAssetLoadParams& _params)
419-
{
420-
return getAssetWholeBundleRestore(_filename, _params, &m_defaultLoaderOverride);
421-
}
422-
//TODO change name
423-
SAssetBundle getAssetWholeBundleRestore(io::IReadFile* _file, const std::string& _supposedFilename, const IAssetLoader::SAssetLoadParams& _params)
424-
{
425-
return getAssetWholeBundleRestore(_file, _supposedFilename, _params, &m_defaultLoaderOverride);
426-
}
427-
428401
//TODO change name
429402
//! Check whether Assets exist in cache using a key and optionally their types
430403
/*

include/nbl/asset/interchange/IAssetLoader.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,15 +103,26 @@ class IAssetLoader : public virtual core::IReferenceCounted
103103
{
104104
}
105105

106+
SAssetLoadParams(const SAssetLoadParams& rhs, bool _reload = false) :
107+
decryptionKeyLen(rhs.decryptionKeyLen),
108+
decryptionKey(rhs.decryptionKey),
109+
cacheFlags(rhs.cacheFlags),
110+
relativeDir(rhs.relativeDir),
111+
loaderFlags(rhs.loaderFlags),
112+
meshManipulatorOverride(rhs.meshManipulatorOverride),
113+
restoreLevels(rhs.restoreLevels),
114+
reload(_reload)
115+
{
116+
}
117+
106118
size_t decryptionKeyLen;
107119
const uint8_t* decryptionKey;
108120
E_CACHING_FLAGS cacheFlags;
109121
const char* relativeDir;
110122
E_LOADER_PARAMETER_FLAGS loaderFlags; //!< Flags having an impact on extraordinary tasks during loading process
111123
IMeshManipulator* meshManipulatorOverride = nullptr; //!< pointer used for specifying custom mesh manipulator to use, if nullptr - default mesh manipulator will be used
112124
uint32_t restoreLevels = 0u;
113-
// user should not ever write to this flag
114-
bool reload = false;
125+
const bool reload = false;
115126
};
116127

117128
//! Struct for keeping the state of the current loadoperation for safe threading
@@ -267,7 +278,7 @@ class IAssetLoader : public virtual core::IReferenceCounted
267278

268279
//! Restores only the chosen asset
269280
//! The asset is chosen via chooseDefaultAsset()
270-
virtual void handleRestore(core::smart_refctd_ptr<IAsset>&& _chosenAsset, SAssetBundle& _bundle, SAssetBundle& _reloadedBundle, uint32_t _restoreLevels);
281+
virtual core::smart_refctd_ptr<IAsset> handleRestore(core::smart_refctd_ptr<IAsset>&& _chosenAsset, SAssetBundle& _bundle, SAssetBundle& _reloadedBundle, uint32_t _restoreLevels);
271282

272283
//! Restores all of assets in _bundle
273284
virtual void handleRestore(SAssetBundle& _bundle, SAssetBundle& _reloadedBundle, uint32_t _restoreLevels);

src/nbl/asset/interchange/IAssetLoader.cpp

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,24 @@ void IAssetLoader::IAssetLoaderOverride::insertAssetIntoCache(SAssetBundle& asse
3535
m_manager->insertAssetIntoCache(asset, ASSET_MUTABILITY_ON_CACHE_INSERT);
3636
}
3737

38-
void IAssetLoader::IAssetLoaderOverride::handleRestore(core::smart_refctd_ptr<IAsset>&& _chosenAsset, SAssetBundle& _bundle, SAssetBundle& _reloadedBundle, uint32_t _restoreLevels)
38+
core::smart_refctd_ptr<IAsset> IAssetLoader::IAssetLoaderOverride::handleRestore(core::smart_refctd_ptr<IAsset>&& _chosenAsset, SAssetBundle& _bundle, SAssetBundle& _reloadedBundle, uint32_t _restoreLevels)
3939
{
4040
if (_bundle.getContents().size() != _reloadedBundle.getContents().size())
41-
return;
41+
return nullptr;
4242

4343
auto dummies = _bundle.getContents();
4444
auto found_it = std::find(dummies.begin(), dummies.end(), _chosenAsset);
4545
if (found_it == dummies.end())
46-
return;
46+
return nullptr;
4747
const uint32_t ix = found_it - dummies.begin();
4848

4949
auto reloaded = _reloadedBundle.getContents();
50-
if (dummies.begin()[ix]->isADummyObjectForCache() && !dummies.begin()[ix]->canBeRestoredFrom(reloaded.begin()[ix].get()))
51-
return;
50+
if (_chosenAsset->isADummyObjectForCache() && !_chosenAsset->canBeRestoredFrom(reloaded.begin()[ix].get()))
51+
return nullptr;
5252

5353
_chosenAsset->restoreFromDummy(reloaded.begin()[ix].get(), _restoreLevels);
54+
55+
return _chosenAsset;
5456
}
5557

5658
void IAssetLoader::IAssetLoaderOverride::handleRestore(SAssetBundle& _bundle, SAssetBundle& _reloadedBundle, uint32_t _restoreLevels)

src/nbl/ext/MitsubaLoader/CMitsubaLoader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -943,7 +943,7 @@ SContext::tex_ass_type CMitsubaLoader::cacheTexture(SContext& ctx, uint32_t hier
943943
if (_restore && image->isADummyObjectForCache())
944944
{
945945
auto loadParams = ctx.inner.params;
946-
loadParams.restoreLevels = hierarchyLevel + 2u;
946+
loadParams.restoreLevels = std::max(loadParams.restoreLevels, hierarchyLevel + 2u);
947947
// this will restore the image being kept by found `view`
948948
auto bundle = interm_getAssetInHierarchy(m_assetMgr, tex->bitmap.filename.svalue, loadParams, hierarchyLevel, ctx.override_);
949949
if (bundle.getContents().empty() || image->isADummyObjectForCache())

0 commit comments

Comments
 (0)