2.9 KiB
2.9 KiB
RenderPipeline
命名空间: XCEngine::Rendering
类型: class (abstract)
头文件: XCEngine/Rendering/RenderPipeline.h
描述: 主场景 runtime 管线的统一接口,负责初始化、关闭,并把一份 RenderSceneData 绘制到目标 RenderSurface。
概览
RenderPipeline 是当前渲染模块里最核心的 runtime 扩展点之一。它把“真正的主场景绘制”抽象成三个阶段:
Initialize(const RenderContext&)Shutdown()Render(const RenderContext&, const RenderSurface&, const RenderSceneData&)
上游不会直接依赖某个具体 builtin 管线类型,而是只依赖这个抽象接口。
当前接入方式
默认情况下,具体 runtime pipeline 不是由 SceneRenderer 直接构造,而是由 CameraRenderer 通过 RenderPipelineAsset 创建并持有。
当前公开的默认实现是:
默认工厂则是:
当前职责边界
RenderPipeline 只负责主场景绘制本身,不负责:
- 多相机 request 规划和排序
- object-id pass 与 object-id 输出目标
preScenePasses/postScenePasses/overlayPasses的外层编排
这些都由 CameraRenderer 在外层编排。
当前实现弹性
接口本身并不强制初始化策略。具体实现可以:
- 在
Initialize()中一次性准备资源。 - 或者像
BuiltinForwardPipeline一样,在Render()中按需触发或复用初始化逻辑。
因此调用方只依赖语义契约,而不依赖某个具体实现的资源建立时机。
公开方法
| 方法 | 说明 |
|---|---|
| Destructor | 虚析构函数。 |
| Initialize | 初始化这条主管线所需的底层资源。 |
| Shutdown | 释放主管线资源。 |
| Render | 把一份 RenderSceneData 绘制到指定 RenderSurface。 |
设计说明
把 RenderContext、RenderSurface 和 RenderSceneData 分开传入,是当前很关键的职责拆分:
RenderContext表示底层设备与命令环境。RenderSurface表示这次提交的目标与 render-area。RenderSceneData表示已经提取好的相机、光照和可绘制项。
这样同一条 runtime pipeline 才能在不同 surface、不同 request 和不同场景提取结果之间复用。