3.9 KiB
3.9 KiB
RenderSurface
命名空间: XCEngine::Rendering
类型: class
头文件: XCEngine/Rendering/RenderSurface.h
描述: 描述当前渲染目标表面,包括尺寸、颜色/深度附件、自定义渲染区域、清屏色覆盖和颜色附件自动状态切换策略。
概述
RenderSurface 的作用,是把“这一帧到底往哪里画”从具体 swap chain 或 framebuffer 管理逻辑里抽离出来。
当前它负责描述:
- 宽高
- 一组颜色附件
- 一个深度附件
- 可选自定义 render area
- 可选清屏色覆盖
- 颜色附件渲染前后状态
- 是否自动执行颜色附件状态切换
这类抽象很符合商业引擎里 render target / render surface 的常见分层,因为同一条渲染管线不应该只会往窗口 back buffer 画。
当前实现边界
- 当前只为颜色附件维护统一的
stateBefore/stateAfter,不是每个附件单独配置。 - 自动状态切换当前只处理颜色附件,不处理深度附件。
- 自定义 render area 会在设置时和取回时都被夹到当前 surface 尺寸范围内。
- 当前不会校验附件数量、附件尺寸与
RenderSurface宽高是否匹配。 - 当前没有 load/store action、MSAA resolve、mip slice 或 array slice 等更丰富的 surface 配置。
公开方法
| 方法 | 说明 |
|---|---|
| Constructor | 构造渲染表面。 |
| GetWidth | 获取宽度。 |
| GetHeight | 获取高度。 |
| SetSize | 设置宽高。 |
| SetColorAttachment | 设置单个颜色附件。 |
| SetColorAttachments | 设置多个颜色附件。 |
| GetColorAttachments | 获取颜色附件数组。 |
| SetDepthAttachment | 设置深度附件。 |
| GetDepthAttachment | 获取深度附件。 |
| SetRenderArea | 设置自定义渲染区域。 |
| ResetRenderArea | 清除自定义渲染区域。 |
| HasCustomRenderArea | 判断是否启用了自定义渲染区域。 |
| GetRenderArea | 获取当前实际生效的渲染区域。 |
| GetRenderAreaWidth | 获取当前渲染区域宽度。 |
| GetRenderAreaHeight | 获取当前渲染区域高度。 |
| SetClearColorOverride | 设置清屏色覆盖。 |
| ClearClearColorOverride | 清除清屏色覆盖。 |
| HasClearColorOverride | 判断是否启用了清屏色覆盖。 |
| GetClearColorOverride | 获取清屏色覆盖值。 |
| SetAutoTransitionEnabled | 设置是否自动切换颜色附件状态。 |
| IsAutoTransitionEnabled | 查询是否自动切换颜色附件状态。 |
| SetColorStateBefore | 设置渲染前颜色附件状态。 |
| GetColorStateBefore | 获取渲染前颜色附件状态。 |
| SetColorStateAfter | 设置渲染后颜色附件状态。 |
| GetColorStateAfter | 获取渲染后颜色附件状态。 |
设计说明
把 surface 做成独立对象,而不是让 pipeline 直接吃裸 RHIResourceView*,好处很明确:
- 目标尺寸和附件集合可以一起传递。
- 清屏策略和资源状态策略可以挂在目标上,而不是散落在调用点。
- 同一条管线更容易复用于 back buffer、离屏纹理和 editor preview surface。