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

67 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CameraRenderer::Render
**命名空间**: `XCEngine::Rendering`
**类型**: `method`
**头文件**: `XCEngine/Rendering/Execution/CameraRenderer.h`
## 签名
```cpp
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 阶段语义
`PostProcess``FinalOutput` 都通过 `RenderPassSequence` 执行:
- 当 sequence 只有一个 pass 时,直接读源 surface、写目标 surface
- 当 sequence 有多个 pass 时,会复用 `FullscreenPassSurfaceCache` 提供的中间 surface
- `PostProcess``FinalOutput` 各自持有独立的中间 cache避免状态串扰
## 设计说明
把 object-id、fullscreen、overlay 都放进这条执行链,意味着“单相机一帧的完整输出”在这里有唯一真相。
这比让不同模块各自绕开主管线单独提交一遍更稳定,也更容易做测试。
## 返回值
- 整条 request 成功执行时返回 `true`
- 任一验证、提取或阶段执行失败时返回 `false`
## 相关文档
- [CameraRenderer](CameraRenderer.md)
- [CameraRenderRequest](../../Planning/CameraRenderRequest/CameraRenderRequest.md)
- [SceneRenderer](../SceneRenderer/SceneRenderer.md)
- [RenderSceneExtractor](../../Extraction/RenderSceneExtractor/RenderSceneExtractor.md)
- [RenderPipeline::Render](../../RenderPipeline/Render.md)