2.1 KiB
2.1 KiB
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 输出到颜色目标。
当前实现流程
- 如果
renderContext无效、后端不是D3D12、objectIdTextureView == nullptr或selectedObjectIds为空,直接返回false。 - 调用
EnsureInitialized(renderContext);如果当前 device/backend 变化,会先销毁旧资源再重建。 - 检查
surface.GetColorAttachments(),要求至少存在一个有效颜色附件。 - 构建
OutlineConstants,写入 viewport 尺寸、轮廓颜色、调试开关、像素宽度和最多256个选中对象编码颜色。 - 把常量缓冲写到
m_constantSet,把objectIdTextureView绑定到m_textureSet。 - 设置渲染目标为
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。