Files
XCEngine/docs/api/XCEngine/Rendering/Passes/BuiltinInfiniteGridPass/BuiltinInfiniteGridPass.md

4.5 KiB
Raw Blame History

BuiltinInfiniteGridPass

命名空间: XCEngine::Rendering::Passes

类型: class

头文件: XCEngine/Rendering/Passes/BuiltinInfiniteGridPass.h

描述: 在场景颜色目标上叠加无限地面网格的底层全屏 pass真正使用哪份 shader 由调用方通过 shaderPath 注入。

概述

BuiltinInfiniteGridPass 是当前 Scene View 里“地面参考网格”效果的实际执行者。

它消费一份 InfiniteGridPassData,在运行时先推导 InfiniteGridParameters,再用当前配置的 shader 资源把网格直接混合到目标颜色附件上。

这个类当前不再自己决定“Scene View grid shader 到底是哪一份资源”。源码里的职责边界已经变成:

  • BuiltinInfiniteGridPass 只负责资源创建、常量写入和一次全屏三角形执行。
  • editor 调用方 通过 SetShaderPath 或构造函数参数注入具体 shader 路径。
  • SceneViewportGridPass 负责把 SceneViewportResourcePaths 生成的 editor 资源路径传进来;SceneViewportShaderPaths 现在只是兼容 include 层。

关键输入

  • InfiniteGridPassData 决定相机位置、朝向、FOV、裁剪面和轨道距离。
  • BuildInfiniteGridParameters 会把这些数据折算成 baseScaletransitionBlendfadeDistance
  • RenderSurface 需要同时提供颜色附件和深度附件;当前 pass 会开启深度测试但关闭深度写入。

当前实现流程

  1. 先校验 data.validRenderContext::IsValid()backendType == D3D12
  2. 通过 EnsureInitialized() 惰性创建 pipeline layout、pipeline state 和常量描述符;这一步要求 shaderPath 非空且可成功加载。
  3. 从相机姿态推导网格参数,并构建 view-projection 常量。
  4. 把第一个颜色附件和深度附件绑定为渲染目标。
  5. 以全屏三角形方式发出一次 Draw(3, 1, 0, 0)

当前实现边界

  • 当前只支持 D3D12 shader variant。
  • 在第一次创建资源之前必须先提供有效 shaderPath;空路径会记录错误并返回 false
  • 只写入 surface 的第一个颜色附件。
  • 视口和裁剪矩形使用 surface.GetWidth() / GetHeight(),不是自定义 render area。
  • 网格参数完全由当前相机高度与朝向启发式推导,还没有暴露成更完整的编辑器样式配置。

公开方法与相关类型

成员 说明
Constructor 创建 pass并可选地预置 shader 路径。
Destructor 默认析构;不会自动代替 Shutdown() 释放内部 RHI 资源。
SetShaderPath 更新当前要加载的 shader 路径,并清空已创建资源。
GetShaderPath 返回当前记录的 shader 路径。
InfiniteGridPassData 输入相机数据。
InfiniteGridParameters 推导后的网格尺度参数。
BuildInfiniteGridParameters 从输入相机数据生成当前网格参数。
Render 在当前颜色目标上提交网格覆盖层。
Shutdown 销毁内部 pipeline、descriptor 和 shader handle。

真实使用位置

  • editor/src/Viewport/Passes/SceneViewportGridPass.cppSceneViewportGridPassRenderer 包装它, 并通过 GetSceneViewportInfiniteGridShaderPath() 注入 editor-owned shader 路径,再把它挂进 Scene View 的 postScenePasses
  • SceneViewportRenderPlan 决定当前帧是否需要创建这条 pass。
  • tests/Editor/test_scene_viewport_overlay_renderer.cpp 固定了网格参数推导规则。

相关文档