4.3 KiB
4.3 KiB
BuiltinForwardPipeline
命名空间: XCEngine::Rendering::Pipelines
类型: class
头文件: XCEngine/Rendering/Pipelines/BuiltinForwardPipeline.h
描述: 当前内建的前向主渲染管线实现。它会按 shader pass 的资源声明动态构建 PassResourceLayout、descriptor set 与 RHIPipelineState,并通过 RenderPassSequence 顺序执行 builtin scene pass。
概览
BuiltinForwardPipeline 已经不是“固定几套 descriptor set + 单一 pipeline layout”的旧模型。当前实现有三条关键缓存链路:
m_passResourceLayouts:以(shader*, passName)为 key,缓存每个 shader pass 的资源布局、pipeline layout、静态 descriptor set 和语义位置信息。m_pipelineStates:以(shader*, passName, material render state, surface properties)为 key,缓存真正的图形 pipeline state。m_dynamicDescriptorSets:以(passLayout, setIndex, objectId, material)为 key,缓存逐对象或逐材质的 descriptor set。
构造函数当前会向 m_passSequence 顺序注册:
BuiltinForwardOpaquePassBuiltinForwardSkyboxPass- BuiltinVolumetricPass
BuiltinForwardTransparentPass
当前资源契约
BuiltinForwardPipeline 当前要求 resolved shader pass 显式声明 resources。随后会通过 TryBuildBuiltinPassResourceBindingPlan 把资源声明收口成 BuiltinPassResourceBindingPlan。
当前可识别的 forward 语义主要包括:
PerObjectMaterialBaseColorTextureLinearClampSampler
超出这组约定的资源声明不会被当前 builtin forward 路径接受。
当前渲染流程
- Initialize 通过
m_passSequence.Initialize(context)进入 pass 生命周期。 - Render 把
RenderContext、RenderSurface和RenderSceneData打包成不带上游输入的RenderPassContext,再交给m_passSequence.Execute(...)。 BuiltinForwardOpaquePass处理主场景 opaque 物体。BuiltinForwardSkyboxPass在环境允许时绘制天空盒。- BuiltinVolumetricPass 遍历
RenderSceneData::visibleVolumes并执行体渲染。 BuiltinForwardTransparentPass再处理透明阶段。
当前实现细节
- pipeline state 缓存已经会跟随目标 surface 的 render target format、depth format、sample count 和 sample quality 一起变化。
- 逐材质常量优先来自 schema-driven payload;只有拿不到有效 payload 时才会回退到 builtin fallback 常量。
- 采样器和 fallback 纹理可长期复用;具体 mesh / texture / volume 资源由 RenderResourceCache 按需上传。
当前限制
- 这仍然不是 deferred、render graph 或更通用的多管线框架。
- 资源语义是白名单模型,不接受任意自定义 binding plan。
Render()层面不会因为单个对象 draw 失败就整体返回false,更偏向“尽量继续绘制其余对象”。
公开方法
| 方法 | 说明 |
|---|---|
| Constructor | 创建管线对象,并注册默认 builtin scene pass。 |
| Destructor | 析构时调用 Shutdown()。 |
| BuildInputLayout | 返回 builtin forward 使用的静态网格输入布局。 |
| Initialize | 初始化 pass sequence,并在需要时准备共享 GPU 资源。 |
| Shutdown | 关闭 pass sequence,释放 pass layout、descriptor set、pipeline state 与 fallback 资源。 |
| Render | 把 RenderSceneData 绘制到目标 RenderSurface。 |