feat: 模型异步加载——assimp 解析移后台线程(SunTemple 3s 卡顿消除)
Model 拆两段式:ParseFromDisk(static 纯 CPU,assimp 解析 → 几何 + 材质引用,worker 可调)/ FromParsed(GPU 构建:纹理上传 / mesh 缓冲 / 材质描述符,主线程),同步路径等价两段串行。第二个异步任务类型落地, 线程收割骨架抽成 Core/AsyncTask<T>(thread + atomic + Take,覆盖式 Run;pending 接力语义留调用方)。 实测(SunTemple 1056 mesh):解析 2.5s 全程在 worker,主线程持续 渲染;GPU 构建 0.56s。assets 层经 IAssetUploader/AssetManager 重载 传预解析产物(路径缓存去重,路径已缓存则产物丢弃)。 已知边界:纹理解码(backpack 4k PNG ~1s)仍在 GPU 段主线程—— Texture 需支持预解码像素注入,后续演进。
This commit is contained in:
@@ -15,6 +15,14 @@ namespace Engine {
|
||||
m_Device, m_Allocator, m_Descriptors, m_TextureLayout, path);
|
||||
}
|
||||
|
||||
Scope<Model> VulkanAssetUploader::LoadModel(const std::string& path,
|
||||
ParsedModel&& parsed)
|
||||
{
|
||||
// 异步路径:assimp 解析已在 worker 线程完成,此处只剩 GPU 构建
|
||||
return Model::FromParsed(m_Device, m_Allocator, m_Descriptors,
|
||||
m_TextureLayout, std::move(parsed));
|
||||
}
|
||||
|
||||
Scope<Model> VulkanAssetUploader::CreatePlane(f32 halfSize, u8 r, u8 g, u8 b)
|
||||
{
|
||||
return Model::CreatePlane(m_Device, m_Allocator, m_Descriptors,
|
||||
|
||||
Reference in New Issue
Block a user