feat(resources): add LoadGroup and UnloadGroup for batch resource loading

This commit is contained in:
2026-03-18 03:20:18 +08:00
parent 87835c5f7a
commit 8344057886
3 changed files with 40 additions and 0 deletions

View File

@@ -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;

View File

@@ -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 {

View File

@@ -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