2.9 KiB
2.9 KiB
BuiltinDepthStylePassBase
命名空间: XCEngine::Rendering::Passes
类型: class
头文件: XCEngine/Rendering/Passes/BuiltinDepthStylePassBase.h
描述: BuiltinDepthOnlyPass 与 BuiltinShadowCasterPass 共享的深度风格 pass 基类,负责懒初始化 shader / pipeline / per-object descriptor,并按 RenderPass 约定执行一次只写深度的场景重绘。
概览
2026-04-10 同步补充
以下内容以当前 BuiltinDepthStylePassBase.h/.cpp 为准:
PipelineStateKey现在显式包含sampleCount与sampleQuality,因此 depth-style pipeline cache 不再只按 render state、shader、format 和 keyword 签名区分。- 自动状态切换现在同时覆盖 color 与 depth:进入 pass 前会读取
GetColorStateBefore()/GetDepthStateBefore(),结束后恢复到GetColorStateAfter()/GetDepthStateAfter()。 - depth-style surface 兼容性现在按
IsDepthStyleCompatibleSurface(...)判断,要求的是“零或一个颜色附件 + 已知 depth format + 合法 sample 描述”,而不是早期那种更死板的固定表述。
BuiltinDepthStylePassBase 把两类 pass 的公共逻辑集中在一起:
- 按
BuiltinMaterialPass解析可兼容的 shader pass。 - 复用 RenderResourceCache 上传 mesh GPU 副本。
- 只接受“单个
PerObject常量缓冲”这一类资源绑定计划。 - 在 Execute 中统一处理
RenderSurface检查、viewport/scissor、清屏、绘制循环和颜色附件状态切换。 - 虽然是“深度风格” pass,当前执行框架仍要求
RenderSurface同时提供colorAttachments[0]与depthAttachment,并沿用颜色 clear / transition 路径。
派生类当前只负责决定:
- 构造时注入哪种 builtin shader 路径。
GetName()返回什么名字。- 是否通过 ShouldRenderVisibleItem 进一步过滤可见物体。
公开与受保护方法
| 成员 | 说明 |
|---|---|
| Constructor | 受保护构造函数,保存 pass 类型与 builtin shader 路径。 |
| Destructor | 析构时调用 Shutdown。 |
| BuildCommonInputLayout | 返回深度风格 pass 共用的 StaticMeshVertex 输入布局。 |
| Initialize | 懒初始化资源。 |
| Shutdown | 释放缓存的 shader、pipeline、descriptor 和 mesh GPU 副本。 |
| Execute | 执行一次深度风格场景重绘。 |
| ShouldRenderVisibleItem | 派生类可覆写的可见物体过滤点。 |