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

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。

相关文档