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

85 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RenderSurface
**命名空间**: `XCEngine::Rendering`
**类型**: `class`
**头文件**: `XCEngine/Rendering/RenderSurface.h`
**描述**: 描述一次渲染输出使用的目标表面,包括颜色/深度附件、render area、清屏覆写、自动状态切换约定以及采样描述。
## 概览
`RenderSurface` 把“这一阶段渲染到哪里、渲染前后资源期望处于什么状态、目标表面采用什么采样描述”集中到一个轻量对象里。当前它负责承载:
- 输出尺寸
- 颜色附件数组与深度附件
- 可选自定义 render area
- 可选 clear color override
- 颜色附件前后状态
- 深度附件前后状态
- 是否启用自动状态切换
- `sampleCount` / `sampleQuality`
`SceneRenderer``CameraRenderer`、builtin scene pass 和 fullscreen pass 会把这些约定继续传递到 request、pipeline desc 与 barrier 逻辑里。
## 当前实现边界
- 状态仍是“整组颜色附件一份 before/after深度附件一份 before/after”不是每个 attachment 独立配置。
- `SetSampleDesc()` 只记录采样描述,不会验证附件或后端是否真的支持该 MSAA 配置。
- `SetSampleDesc(0, quality)` 会把 `sampleCount` 归一化为 `1`;当有效 `sampleCount <= 1` 时,`sampleQuality` 会被压成 `0`
- render area 仍会在设置和读取时 clamp 到当前 surface 尺寸内。
- 仍没有 load/store action、resolve attachment、mip slice、array slice 等更细粒度 surface 描述。
## 公开方法
| 方法 | 说明 |
|------|------|
| [Constructor](Constructor.md) | 构造空的 render surface。 |
| [GetWidth](GetWidth.md) | 获取 surface 宽度。 |
| [GetHeight](GetHeight.md) | 获取 surface 高度。 |
| [SetSize](SetSize.md) | 更新 surface 尺寸。 |
| [SetColorAttachment](SetColorAttachment.md) | 设置单个颜色附件。 |
| [SetColorAttachments](SetColorAttachments.md) | 设置颜色附件数组。 |
| [GetColorAttachments](GetColorAttachments.md) | 读取当前颜色附件数组。 |
| [SetDepthAttachment](SetDepthAttachment.md) | 设置深度附件。 |
| [GetDepthAttachment](GetDepthAttachment.md) | 读取当前深度附件。 |
| [SetRenderArea](SetRenderArea.md) | 设置自定义 render area。 |
| [ResetRenderArea](ResetRenderArea.md) | 清除自定义 render area。 |
| [HasCustomRenderArea](HasCustomRenderArea.md) | 判断是否启用了自定义 render area。 |
| [GetRenderArea](GetRenderArea.md) | 获取当前实际生效的 render area。 |
| [GetRenderAreaWidth](GetRenderAreaWidth.md) | 获取 render area 宽度。 |
| [GetRenderAreaHeight](GetRenderAreaHeight.md) | 获取 render area 高度。 |
| [SetClearColorOverride](SetClearColorOverride.md) | 设置 clear color override。 |
| [ClearClearColorOverride](ClearClearColorOverride.md) | 清除 clear color override。 |
| [HasClearColorOverride](HasClearColorOverride.md) | 判断是否存在 clear color override。 |
| [GetClearColorOverride](GetClearColorOverride.md) | 读取 clear color override。 |
| [SetAutoTransitionEnabled](SetAutoTransitionEnabled.md) | 开关自动状态切换约定。 |
| [IsAutoTransitionEnabled](IsAutoTransitionEnabled.md) | 查询是否启用自动状态切换。 |
| [SetColorStateBefore](SetColorStateBefore.md) | 设置颜色附件渲染前状态。 |
| [GetColorStateBefore](GetColorStateBefore.md) | 读取颜色附件渲染前状态。 |
| [SetColorStateAfter](SetColorStateAfter.md) | 设置颜色附件渲染后状态。 |
| [GetColorStateAfter](GetColorStateAfter.md) | 读取颜色附件渲染后状态。 |
| [SetDepthStateBefore](SetDepthStateBefore.md) | 设置深度附件渲染前状态。 |
| [GetDepthStateBefore](GetDepthStateBefore.md) | 读取深度附件渲染前状态。 |
| [SetDepthStateAfter](SetDepthStateAfter.md) | 设置深度附件渲染后状态。 |
| [GetDepthStateAfter](GetDepthStateAfter.md) | 读取深度附件渲染后状态。 |
| [SetSampleDesc](SetSampleDesc.md) | 设置 surface 的采样数和采样质量。 |
| [GetSampleCount](GetSampleCount.md) | 读取当前采样数。 |
| [GetSampleQuality](GetSampleQuality.md) | 读取当前采样质量。 |
## 设计说明
把 surface 做成独立对象,而不是让 pipeline 直接吃裸 `RHIResourceView*`,好处是:
- 目标尺寸和附件集合可以一起传递。
- 清屏策略、资源状态约定和采样描述可以挂在目标表面上,而不是散落在调用点。
- 同一条渲染链更容易复用到 back buffer、离屏纹理、intermediate post-process surface 和 editor preview surface。
## 相关文档
- [当前模块](../Rendering.md)
- [RenderContext](../RenderContext/RenderContext.md)
- [RenderPass](../RenderPass/RenderPass.md)
- [BuiltinForwardPipeline](../Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md)