# 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 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 结构体 加载操作的返回值结构体。 ```cpp struct LoadResult { IResource* resource = nullptr; // 加载的资源对象 bool success = false; // 是否成功 Containers::String errorMessage; // 错误信息 size_t memorySize = 0; // 资源内存大小 Containers::Array dependencies; // 依赖列表 }; ``` ### 布尔转换 | 转换 | 描述 | |------|------| | `explicit operator bool() const` | `success == true` 时返回 true | ## 使用示例 ```cpp 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 GetDependencies(const Containers::String& path) const override { return {}; // 纹理通常无依赖 } }; // 注册加载器 ResourceManager::Get().RegisterLoader(new TextureLoader()); ``` ## 相关文档 - [ResourceManager](./resources-resourcemanager.md) - 资源管理器 - [AsyncLoader](./resources-asyncloader.md) - 异步加载器