113 lines
3.4 KiB
Markdown
113 lines
3.4 KiB
Markdown
# 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 结构体
|
|
|
|
加载操作的返回值结构体。
|
|
|
|
```cpp
|
|
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 |
|
|
|
|
## 使用示例
|
|
|
|
```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<Containers::String>
|
|
GetDependencies(const Containers::String& path) const override {
|
|
return {}; // 纹理通常无依赖
|
|
}
|
|
};
|
|
|
|
// 注册加载器
|
|
ResourceManager::Get().RegisterLoader(new TextureLoader());
|
|
```
|
|
|
|
## 相关文档
|
|
|
|
- [ResourceManager](./resources-resourcemanager.md) - 资源管理器
|
|
- [AsyncLoader](./resources-asyncloader.md) - 异步加载器
|