# 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)