Files
XCEngine/docs/api/XCEngine/Rendering/Execution/CameraRenderer/Render.md

2.4 KiB
Raw Blame History

CameraRenderer::Render

命名空间: XCEngine::Rendering

类型: method

头文件: XCEngine/Rendering/Execution/CameraRenderer.h

签名

bool Render(const CameraRenderRequest& request);

行为说明

执行一次完整的单相机 request。

当前验证规则

进入真正执行前,当前实现会拒绝以下情况:

  • !request.IsValid()
  • m_pipeline == nullptr
  • request.GetMainSceneSurface() 的 render area 宽或高为 0
  • depthOnly 被请求但 depthOnly.IsValid() 为假
  • postProcess 被请求但 postProcess.IsValid() 为假
  • finalOutput 被请求但 finalOutput.IsValid() 为假
  • objectId 被请求但 objectId.IsValid() 为假
  • shadowCaster 显式被请求但无效,或 directionalShadow 无法成功解析出内部阴影 surface

当前执行流程

  1. 通过 ResolveShadowCasterRequest(...) 解析真实的 shadow-caster 输入
  2. request.GetMainSceneSurface() 的 render area 调用 m_sceneExtractor.ExtractForCamera(...)
  3. 回写 sceneData.cameraData.clearFlags
  4. 按需写入 clear-color override
  5. 如果 request.directionalShadow.IsValid(),把阴影数据写入 sceneData.lighting.mainDirectionalShadow
  6. 根据相机 skybox 配置构建 sceneData.environment
  7. kOrderedCameraFrameStages 顺序依次执行各阶段

fullscreen 阶段语义

PostProcessFinalOutput 都通过 RenderPassSequence 执行:

  • 当 sequence 只有一个 pass 时,直接读源 surface、写目标 surface
  • 当 sequence 有多个 pass 时,会复用 FullscreenPassSurfaceCache 提供的中间 surface
  • PostProcessFinalOutput 各自持有独立的中间 cache避免状态串扰

设计说明

把 object-id、fullscreen、overlay 都放进这条执行链,意味着“单相机一帧的完整输出”在这里有唯一真相。
这比让不同模块各自绕开主管线单独提交一遍更稳定,也更容易做测试。

返回值

  • 整条 request 成功执行时返回 true
  • 任一验证、提取或阶段执行失败时返回 false

相关文档