1.9 KiB
1.9 KiB
RenderSurface::GetRenderArea
获取当前实际生效的 render area。
Math::RectInt GetRenderArea() const;
返回值
- 如果没有启用自定义 render area,返回
(0, 0, width, height)。 - 如果启用了自定义 render area,返回按当前 surface 尺寸再次 clamp 后的矩形。
当前语义
- 即使在 SetRenderArea 时已经做过一次 clamp,读取时仍会再次调用内部
ClampRenderArea(...)。 - 这保证了在 SetSize 之后,即便旧 render area 还保存在成员里,返回值也仍然不会越界。
- 因此这里返回的是“当前时刻真正生效的区域”,而不是调用
SetRenderArea(...)时写入的原始输入值。
调用方影响
BuiltinForwardPipeline::Render()、BuiltinDepthStylePassBase::Execute 和BuiltinObjectIdPass::Render()都会基于这里返回的矩形设置 viewport / scissor,并在宽高不大于0时拒绝渲染。CameraRenderer::Render()通过 GetRenderAreaWidth / GetRenderAreaHeight 做有效性判断;那两个访问器本质上也都是从这里派生出来的。SceneRenderer在构建相机请求时,会把相机 viewport 进一步解析到已有 surface render area 之内,所以这里也是“父级渲染区域”的来源。
测试覆盖
tests/Rendering/unit/test_camera_scene_renderer.cpp覆盖了默认整 surface 区域、嵌套 surface render area,以及相机 viewport 叠加后的最终结果。tests/Editor/test_viewport_render_flow_utils.cpp验证了 scene viewport 主 surface 与 object-id surface 会共享解析后的 render area。