feat(rendering): select managed SRP through asset instances

This commit is contained in:
2026-04-18 16:41:53 +08:00
parent 849625e732
commit 30ee70a4d1
7 changed files with 226 additions and 93 deletions

View File

@@ -313,21 +313,17 @@ TEST_F(MonoScriptRuntimeTest, ManagedGraphicsSettingsRoundTripsRenderPipelineAss
EXPECT_EQ(descriptor.assemblyName, "GameScripts");
EXPECT_EQ(descriptor.namespaceName, "Gameplay");
EXPECT_EQ(descriptor.className, "RenderPipelineApiProbeAsset");
EXPECT_NE(descriptor.managedAssetHandle, 0u);
bool invalidSelectionRejected = false;
bool invalidSelectionMentionsScriptableBase = false;
bool initialAssetWasNull = false;
bool selectionRoundTripSucceeded = false;
std::string selectedPipelineTypeName;
bool selectionReferencePreserved = false;
std::string selectedPipelineAssetTypeName;
EXPECT_TRUE(runtime->TryGetFieldValue(
script,
"InvalidSelectionRejected",
invalidSelectionRejected));
EXPECT_TRUE(invalidSelectionRejected);
EXPECT_TRUE(runtime->TryGetFieldValue(
script,
"InvalidSelectionMentionsScriptableBase",
invalidSelectionMentionsScriptableBase));
EXPECT_TRUE(invalidSelectionMentionsScriptableBase);
"InitialAssetWasNull",
initialAssetWasNull));
EXPECT_TRUE(initialAssetWasNull);
EXPECT_TRUE(runtime->TryGetFieldValue(
script,
"SelectionRoundTripSucceeded",
@@ -335,10 +331,15 @@ TEST_F(MonoScriptRuntimeTest, ManagedGraphicsSettingsRoundTripsRenderPipelineAss
EXPECT_TRUE(selectionRoundTripSucceeded);
EXPECT_TRUE(runtime->TryGetFieldValue(
script,
"SelectedPipelineTypeName",
selectedPipelineTypeName));
"SelectionReferencePreserved",
selectionReferencePreserved));
EXPECT_TRUE(selectionReferencePreserved);
EXPECT_TRUE(runtime->TryGetFieldValue(
script,
"SelectedPipelineAssetTypeName",
selectedPipelineAssetTypeName));
EXPECT_EQ(
selectedPipelineTypeName,
selectedPipelineAssetTypeName,
"Gameplay.RenderPipelineApiProbeAsset");
}
@@ -524,6 +525,7 @@ TEST_F(
int observedRecordMainSceneCallCount = 0;
int observedRecordSceneCallCount = 0;
int observedRecordPostProcessCallCount = 0;
XCEngine::Math::Vector4 observedPostProcessScale = {};
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"ObservedCreatePipelineCallCount",
@@ -548,6 +550,10 @@ TEST_F(
selectionScript,
"ObservedRecordPostProcessCallCount",
observedRecordPostProcessCallCount));
EXPECT_TRUE(runtime->TryGetFieldValue(
selectionScript,
"ObservedPostProcessScale",
observedPostProcessScale));
EXPECT_EQ(observedCreatePipelineCallCount, 1);
EXPECT_GT(observedSupportsMainSceneCallCount, 0);
@@ -555,6 +561,10 @@ TEST_F(
EXPECT_EQ(observedRecordMainSceneCallCount, 1);
EXPECT_EQ(observedRecordSceneCallCount, 1);
EXPECT_EQ(observedRecordPostProcessCallCount, 1);
EXPECT_FLOAT_EQ(observedPostProcessScale.x, 1.11f);
EXPECT_FLOAT_EQ(observedPostProcessScale.y, 0.97f);
EXPECT_FLOAT_EQ(observedPostProcessScale.z, 0.93f);
EXPECT_FLOAT_EQ(observedPostProcessScale.w, 1.0f);
}
TEST_F(
@@ -859,6 +869,36 @@ TEST_F(
EXPECT_FALSE(request.directionalShadow.IsValid());
}
TEST_F(
MonoScriptRuntimeTest,
ManagedRenderPipelineAssetReturnsManagedDefaultFinalColorSettings) {
const XCEngine::Rendering::Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
"GameScripts",
"Gameplay",
"ManagedFinalColorRenderPipelineProbeAsset"
};
XCEngine::Rendering::Pipelines::ManagedScriptableRenderPipelineAsset asset(
descriptor);
const XCEngine::Rendering::FinalColorSettings settings =
asset.GetDefaultFinalColorSettings();
EXPECT_EQ(
settings.outputTransferMode,
XCEngine::Rendering::FinalColorOutputTransferMode::LinearToSRGB);
EXPECT_EQ(
settings.exposureMode,
XCEngine::Rendering::FinalColorExposureMode::Fixed);
EXPECT_FLOAT_EQ(settings.exposureValue, 1.75f);
EXPECT_EQ(
settings.toneMappingMode,
XCEngine::Rendering::FinalColorToneMappingMode::ACES);
EXPECT_FLOAT_EQ(settings.finalColorScale.x, 0.90f);
EXPECT_FLOAT_EQ(settings.finalColorScale.y, 1.10f);
EXPECT_FLOAT_EQ(settings.finalColorScale.z, 1.20f);
EXPECT_FLOAT_EQ(settings.finalColorScale.w, 1.0f);
}
TEST_F(MonoScriptRuntimeTest, ClassFieldDefaultValueQueryReturnsNullComponentReferences) {
std::vector<ScriptFieldDefaultValue> fields;