refactor(rendering): extract default pipeline resolution from camera renderer

This commit is contained in:
2026-04-15 21:55:35 +08:00
parent e23d9710e7
commit cf1d6e1c1a
5 changed files with 133 additions and 42 deletions

View File

@@ -421,6 +421,7 @@ public:
struct MockPipelineAssetState {
int createCalls = 0;
int configureCameraFramePlanCalls = 0;
bool createNullPipeline = false;
std::shared_ptr<MockPipelineState> lastCreatedPipelineState;
FinalColorSettings defaultFinalColorSettings = {};
std::function<void(CameraFramePlan&)> configureCameraFramePlan = {};
@@ -691,6 +692,11 @@ public:
std::unique_ptr<RenderPipeline> CreatePipeline() const override {
++m_state->createCalls;
if (m_state->createNullPipeline) {
m_state->lastCreatedPipelineState.reset();
return nullptr;
}
m_state->lastCreatedPipelineState = std::make_shared<MockPipelineState>();
return std::make_unique<MockPipeline>(m_state->lastCreatedPipelineState);
}
@@ -4281,6 +4287,35 @@ TEST(CameraRenderer_Test, DefaultPipelineAssetUsesManagedSelectionWhenPresent) {
Pipelines::ClearManagedRenderPipelineAssetDescriptor();
}
TEST(CameraRenderer_Test, RebindsToResolvedDefaultAssetWhenPreferredAssetCannotCreatePipeline) {
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
"GameScripts",
"Gameplay",
"ManagedRenderPipelineProbeAsset"
};
Pipelines::SetManagedRenderPipelineAssetDescriptor(descriptor);
auto failingAssetState = std::make_shared<MockPipelineAssetState>();
failingAssetState->createNullPipeline = true;
CameraRenderer renderer(std::make_shared<MockPipelineAsset>(failingAssetState));
EXPECT_EQ(failingAssetState->createCalls, 1);
EXPECT_NE(renderer.GetPipeline(), nullptr);
EXPECT_NE(
dynamic_cast<Pipelines::ScriptableRenderPipelineHost*>(renderer.GetPipeline()),
nullptr);
auto* asset =
dynamic_cast<const Pipelines::ManagedScriptableRenderPipelineAsset*>(
renderer.GetPipelineAsset());
ASSERT_NE(asset, nullptr);
EXPECT_EQ(asset->GetDescriptor().assemblyName, "GameScripts");
EXPECT_EQ(asset->GetDescriptor().namespaceName, "Gameplay");
EXPECT_EQ(asset->GetDescriptor().className, "ManagedRenderPipelineProbeAsset");
Pipelines::ClearManagedRenderPipelineAssetDescriptor();
}
TEST(SceneRenderer_Test, CreatesPipelineInstancesFromPipelineAssetsAndShutsDownReplacedPipelines) {
Scene scene("SceneRendererAssetScene");