Files
XCEngine/docs/api/XCEngine/Rendering/Passes/BuiltinDepthStylePassBase/Execute.md

2.0 KiB
Raw Blame History

BuiltinDepthStylePassBase::Execute

执行一次深度风格场景重绘。

bool Execute(const RenderPassContext& context) override;

2026-04-10 更新

  • surface.IsAutoTransitionEnabled()true 时,当前实现会同时切换 color 与 depth
    • 颜色附件从 GetColorStateBefore() 切到 RenderTarget
    • depth 附件从 GetDepthStateBefore() 切到 DepthWrite
    • 结束后分别恢复到各自的 after 状态
  • Execute(...) 依赖 IsDepthStyleCompatibleSurface(...) 判断 surface 是否兼容;当前要求的是零或一个颜色附件、已知 depth format以及合法的 sample 描述。

当前流程

  1. 校验 renderContext、第一个颜色附件、深度附件和 surface.GetRenderArea()
  2. 懒初始化 shader / pipeline / descriptor 资源
  3. 必要时把第一个颜色附件从 colorStateBefore 过渡到 RenderTarget
  4. 绑定 colorAttachments[0] 与深度附件
  5. surface.GetRenderArea() 设置 viewport / scissor
  6. cameraData.clearFlags 清颜色与深度
  7. 遍历 visibleItems,先经 ShouldRenderVisibleItem 过滤,再绘制可接受项
  8. EndRenderPass(),并在需要时把第一个颜色附件过渡到 colorStateAfter

当前语义

  • 当前实现只处理第一个颜色附件和一个深度附件。
  • 虽然 pipeline state 把 colorWriteMask 设为 0,当前实现仍要求 colorAttachments[0] 有效,因为 render pass 建立、清颜色和状态迁移都走同一套 surface 逻辑。
  • 清颜色使用的是 sceneData.cameraData.clearColor,不会读取 RenderSurface 自己的 clear-color override。
  • 物体真正能否绘制,还取决于 mesh 是否有效、shader pass 是否可解析、descriptor set 是否能成功创建等后续条件。

相关文档