2.3 KiB
2.3 KiB
RenderResourceCache
命名空间: XCEngine::Rendering
类型: class
头文件: XCEngine/Rendering/RenderResourceCache.h
描述: 负责把 Mesh 和 Texture 上传成 RHI 资源,并在渲染阶段按资源指针缓存这些 GPU 对象。
概述
RenderResourceCache 解决的是一个典型渲染层问题:场景与资源系统持有的是 CPU 侧 Mesh / Texture 对象,但绘制时真正需要的是 GPU 侧 buffer、texture 和 resource view。
当前缓存分成两类:
CachedMeshCachedTexture
CachedMesh
| 字段 | 说明 |
|---|---|
vertexBuffer |
顶点缓冲对象。 |
vertexBufferView |
顶点缓冲视图。 |
indexBuffer |
索引缓冲对象。 |
indexBufferView |
索引缓冲视图。 |
vertexCount |
顶点数量。 |
indexCount |
索引数量。 |
vertexStride |
顶点步长。 |
uses32BitIndices |
是否使用 32 位索引。 |
CachedTexture
| 字段 | 说明 |
|---|---|
texture |
GPU 纹理对象。 |
shaderResourceView |
着色器资源视图。 |
width |
纹理宽度。 |
height |
纹理高度。 |
当前实现边界
- cache key 是
const Resources::Mesh*和const Resources::Texture*裸指针。 - 当前没有脏标记或版本号,因此资源内容发生变化后,缓存不会自动失效。
- 当前不是线程安全的。
- 纹理格式映射目前只覆盖
RGBA8_UNORM和RGBA8_SRGB。 - 上传纹理时当前固定按
width * 4计算rowPitch,因此只适用于当前支持的 4 字节每像素路径。
公开方法
| 方法 | 说明 |
|---|---|
| Destructor | 析构时清空缓存。 |
| Shutdown | 释放所有已缓存 GPU 资源。 |
| GetOrCreateMesh | 获取或创建网格缓存。 |
| GetOrCreateTexture | 获取或创建纹理缓存。 |
设计说明
把上传和缓存放在渲染层,而不是资源层,是个务实选择:
- 资源层可以保持对具体 RHI 后端无感。
- 渲染层可以根据当前 backend 和管线需要决定上传方式。