1.7 KiB
1.7 KiB
RenderResourceCache::GetOrCreateMesh
获取或创建某个 Mesh 的 GPU 缓存。
const CachedMesh* GetOrCreateMesh(RHI::RHIDevice* device, const Resources::Mesh* mesh);
参数
device- 用于创建 GPU buffer 与 view 的设备。mesh- 需要上传并缓存的网格资源。
行为说明
当前实现会:
- 拒绝
device == nullptr、mesh == nullptr或!mesh->IsValid()的输入。 - 以
mesh指针地址作为 cache key 查找m_meshCache。 - 命中时直接返回已有
CachedMesh。 - 未命中时调用内部
UploadMesh(...):- 顶点数据必须非空,大小大于
0,且vertexStride > 0。 - 一定会创建 vertex buffer 和 vertex-buffer view。
- 只有在索引数据存在且计数有效时,才会额外创建 index buffer 和 index-buffer view。
- 顶点数据必须非空,大小大于
- 如果上传失败,会立即清理这次临时创建的 GPU 对象,并返回
nullptr。 - 上传成功后把结果插入缓存并返回。
返回值
- 成功时返回
CachedMesh*。 - 输入无效或上传失败时返回
nullptr。
当前实现边界
- 缓存键是资源指针身份,不是资源内容摘要;mesh 内容后续被修改时,这里不会自动失效或重建。
- 返回的是缓存内部对象地址;调用 Shutdown 或析构后这些地址会失效。
- 当前主消费者是 BuiltinForwardPipeline 的
DrawVisibleItem(...)路径。