feat(resources): add LoadGroup and UnloadGroup for batch resource loading
This commit is contained in:
@@ -85,6 +85,23 @@ public:
|
||||
|
||||
Containers::String ResolvePath(const Containers::String& relativePath) const;
|
||||
|
||||
template<typename T>
|
||||
void LoadGroup(const Containers::Array<Containers::String>& paths,
|
||||
std::function<void(ResourceHandle<T>)> callback) {
|
||||
for (const auto& path : paths) {
|
||||
LoadAsync(path, GetResourceType<T>(), [callback](LoadResult result) {
|
||||
if (result && result.resource) {
|
||||
callback(ResourceHandle<T>(static_cast<T*>(result.resource)));
|
||||
} else {
|
||||
callback(ResourceHandle<T>());
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Containers::Array<Containers::String> GetResourcePaths() const;
|
||||
void UnloadGroup(const Containers::Array<ResourceGUID>& guids);
|
||||
|
||||
private:
|
||||
ResourceManager() = default;
|
||||
~ResourceManager() = default;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "IResourceLoader.h"
|
||||
#include "ResourceCache.h"
|
||||
#include "AsyncLoader.h"
|
||||
#include "ResourceDependencyGraph.h"
|
||||
|
||||
#include "Texture.h"
|
||||
#include "TextureLoader.h"
|
||||
@@ -22,6 +23,7 @@
|
||||
|
||||
#include "ResourceFileSystem.h"
|
||||
#include "FileArchive.h"
|
||||
#include "ResourcePackage.h"
|
||||
|
||||
// Forward declarations for concrete resource types
|
||||
namespace XCEngine {
|
||||
|
||||
@@ -186,5 +186,26 @@ void ResourceManager::ReloadResource(ResourceGUID guid) {
|
||||
}
|
||||
}
|
||||
|
||||
Containers::Array<Containers::String> ResourceManager::GetResourcePaths() const {
|
||||
Containers::Array<Containers::String> paths;
|
||||
for (const auto& pair : m_guidToPath) {
|
||||
paths.Add(pair.value);
|
||||
}
|
||||
return paths;
|
||||
}
|
||||
|
||||
void ResourceManager::UnloadGroup(const Containers::Array<ResourceGUID>& guids) {
|
||||
std::lock_guard lock(m_mutex);
|
||||
for (const auto& guid : guids) {
|
||||
auto* it = m_resourceCache.Find(guid);
|
||||
if (it != nullptr) {
|
||||
IResource* resource = *it;
|
||||
m_resourceCache.Erase(guid);
|
||||
m_memoryUsage -= resource->GetMemorySize();
|
||||
resource->Release();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Resources
|
||||
} // namespace XCEngine
|
||||
|
||||
Reference in New Issue
Block a user