refactor(rendering): treat object id as top-level tooling pass

This commit is contained in:
2026-04-21 23:34:03 +08:00
parent 76452a9c73
commit 1bbbc22bcb
3 changed files with 53 additions and 4 deletions

View File

@@ -5,6 +5,7 @@
#include "Rendering/Execution/Internal/CameraFrameGraph/Executor.h"
#include "Rendering/GraphicsSettingsState.h"
#include "Rendering/Internal/RenderPipelineFactory.h"
#include "Rendering/Passes/BuiltinObjectIdPass.h"
#include "Rendering/Pipelines/ManagedScriptableRenderPipelineAsset.h"
#include "Rendering/RenderPipelineAsset.h"
#include "Rendering/RenderSurface.h"
@@ -29,6 +30,14 @@ bool IsManagedPipelineAsset(
pipelineAsset.get()) != nullptr;
}
void ConfigureTopLevelToolingPasses(RenderPipeline& pipeline) {
// Object-id is a tooling/editor request. It should live on the
// top-level pipeline used by CameraRenderer, not on a scene backend.
pipeline.SetCameraFrameStandalonePass(
CameraFrameStage::ObjectId,
std::make_unique<Passes::BuiltinObjectIdPass>());
}
RenderPipelineStageSupportContext BuildStageSupportContext(
const CameraFramePlan& plan,
CameraFrameStage stage) {
@@ -124,6 +133,10 @@ void CameraRenderer::ResetPipeline(std::unique_ptr<RenderPipeline> pipeline) {
&m_pipelineAsset);
}
if (m_pipeline != nullptr) {
ConfigureTopLevelToolingPasses(*m_pipeline);
}
m_managedPipelineEnvironmentGeneration =
UsesManagedPipelineBinding()
? GetGraphicsSettingsState().GetEnvironmentGeneration()

View File

@@ -3,7 +3,6 @@
#include "Rendering/Features/BuiltinGaussianSplatPass.h"
#include "Rendering/Features/BuiltinVolumetricPass.h"
#include "Rendering/Passes/BuiltinDepthOnlyPass.h"
#include "Rendering/Passes/BuiltinObjectIdPass.h"
#include "Rendering/Passes/BuiltinShadowCasterPass.h"
#include "Rendering/Pipelines/BuiltinForwardPipeline.h"
@@ -18,9 +17,6 @@ namespace {
void ConfigureBuiltinForwardStandalonePasses(
BuiltinForwardPipeline& pipeline) {
pipeline.SetCameraFrameStandalonePass(
CameraFrameStage::ObjectId,
std::make_unique<Passes::BuiltinObjectIdPass>());
pipeline.SetCameraFrameStandalonePass(
CameraFrameStage::DepthOnly,
std::make_unique<Passes::BuiltinDepthOnlyPass>());