Files
XCEngine/docs/api/XCEngine/Rendering/Passes/BuiltinObjectIdOutlinePass/Render.md

2.1 KiB
Raw Blame History

BuiltinObjectIdOutlinePass::Render

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

类型: method

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

签名

bool Render(
    const RenderContext& renderContext,
    const RenderSurface& surface,
    RHI::RHIResourceView* objectIdTextureView,
    const std::vector<uint64_t>& selectedObjectIds,
    const ObjectIdOutlineStyle& style = {});

作用

读取 object-id 纹理,并把选中对象的轮廓或调试 selection mask 输出到颜色目标。

当前实现流程

  1. 如果 renderContext 无效、后端不是 D3D12objectIdTextureView == nullptrselectedObjectIds 为空,直接返回 false
  2. 调用 EnsureInitialized(renderContext);如果当前 device/backend 变化,会先销毁旧资源再重建。
  3. 检查 surface.GetColorAttachments(),要求至少存在一个有效颜色附件。
  4. 构建 OutlineConstants,写入 viewport 尺寸、轮廓颜色、调试开关、像素宽度和最多 256 个选中对象编码颜色。
  5. 把常量缓冲写到 m_constantSet,把 objectIdTextureView 绑定到 m_textureSet
  6. 设置渲染目标为 surface 的第一个颜色附件,并提交一次全屏三角形 Draw(3, 1, 0, 0)

关键语义

  • 当前只使用 surface 的第一个颜色附件。
  • pass 自己不会做 render target 清空;如果要输出 debug mask 这种“整张替换”的结果,需要由调用方先清空目标。
  • pass 自己也不负责资源状态切换;调用前应保证颜色目标已经在 RenderTarget 状态、object-id SRV 已经可读。
  • 当前 viewport 和 scissor 始终覆盖整张 surface而不是 surface.GetRenderArea()

典型使用位置

  • editor/src/Viewport/Passes/SceneViewportSelectionOutlinePass.cpp:正常 Scene View 轮廓模式。
  • debug mask 仍然通过同一条 Render(...) 路径完成,只是 style.debugSelectionMask = true

相关文档