2.0 KiB
2.0 KiB
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 描述。
当前流程
- 校验
renderContext、第一个颜色附件、深度附件和surface.GetRenderArea() - 懒初始化 shader / pipeline / descriptor 资源
- 必要时把第一个颜色附件从
colorStateBefore过渡到RenderTarget - 绑定
colorAttachments[0]与深度附件 - 以
surface.GetRenderArea()设置 viewport / scissor - 按
cameraData.clearFlags清颜色与深度 - 遍历
visibleItems,先经 ShouldRenderVisibleItem 过滤,再绘制可接受项 EndRenderPass(),并在需要时把第一个颜色附件过渡到colorStateAfter
当前语义
- 当前实现只处理第一个颜色附件和一个深度附件。
- 虽然 pipeline state 把
colorWriteMask设为0,当前实现仍要求colorAttachments[0]有效,因为 render pass 建立、清颜色和状态迁移都走同一套 surface 逻辑。 - 清颜色使用的是
sceneData.cameraData.clearColor,不会读取RenderSurface自己的 clear-color override。 - 物体真正能否绘制,还取决于 mesh 是否有效、shader pass 是否可解析、descriptor set 是否能成功创建等后续条件。