Files
XCEngine/docs/api/resources/resources-iloader.md

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());

相关文档