refactor: reorganize docs into plan/ and add skills/
This commit is contained in:
112
docs/api/resources/resources-iloader.md
Normal file
112
docs/api/resources/resources-iloader.md
Normal file
@@ -0,0 +1,112 @@
|
||||
# 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) - 异步加载器
|
||||
Reference in New Issue
Block a user