64 lines
1.8 KiB
Markdown
64 lines
1.8 KiB
Markdown
# SceneRenderer::Render
|
||
|
||
```cpp
|
||
bool Render(const CameraRenderRequest& request);
|
||
bool Render(const std::vector<CameraRenderRequest>& requests);
|
||
bool Render(
|
||
const Components::Scene& scene,
|
||
Components::CameraComponent* overrideCamera,
|
||
const RenderContext& context,
|
||
const RenderSurface& surface);
|
||
```
|
||
|
||
## 行为说明
|
||
|
||
`SceneRenderer` 当前提供三种提交入口。
|
||
|
||
### `Render(const CameraRenderRequest&)`
|
||
|
||
这是最薄的转发层,直接调用:
|
||
|
||
```cpp
|
||
m_cameraRenderer.Render(request)
|
||
```
|
||
|
||
### `Render(const std::vector<CameraRenderRequest>&)`
|
||
|
||
当前实现会:
|
||
|
||
1. 拒绝空数组。
|
||
2. 检查每个请求都必须 `IsValid()`。
|
||
3. 复制一份数组并调用 `SceneRenderRequestUtils::SortCameraRenderRequests(...)` 做稳定排序。
|
||
4. 逐个转发给 `m_cameraRenderer.Render(request)`。
|
||
5. 任一请求失败即返回 `false`。
|
||
|
||
### `Render(const Components::Scene&, ...)`
|
||
|
||
这是便捷入口,等价于:
|
||
|
||
```cpp
|
||
return Render(BuildRenderRequests(scene, overrideCamera, context, surface));
|
||
```
|
||
|
||
因此它本身不直接做 scene extraction;真正的 `RenderSceneExtractor` 调用发生在 `CameraRenderer::Render(...)` 内部。
|
||
|
||
## 返回值
|
||
|
||
- 所有需要执行的请求都成功完成时返回 `true`。
|
||
- 请求数组为空、任一请求无效,或任一请求执行失败时返回 `false`。
|
||
|
||
## 测试覆盖
|
||
|
||
`tests/Rendering/unit/test_camera_scene_renderer.cpp` 当前覆盖了:
|
||
|
||
- 多相机请求的排序与稳定性。
|
||
- `Render(scene, ...)` 的请求构建与提交链路。
|
||
- 手工提交请求数组时的排序规则。
|
||
|
||
## 相关文档
|
||
|
||
- [SceneRenderer](SceneRenderer.md)
|
||
- [BuildRenderRequests](BuildRenderRequests.md)
|
||
- [CameraRenderer](../CameraRenderer/CameraRenderer.md)
|
||
- [SceneRenderRequestUtils](../SceneRenderRequestUtils/SceneRenderRequestUtils.md)
|