Files
XCEngine/docs/api/XCEngine/Rendering/RenderSurface/GetRenderArea.md

1.9 KiB
Raw Blame History

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::ExecuteBuiltinObjectIdPass::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。

相关文档