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

3.3 KiB
Raw Blame History

RenderResourceCache

命名空间: XCEngine::Rendering

类型: class

头文件: XCEngine/Rendering/Caches/RenderResourceCache.h

描述: 负责把 CPU 侧 mesh、texture、volume payload 与 buffer view 转成渲染阶段可复用的 GPU 资源缓存。

概览

RenderResourceCache 解决的不是“资源怎么加载”,而是“已经加载好的资源怎样稳定映射成后端可直接消费的 GPU 对象”。

当前它维护四类缓存:

  • CachedMesh
  • CachedTexture
  • CachedVolumeField
  • CachedBufferView

这让 builtin forward、object-id、体积 pass 等不同渲染路径可以共享上传结果,而不必各自重复创建 buffer / SRV。

公开方法

方法 说明
Destructor 析构时统一释放所有已缓存 GPU 资源。
Shutdown 主动清空全部缓存。
GetOrCreateMesh 获取或创建 mesh 缓存。
GetOrCreateTexture 获取或创建 texture 缓存。
GetOrCreateVolumeField 获取或创建 volume payload 缓存。
GetOrCreateBufferView 获取或创建 buffer resource view 缓存。

缓存模型

CachedMesh

保存顶点/索引 buffer 与对应 view并记录 vertexCountindexCountvertexStride 和索引位宽。

CachedTexture

保存 GPU 纹理对象、SRV 以及最终尺寸。

CachedVolumeField

VolumeField 的 payload 对齐到 4-byte word stride 后上传为 storage buffer并生成 structured-buffer SRV。 当前还会保留:

  • elementStride
  • elementCount
  • payloadSize
  • storageKind

CachedBufferView

对任意 RHIBuffer + ResourceViewDesc 组合做 view 级复用,避免同一 buffer 上重复创建结构相同的 SRV/UAV。

当前实现语义

  • mesh / texture / volume cache 以资源裸指针为 key。
  • buffer view cache 以 buffer + viewType + format + dimension + firstElement + elementCount + stride 组合作为 key。
  • 任何上传或 view 创建失败都会立即清理临时对象并返回 nullptr
  • Shutdown() 会遍历四类缓存并显式调用底层 Shutdown() 后释放对象。

设计说明

把上传与缓存放在渲染层,而不是资源层,是一个很典型的引擎分层选择:

  • 资源层可以继续只关心 CPU 侧资产生命周期
  • 渲染层可以按具体 backend 和 pass 需求决定资源布局
  • 新渲染路径只要遵守 RenderResourceCache 契约,就能复用既有上传结果

这和 Unity/Unreal 里“asset object”与“render resource”分离的思路是一致的。

当前实现边界

  • 目前没有版本号或脏标记,底层资源内容变化后不会自动失效。
  • 当前不是线程安全对象。
  • texture 上传路径虽然已覆盖多种格式,但仍依赖当前 RHI 纹理创建约定。
  • volume payload 当前统一按 4-byte word stride 构建 structured-buffer 视图。

相关文档