3.3 KiB
3.3 KiB
RenderResourceCache
命名空间: XCEngine::Rendering
类型: class
头文件: XCEngine/Rendering/Caches/RenderResourceCache.h
描述: 负责把 CPU 侧 mesh、texture、volume payload 与 buffer view 转成渲染阶段可复用的 GPU 资源缓存。
概览
RenderResourceCache 解决的不是“资源怎么加载”,而是“已经加载好的资源怎样稳定映射成后端可直接消费的 GPU 对象”。
当前它维护四类缓存:
CachedMeshCachedTextureCachedVolumeFieldCachedBufferView
这让 builtin forward、object-id、体积 pass 等不同渲染路径可以共享上传结果,而不必各自重复创建 buffer / SRV。
公开方法
| 方法 | 说明 |
|---|---|
| Destructor | 析构时统一释放所有已缓存 GPU 资源。 |
| Shutdown | 主动清空全部缓存。 |
| GetOrCreateMesh | 获取或创建 mesh 缓存。 |
| GetOrCreateTexture | 获取或创建 texture 缓存。 |
| GetOrCreateVolumeField | 获取或创建 volume payload 缓存。 |
| GetOrCreateBufferView | 获取或创建 buffer resource view 缓存。 |
缓存模型
CachedMesh
保存顶点/索引 buffer 与对应 view,并记录 vertexCount、indexCount、vertexStride 和索引位宽。
CachedTexture
保存 GPU 纹理对象、SRV 以及最终尺寸。
CachedVolumeField
把 VolumeField 的 payload 对齐到 4-byte word stride 后上传为 storage buffer,并生成 structured-buffer SRV。
当前还会保留:
elementStrideelementCountpayloadSizestorageKind
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 视图。