// // Created by atdunbg on 2026/9/22. // #include #include namespace Engine::Assets { AssetManager::AssetManager(IAssetUploader& uploader) : m_Uploader(uploader) { ENGINE_INFO("AssetManager created"); } ModelRef AssetManager::LoadModel(const std::string& path) { // GPU 上传经接口发生在渲染层实现里,本层只管缓存与句柄 return m_Models.Load(path, [this](const std::string& p) { return m_Uploader.LoadModel(p); }); } ModelRef AssetManager::CreatePlane(f32 halfSize, u8 r, u8 g, u8 b) { // 程序化资产复用同一缓存:键 = 伪路径 + 参数 std::string key = "procedural://plane/" + std::to_string(halfSize) + "/" + std::to_string(r) + "," + std::to_string(g) + "," + std::to_string(b); return m_Models.Load(key, [&](const std::string&) { return m_Uploader.CreatePlane(halfSize, r, g, b); }); } EnvRef AssetManager::LoadEnvironment(const std::string& path) { // GPU 生成(compute 预积分)经接口发生在渲染层实现里 return m_Environments.Load(path, [this](const std::string& p) { return m_Uploader.LoadEnvironment(p); }); } EnvRef AssetManager::LoadEnvironment(const std::string& path, DecodedEquirect&& decoded) { // 预解码数据移交 loader(Load 同步调用 lambda,引用捕获安全); // 路径已缓存则 loader 不执行,decoded 自然丢弃(去重) return m_Environments.Load(path, [this, &decoded](const std::string& p) { return m_Uploader.LoadEnvironment(p, std::move(decoded)); }); } } // namespace Engine::Assets