diff --git a/doc/changelog.dox b/doc/changelog.dox index f33b56fa8..2e724ee3d 100644 --- a/doc/changelog.dox +++ b/doc/changelog.dox @@ -280,6 +280,9 @@ See also: - Dynamic plugins on static Magnum builds on Windows were accidentally searched for in the `lib/` directory instead of `bin/`, and in some cases in `bin/` instead of `lib/` on Unix platforms. +- @ref Resource was unnecessarily querying the @ref ResourceManager for + updated data even in cases where no resource update was done since last + check @subsection changelog-latest-deprecated Deprecated APIs diff --git a/src/Magnum/Resource.h b/src/Magnum/Resource.h index ac4dbedd1..546f8eff8 100644 --- a/src/Magnum/Resource.h +++ b/src/Magnum/Resource.h @@ -285,7 +285,7 @@ template void Resource::acquire() { if(_state == ResourceState::Final) return; /* Nothing changed since last check */ - if(_manager->lastChange() < _lastCheck) return; + if(_manager->lastChange() <= _lastCheck) return; /* Acquire new data and save last check time */ const typename Implementation::ResourceManagerData::Data& d = _manager->data(_key); diff --git a/src/Magnum/ResourceManager.h b/src/Magnum/ResourceManager.h index e57247563..ef30693ec 100644 --- a/src/Magnum/ResourceManager.h +++ b/src/Magnum/ResourceManager.h @@ -527,6 +527,9 @@ template void ResourceManagerData::set(const ResourceKey key, T* con template void ResourceManagerData::setFallback(T* const data) { safeDelete(_fallback); _fallback = data; + /* Notify resources also in this case, as some of them could go from empty + to a fallback (or from a fallback to empty) */ + ++_lastChange; } template void ResourceManagerData::free() {