2.4 KiB
2.4 KiB
CameraRenderer::Render
命名空间: XCEngine::Rendering
类型: method
头文件: XCEngine/Rendering/Execution/CameraRenderer.h
签名
bool Render(const CameraRenderRequest& request);
行为说明
执行一次完整的单相机 request。
当前验证规则
进入真正执行前,当前实现会拒绝以下情况:
!request.IsValid()m_pipeline == nullptrrequest.GetMainSceneSurface()的 render area 宽或高为0depthOnly被请求但depthOnly.IsValid()为假postProcess被请求但postProcess.IsValid()为假finalOutput被请求但finalOutput.IsValid()为假objectId被请求但objectId.IsValid()为假shadowCaster显式被请求但无效,或directionalShadow无法成功解析出内部阴影 surface
当前执行流程
- 通过
ResolveShadowCasterRequest(...)解析真实的 shadow-caster 输入 - 用
request.GetMainSceneSurface()的 render area 调用m_sceneExtractor.ExtractForCamera(...) - 回写
sceneData.cameraData.clearFlags - 按需写入 clear-color override
- 如果
request.directionalShadow.IsValid(),把阴影数据写入sceneData.lighting.mainDirectionalShadow - 根据相机 skybox 配置构建
sceneData.environment - 按
kOrderedCameraFrameStages顺序依次执行各阶段
fullscreen 阶段语义
PostProcess 和 FinalOutput 都通过 RenderPassSequence 执行:
- 当 sequence 只有一个 pass 时,直接读源 surface、写目标 surface
- 当 sequence 有多个 pass 时,会复用
FullscreenPassSurfaceCache提供的中间 surface PostProcess与FinalOutput各自持有独立的中间 cache,避免状态串扰
设计说明
把 object-id、fullscreen、overlay 都放进这条执行链,意味着“单相机一帧的完整输出”在这里有唯一真相。
这比让不同模块各自绕开主管线单独提交一遍更稳定,也更容易做测试。
返回值
- 整条 request 成功执行时返回
true - 任一验证、提取或阶段执行失败时返回
false