Files
XCEngine/docs/api/XCEngine/Rendering/RenderSurface/RenderSurface.md

71 lines
3.2 KiB
Markdown

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