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

5.7 KiB
Raw Blame History

RenderSurface

命名空间: XCEngine::Rendering

类型: class

头文件: XCEngine/Rendering/RenderSurface.h

描述: 描述当前渲染目标表面,包括尺寸、颜色/深度附件、自定义渲染区域、清屏覆盖、自动状态切换,以及与管线创建对齐的 sample 描述。

概述

RenderSurface 把“这一次渲染要写到哪里、写之前/写之后资源预期处于什么状态”从具体 swap chain、framebuffer 和缓存分配逻辑里抽离出来,变成 PlanningExecution、builtin pass 与 editor overlay 都能复用的统一协议对象。

当前它负责描述:

  • 宽高。
  • 一组颜色附件。
  • 一个可选深度附件。
  • 一个可选自定义 render area。
  • 一个可选清屏颜色覆盖。
  • 颜色附件共享的 before / after 状态。
  • 深度附件共享的 before / after 状态。
  • 是否由渲染路径自动执行颜色/深度附件状态切换。
  • 当前 surface 的 MSAA sampleCount / sampleQuality

RenderSurface 自己不拥有 GPU 资源,也不验证附件尺寸、资源类型或 sample 描述是否真实匹配;它只是把这组约束交给调用方和具体渲染路径消费。

当前实现边界

  • 颜色附件仍只有一组统一的 colorStateBefore / colorStateAfter,深度附件也只有一组统一的 depthStateBefore / depthStateAfter;它不是逐 attachment 的精细状态表。
  • IsAutoTransitionEnabledtrue 时,BuiltinForwardPipelineBuiltinDepthStylePassBaseBuiltinObjectIdPassBuiltinInfiniteGridPass 等路径都会消费这些 before / after 状态;关闭自动切换后,RenderSurface 只保留契约信息,不会主动纠正真实 GPU 状态。
  • SetSampleDesc 会把 sampleCount == 0 规范化为单采样 1, 0;只有 sampleCount > 1sampleQuality 才保留调用方传入值。
  • SceneRenderer 当前要求 fullscreen post-process / final-output 链路的主场景 surface 为单采样,因此多重采样主表面不会进入这两段 fullscreen 阶段。
  • 当前没有 load/store action、resolve target、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 获取渲染后颜色附件状态。
SetDepthStateBefore 设置渲染前深度附件状态。
GetDepthStateBefore 获取渲染前深度附件状态。
SetDepthStateAfter 设置渲染后深度附件状态。
GetDepthStateAfter 获取渲染后深度附件状态。
SetSampleDesc 设置 sample count / quality。
GetSampleCount 获取 sample count。
GetSampleQuality 获取 sample quality。

设计说明

RenderSurface 做成独立对象的价值在当前重构后的渲染链路里更直接:

  • SceneRenderer 可以在构造 post-process / final-output request 时复制颜色/深度附件约束、sample 描述和 render area而不必重新展开 swap chain 细节。
  • BuiltinForwardPipeline 与多个 builtin pass 可以从同一份 surface 描述中同时解析附件格式、状态切换与 sample 描述,避免每个调用点重复拼装 GraphicsPipelineDesc 前置条件。
  • Editor overlay、selection outline、object-id 等附加阶段可以复用主场景输出的深度/颜色状态约定,而不需要各自发明一套 surface 协议。

相关文档