|
| static ResourceManager & | GetInstance () |
| static void | Init () |
| static void | Destroy () |
| | 释放所有资源缓存(必须在 SDL_Quit 之前调用)
|
| template<typename Res, typename... Args> |
| static Res * | Load (Args &&... args) |
| | 取或加载(懒加载)。键参数直接构造 ResourceTraits<Res>::KeyType: Load<Texture>("a.png") / Load<Font>("a.ttf", 24.f) 返回封装资源(->get() 取底层句柄);失败返回 nullptr(未缓存,可重试)。
|
| template<typename Res, typename... Args> |
| static Res * | Find (Args &&... args) |
| | 仅查询缓存(命中返回封装,未命中不加载返回 nullptr)
|
| template<typename Res, typename... Args> |
| static bool | Unload (Args &&... args) |
| | 卸载单个资源(返回是否确实缓存过)
|
| template<typename Res> |
| static void | Clear () |
| | 清空某类资源的全部缓存(如 Clear<Audio>())
|
| static void | SetAudioMixer (MIX_Mixer *mixer) |
| static void | SetAssetRoot (const std::string &root) |
| | 设置资产根目录(空串清除)。相对路径在资产根下存在时按根解析,否则原样 (进程 cwd 语义)。编辑器打开项目时指向项目根,使项目内相对路径可加载。
|
| static const std::string & | GetAssetRoot () |
| static std::string | ResolveAssetPath (const std::string &path) |
| | 绝对路径原样返回;相对路径先试资产根(存在才用),否则原样返回
|
| static Resource * | GetResourceByUuid (std::uint64_t uuid) |
| | 按会话级 uuid 查资源(遍历全部已注册缓存;未命中返回 nullptr)
|
资源管理器(引擎上下文持有)—— 模板化统一门面
通过 Load<T>(key...) 按资源类型访问缓存;每种类型由 ResourceTraits<T> 特化 描述(缓存键 / 哈希 / 工厂),首次使用时自动在类型注册表创建独立缓存。
扩展新资源类型(引擎或插件侧):继承 Resource 实现 load()/release(),再 特化 ResourceTraits<T>(KeyType/HashType/kTypeName/create)即可——缓存、 GetResourceByUuid、全量清理、日志计数自动接入,管理器零改动。
语义:懒加载;加载失败不缓存(下次请求重试,文件后补/修复后自愈)。 同键资源只加载一次;调用方借用指针,缓存生命周期 = 引擎会话 (Game::Destroy 统一按序销毁),借用裸指针安全。 相对路径经资产根解析(SetAssetRoot,编辑器指向项目根);未命中回退进程 cwd 语义——Runtime 的 "resource/..." 场景路径不受影响。