Files
XCEngine/docs/api/XCEngine/Rendering/Pipelines/BuiltinForwardPipeline/BuiltinForwardPipeline.md

4.3 KiB
Raw Blame History

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 顺序注册:

当前资源契约

BuiltinForwardPipeline 当前要求 resolved shader pass 显式声明 resources。随后会通过 TryBuildBuiltinPassResourceBindingPlan 把资源声明收口成 BuiltinPassResourceBindingPlan

当前可识别的 forward 语义主要包括:

  • PerObject
  • Material
  • BaseColorTexture
  • LinearClampSampler

超出这组约定的资源声明不会被当前 builtin forward 路径接受。

当前渲染流程

  1. Initialize 通过 m_passSequence.Initialize(context) 进入 pass 生命周期。
  2. RenderRenderContextRenderSurfaceRenderSceneData 打包成不带上游输入的 RenderPassContext,再交给 m_passSequence.Execute(...)
  3. BuiltinForwardOpaquePass 处理主场景 opaque 物体。
  4. BuiltinForwardSkyboxPass 在环境允许时绘制天空盒。
  5. BuiltinVolumetricPass 遍历 RenderSceneData::visibleVolumes 并执行体渲染。
  6. 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

相关文档