refactor(srp): add renderer backend registry seam
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user