3.4 KiB
3.4 KiB
IResourceLoader
命名空间: XCEngine::Resources
类型: class (abstract)
描述: 资源加载器抽象接口,定义了资源加载的标准协议。每个资源类型需要提供对应的加载器实现。
概述
IResourceLoader 是资源加载系统的核心抽象接口。它定义了同步和异步加载资源的方法,以及资源类型的查询和依赖信息的获取。ResourceManager 通过注册加载器来支持不同类型资源的加载。
公共方法
资源信息
| 方法 | 描述 |
|---|---|
ResourceType GetResourceType() const |
获取此加载器支持的资源类型 |
const Containers::String& GetResourceTypeName() const |
获取资源类型的字符串名称 |
size_t GetResourceSize(const Containers::String& path) const |
获取资源文件大小 |
同步加载
| 方法 | 描述 |
|---|---|
LoadResult Load(const Containers::String& path, ImportSettings* settings) |
同步加载资源 |
bool Save(const Containers::String& path, IResource* resource) |
保存资源到文件 |
异步加载
| 方法 | 描述 |
|---|---|
LoadResult LoadAsync(const Containers::String& path, ImportSettings* settings) |
异步加载资源(内部使用) |
依赖管理
| 方法 | 描述 |
|---|---|
Containers::Array<Containers::String> GetDependencies(const Containers::String& path) const |
获取资源依赖的文件路径列表 |
资源操作
| 方法 | 描述 |
|---|---|
bool Reload(IResource* resource, const Containers::String& path) |
重新加载资源 |
void Unload(IResource* resource) |
卸载资源 |
文件系统
| 方法 | 描述 |
|---|---|
bool Exists(const Containers::String& path) const |
检查资源文件是否存在 |
Containers::String ResolvePath(const Containers::String& relativePath) const |
解析资源路径 |
LoadResult 结构体
加载操作的返回值结构体。
struct LoadResult {
IResource* resource = nullptr; // 加载的资源对象
bool success = false; // 是否成功
Containers::String errorMessage; // 错误信息
size_t memorySize = 0; // 资源内存大小
Containers::Array<Containers::String> dependencies; // 依赖列表
};
布尔转换
| 转换 | 描述 |
|---|---|
explicit operator bool() const |
success == true 时返回 true |
使用示例
class TextureLoader : public IResourceLoader {
public:
ResourceType GetResourceType() const override {
return ResourceType::Texture;
}
const Containers::String& GetResourceTypeName() const override {
static Containers::String name = "Texture";
return name;
}
LoadResult Load(const Containers::String& path,
ImportSettings* settings) override {
LoadResult result;
// 实现加载逻辑...
result.success = true;
result.resource = new Texture();
return result;
}
Containers::Array<Containers::String>
GetDependencies(const Containers::String& path) const override {
return {}; // 纹理通常无依赖
}
};
// 注册加载器
ResourceManager::Get().RegisterLoader(new TextureLoader());
相关文档
- ResourceManager - 资源管理器
- AsyncLoader - 异步加载器