refactor(srp): unify mono recorder backend ownership

This commit is contained in:
2026-04-19 23:09:34 +08:00
parent 74e790891c
commit 21b790c2f8
9 changed files with 352 additions and 9 deletions

View File

@@ -441,10 +441,12 @@ struct MockPipelineAssetState {
struct MockStageRecorderState {
int initializeCalls = 0;
int shutdownCalls = 0;
int setPipelineRendererCalls = 0;
int recordMainSceneCalls = 0;
bool supportsMainSceneRenderGraph = false;
bool recordMainSceneResult = true;
bool lastReceivedRenderGraphBlackboard = false;
RenderPipelineRenderer* lastPipelineRenderer = nullptr;
};
class MockPipeline final : public RenderPipeline {
@@ -688,6 +690,12 @@ public:
++m_state->shutdownCalls;
}
void SetPipelineRenderer(RenderPipelineRenderer* pipelineRenderer)
override {
++m_state->setPipelineRendererCalls;
m_state->lastPipelineRenderer = pipelineRenderer;
}
bool SupportsStageRenderGraph(CameraFrameStage stage) const override {
return SupportsCameraFramePipelineGraphRecording(stage) &&
m_state->supportsMainSceneRenderGraph;
@@ -4477,6 +4485,29 @@ TEST(ScriptableRenderPipelineHost_Test, PrefersStageRecorderBeforeFallbackRender
EXPECT_EQ(replacementRecorderState->shutdownCalls, 1);
}
TEST(ScriptableRenderPipelineHost_Test, BindsCurrentPipelineRendererIntoStageRecorder) {
auto initialPipelineState = std::make_shared<MockPipelineState>();
auto replacementPipelineState = std::make_shared<MockPipelineState>();
auto recorderState = std::make_shared<MockStageRecorderState>();
Pipelines::ScriptableRenderPipelineHost host(
std::make_unique<MockPipeline>(initialPipelineState));
host.SetStageRecorder(
std::make_unique<MockStageRecorder>(recorderState));
EXPECT_EQ(recorderState->setPipelineRendererCalls, 1);
EXPECT_EQ(
recorderState->lastPipelineRenderer,
host.GetPipelineRenderer());
host.SetPipelineRenderer(
std::make_unique<MockPipeline>(replacementPipelineState));
EXPECT_EQ(recorderState->setPipelineRendererCalls, 2);
EXPECT_EQ(
recorderState->lastPipelineRenderer,
host.GetPipelineRenderer());
}
TEST(
ScriptableRenderPipelineHost_Test,
FallsBackToRendererWhenStageRecorderDeclinesRecording) {