refactor(srp): add renderer backend registry seam

This commit is contained in:
2026-04-20 12:47:25 +08:00
parent 59f2249e07
commit 10b092d467
6 changed files with 382 additions and 9 deletions

View File

@@ -50,6 +50,38 @@ CameraFrameStageSourceBinding ResolveStageSourceBinding(
return ResolveCameraFrameStageSourceBinding(stage, plan);
}
std::shared_ptr<const RenderPipelineAsset>
CreateBuiltinForwardPipelineRendererAssetForTest() {
return std::make_shared<Pipelines::BuiltinForwardPipelineAsset>();
}
class ScopedPipelineRendererAssetFactoryRegistration final {
public:
ScopedPipelineRendererAssetFactoryRegistration(
std::string key,
Internal::PipelineRendererAssetFactory factory)
: m_key(std::move(key))
, m_registered(
Internal::RegisterPipelineRendererAssetFactory(
m_key,
std::move(factory))) {
}
~ScopedPipelineRendererAssetFactoryRegistration() {
if (m_registered) {
(void)Internal::UnregisterPipelineRendererAssetFactory(m_key);
}
}
bool IsRegistered() const {
return m_registered;
}
private:
std::string m_key;
bool m_registered = false;
};
struct MockPipelineState {
int initializeCalls = 0;
int shutdownCalls = 0;
@@ -4543,6 +4575,31 @@ TEST(
Pipelines::ClearManagedRenderPipelineBridge();
}
TEST(
RenderPipelineFactory_Test,
RegisteredAliasKeyResolvesPipelineRendererAssetAndNativeSceneRenderer) {
ScopedPipelineRendererAssetFactoryRegistration registration(
"BuiltinForwardAlias",
&CreateBuiltinForwardPipelineRendererAssetForTest);
ASSERT_TRUE(registration.IsRegistered());
std::shared_ptr<const RenderPipelineAsset> rendererAsset =
Internal::CreatePipelineRendererAssetByKey("BuiltinForwardAlias");
ASSERT_NE(rendererAsset, nullptr);
std::shared_ptr<const RenderPipelineAsset> resolvedAsset = nullptr;
std::unique_ptr<NativeSceneRenderer> sceneRenderer =
Internal::CreateNativeSceneRendererFromAsset(
rendererAsset,
&resolvedAsset);
ASSERT_NE(sceneRenderer, nullptr);
EXPECT_EQ(resolvedAsset, rendererAsset);
EXPECT_NE(
dynamic_cast<Pipelines::BuiltinForwardPipeline*>(sceneRenderer.get()),
nullptr);
}
TEST(
ScriptableRenderPipelineHost_Test,
FallsBackToRendererWhenStageRecorderDeclinesRecording) {