docs: 删除废弃的资源服务设计文档

该文档已不再使用,其内容已被迁移到新的设计文档中
This commit is contained in:
ChestnutYueyue 2026-02-20 19:03:13 +08:00
parent b41e96d870
commit 4e6db88da5
1 changed files with 0 additions and 199 deletions

View File

@ -1,199 +0,0 @@
# Extra2D 资源服务设计计划
## 1. 概述
设计一个现代化的资源服务,支持高效的资源管理、存储和访问功能。采用设计模式确保代码的可扩展性、可维护性和性能。
## 2. 设计目标
- **高效缓存**: 避免重复加载相同资源
- **类型安全**: 使用模板和强类型ID
- **异步加载**: 支持后台加载大资源
- **内存管理**: 自动释放未使用资源
- **扩展性**: 易于添加新资源类型
## 3. 核心组件设计
### 3.1 资源类型枚举
```cpp
enum class AssetType {
Texture, // 纹理/图片
Font, // 字体
Shader, // 着色器
Audio, // 音频
Data, // 通用数据
Custom // 自定义类型
};
```
### 3.2 资源句柄 (Resource Handle)
使用强类型句柄替代裸指针,提供类型安全和生命周期管理:
```cpp
template<typename T>
class AssetHandle {
AssetID id_;
Weak<T> cacheRef_;
public:
bool valid() const;
Ref<T> get() const;
void release();
};
```
### 3.3 资源基类
```cpp
class Asset {
public:
virtual ~Asset() = default;
virtual AssetType type() const = 0;
virtual bool loaded() const = 0;
virtual size_t memorySize() const = 0;
const AssetID& id() const { return id_; }
const std::string& path() const { return path_; }
protected:
AssetID id_;
std::string path_;
std::atomic<bool> loaded_{false};
};
```
### 3.4 具体资源类型
#### 纹理资源
```cpp
class TextureAsset : public Asset {
public:
AssetType type() const override { return AssetType::Texture; }
int width() const { return width_; }
int height() const { return height_; }
int channels() const { return channels_; }
const u8* data() const { return data_.get(); }
private:
int width_ = 0;
int height_ = 0;
int channels_ = 0;
Unique<u8[]> data_;
};
```
#### 字体资源
```cpp
class FontAsset : public Asset {
public:
AssetType type() const override { return AssetType::Font; }
const stbtt_fontinfo& info() const { return info_; }
float scaleForPixelHeight(float pixels) const;
private:
std::vector<u8> data_;
stbtt_fontinfo info_;
};
```
#### 着色器资源
```cpp
class ShaderAsset : public Asset {
public:
AssetType type() const override { return AssetType::Shader; }
const std::string& vertexSource() const { return vertexSrc_; }
const std::string& fragmentSource() const { return fragmentSrc_; }
private:
std::string vertexSrc_;
std::string fragmentSrc_;
};
```
## 4. 服务接口设计
### 4.1 资源服务接口
```cpp
class IAssetService : public IService {
public:
virtual ~IAssetService() = default;
// 同步加载
template<typename T>
AssetHandle<T> load(const std::string& path);
// 异步加载
template<typename T>
void loadAsync(const std::string& path, AssetLoadCallback<T> callback);
// 获取已缓存资源
template<typename T>
AssetHandle<T> get(const std::string& path);
// 卸载资源
virtual void unload(const AssetID& id) = 0;
virtual void unloadAll() = 0;
// 缓存管理
virtual void setCacheLimit(size_t maxBytes) = 0;
virtual size_t cacheSize() const = 0;
virtual void gc() = 0; // 垃圾回收
// 注册加载器
template<typename T>
void registerLoader(Unique<AssetLoader<T>> loader);
};
```
### 4.2 资源加载器接口
使用**策略模式**支持不同资源类型的加载:
```cpp
template<typename T>
class AssetLoader {
public:
virtual ~AssetLoader() = default;
virtual Unique<T> load(const std::string& path) = 0;
virtual bool canLoad(const std::string& path) const = 0;
virtual AssetType type() const = 0;
};
// 纹理加载器
class TextureLoader : public AssetLoader<TextureAsset> {
public:
Unique<TextureAsset> load(const std::string& path) override;
bool canLoad(const std::string& path) const override;
AssetType type() const override { return AssetType::Texture; }
};
// 字体加载器
class FontLoader : public AssetLoader<FontAsset> {
public:
Unique<FontAsset> load(const std::string& path) override;
bool canLoad(const std::string& path) const override;
AssetType type() const override { return AssetType::Font; }
};
```
## 5. 实现架构
### 5.1 类图
```
IService
IAssetService (接口)
AssetService (实现)
┌──────────────┼──────────────┐
│ │ │
▼ ▼ ▼