Files
XCEngine/docs/api/XCEngine/Rendering/RenderResourceCache/GetOrCreateMesh.md

1.7 KiB
Raw Blame History

RenderResourceCache::GetOrCreateMesh

获取或创建某个 Mesh 的 GPU 缓存。

const CachedMesh* GetOrCreateMesh(RHI::RHIDevice* device, const Resources::Mesh* mesh);

参数

  • device - 用于创建 GPU buffer 与 view 的设备。
  • mesh - 需要上传并缓存的网格资源。

行为说明

当前实现会:

  1. 拒绝 device == nullptrmesh == nullptr!mesh->IsValid() 的输入。
  2. mesh 指针地址作为 cache key 查找 m_meshCache
  3. 命中时直接返回已有 CachedMesh
  4. 未命中时调用内部 UploadMesh(...)
    • 顶点数据必须非空,大小大于 0,且 vertexStride > 0
    • 一定会创建 vertex buffer 和 vertex-buffer view。
    • 只有在索引数据存在且计数有效时,才会额外创建 index buffer 和 index-buffer view。
  5. 如果上传失败,会立即清理这次临时创建的 GPU 对象,并返回 nullptr
  6. 上传成功后把结果插入缓存并返回。

返回值

  • 成功时返回 CachedMesh*
  • 输入无效或上传失败时返回 nullptr

当前实现边界

  • 缓存键是资源指针身份不是资源内容摘要mesh 内容后续被修改时,这里不会自动失效或重建。
  • 返回的是缓存内部对象地址;调用 Shutdown 或析构后这些地址会失效。
  • 当前主消费者是 BuiltinForwardPipelineDrawVisibleItem(...) 路径。

相关文档