refactor(srp): formalize universal renderer selection and caching
This commit is contained in:
@@ -2522,6 +2522,36 @@ TEST_F(
|
||||
nullptr);
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
MonoScriptRuntimeTest,
|
||||
ManagedRenderPipelineBridgeFallsBackToFirstRendererWhenDefaultRendererIndexIsInvalid) {
|
||||
const auto bridge =
|
||||
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineBridge();
|
||||
ASSERT_NE(bridge, nullptr);
|
||||
|
||||
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
|
||||
"GameScripts",
|
||||
"Gameplay",
|
||||
"ManagedInvalidDefaultRendererSelectionProbeAsset"
|
||||
};
|
||||
|
||||
std::shared_ptr<const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetRuntime>
|
||||
assetRuntime = bridge->CreateAssetRuntime(descriptor);
|
||||
ASSERT_NE(assetRuntime, nullptr);
|
||||
|
||||
const std::shared_ptr<const XCEngine::Rendering::RenderPipelineAsset>
|
||||
rendererAsset = assetRuntime->GetPipelineRendererAsset();
|
||||
ASSERT_NE(rendererAsset, nullptr);
|
||||
|
||||
std::unique_ptr<XCEngine::Rendering::RenderPipeline> pipeline =
|
||||
rendererAsset->CreatePipeline();
|
||||
ASSERT_NE(pipeline, nullptr);
|
||||
EXPECT_NE(
|
||||
dynamic_cast<XCEngine::Rendering::Pipelines::BuiltinForwardPipeline*>(
|
||||
pipeline.get()),
|
||||
nullptr);
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
MonoScriptRuntimeTest,
|
||||
ManagedRenderPipelineBridgeFallsBackToDefaultSceneRecorderWhenBackendKeyIsUnknown) {
|
||||
@@ -2613,6 +2643,66 @@ TEST_F(
|
||||
recorder->Shutdown();
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
MonoScriptRuntimeTest,
|
||||
ManagedRenderPipelineBridgeReusesRendererInstanceAcrossManagedPipelineCreations) {
|
||||
const auto bridge =
|
||||
XCEngine::Rendering::Pipelines::GetManagedRenderPipelineBridge();
|
||||
ASSERT_NE(bridge, nullptr);
|
||||
|
||||
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
|
||||
"GameScripts",
|
||||
"Gameplay",
|
||||
"ManagedRendererReuseProbeAsset"
|
||||
};
|
||||
|
||||
std::shared_ptr<const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetRuntime>
|
||||
assetRuntime = bridge->CreateAssetRuntime(descriptor);
|
||||
ASSERT_NE(assetRuntime, nullptr);
|
||||
|
||||
const XCEngine::Rendering::RenderContext context = {};
|
||||
|
||||
std::unique_ptr<XCEngine::Rendering::RenderPipelineStageRecorder>
|
||||
firstRecorder = assetRuntime->CreateStageRecorder();
|
||||
ASSERT_NE(firstRecorder, nullptr);
|
||||
ASSERT_TRUE(firstRecorder->Initialize(context));
|
||||
ASSERT_TRUE(
|
||||
firstRecorder->SupportsStageRenderGraph(
|
||||
XCEngine::Rendering::CameraFrameStage::MainScene));
|
||||
|
||||
std::unique_ptr<XCEngine::Rendering::RenderPipelineStageRecorder>
|
||||
secondRecorder = assetRuntime->CreateStageRecorder();
|
||||
ASSERT_NE(secondRecorder, nullptr);
|
||||
ASSERT_TRUE(secondRecorder->Initialize(context));
|
||||
ASSERT_TRUE(
|
||||
secondRecorder->SupportsStageRenderGraph(
|
||||
XCEngine::Rendering::CameraFrameStage::MainScene));
|
||||
|
||||
Scene* runtimeScene =
|
||||
CreateScene("ManagedRendererReuseObservationScene");
|
||||
GameObject* scriptObject =
|
||||
runtimeScene->CreateGameObject("ManagedRendererReuseObservationProbe");
|
||||
ScriptComponent* script =
|
||||
AddScript(
|
||||
scriptObject,
|
||||
"Gameplay",
|
||||
"ManagedRendererReuseObservationProbe");
|
||||
ASSERT_NE(script, nullptr);
|
||||
|
||||
engine->OnRuntimeStart(runtimeScene);
|
||||
engine->OnUpdate(0.016f);
|
||||
|
||||
int observedCreateRendererCallCount = 0;
|
||||
EXPECT_TRUE(runtime->TryGetFieldValue(
|
||||
script,
|
||||
"ObservedCreateRendererCallCount",
|
||||
observedCreateRendererCallCount));
|
||||
EXPECT_EQ(observedCreateRendererCallCount, 1);
|
||||
|
||||
firstRecorder->Shutdown();
|
||||
secondRecorder->Shutdown();
|
||||
}
|
||||
|
||||
TEST_F(
|
||||
MonoScriptRuntimeTest,
|
||||
ManagedStageRecorderRecordsMainSceneThroughScriptableRenderContext) {
|
||||
|
||||
Reference in New Issue
Block a user