feat(rendering): expose managed SRP asset final color defaults

This commit is contained in:
2026-04-18 16:19:54 +08:00
parent 5fd474d08d
commit 849625e732
11 changed files with 280 additions and 0 deletions

View File

@@ -776,6 +776,9 @@ struct MockManagedRenderPipelineAssetRuntimeState {
int createStageRecorderCalls = 0;
int configureCameraRenderRequestCalls = 0;
int configureCameraFramePlanCalls = 0;
int getDefaultFinalColorSettingsCalls = 0;
bool hasDefaultFinalColorSettings = false;
FinalColorSettings defaultFinalColorSettings = {};
size_t lastRenderedBaseCameraCount = 0u;
size_t lastRenderedRequestCount = 0u;
std::shared_ptr<MockStageRecorderState> lastCreatedStageRecorderState;
@@ -828,6 +831,17 @@ public:
}
}
bool TryGetDefaultFinalColorSettings(
FinalColorSettings& settings) const override {
++m_state->getDefaultFinalColorSettingsCalls;
if (!m_state->hasDefaultFinalColorSettings) {
return false;
}
settings = m_state->defaultFinalColorSettings;
return true;
}
private:
std::shared_ptr<MockManagedRenderPipelineAssetRuntimeState> m_state;
};
@@ -836,6 +850,8 @@ struct MockManagedRenderPipelineBridgeState {
int createAssetRuntimeCalls = 0;
Pipelines::ManagedRenderPipelineAssetDescriptor lastDescriptor = {};
std::shared_ptr<MockManagedRenderPipelineAssetRuntimeState> lastCreatedRuntimeState;
bool hasDefaultFinalColorSettings = false;
FinalColorSettings defaultFinalColorSettings = {};
std::function<void(
CameraRenderRequest&,
size_t,
@@ -859,6 +875,10 @@ public:
m_state->lastDescriptor = descriptor;
m_state->lastCreatedRuntimeState =
std::make_shared<MockManagedRenderPipelineAssetRuntimeState>();
m_state->lastCreatedRuntimeState->hasDefaultFinalColorSettings =
m_state->hasDefaultFinalColorSettings;
m_state->lastCreatedRuntimeState->defaultFinalColorSettings =
m_state->defaultFinalColorSettings;
m_state->lastCreatedRuntimeState->configureCameraRenderRequest =
m_state->configureCameraRenderRequest;
m_state->lastCreatedRuntimeState->configureCameraFramePlan =
@@ -4690,6 +4710,48 @@ TEST(ManagedScriptableRenderPipelineAsset_Test, LetsManagedBridgeConfigureCamera
Pipelines::ClearManagedRenderPipelineBridge();
}
TEST(ManagedScriptableRenderPipelineAsset_Test, LetsManagedBridgeProvideDefaultFinalColorSettings) {
Pipelines::ClearManagedRenderPipelineBridge();
const Pipelines::ManagedRenderPipelineAssetDescriptor descriptor = {
"GameScripts",
"Gameplay",
"ManagedFinalColorRenderPipelineProbeAsset"
};
auto bridgeState = std::make_shared<MockManagedRenderPipelineBridgeState>();
bridgeState->hasDefaultFinalColorSettings = true;
bridgeState->defaultFinalColorSettings.outputTransferMode =
FinalColorOutputTransferMode::LinearToSRGB;
bridgeState->defaultFinalColorSettings.exposureMode =
FinalColorExposureMode::Fixed;
bridgeState->defaultFinalColorSettings.exposureValue = 1.75f;
bridgeState->defaultFinalColorSettings.toneMappingMode =
FinalColorToneMappingMode::ACES;
bridgeState->defaultFinalColorSettings.finalColorScale =
XCEngine::Math::Vector4(0.90f, 1.10f, 1.20f, 1.0f);
Pipelines::SetManagedRenderPipelineBridge(
std::make_shared<MockManagedRenderPipelineBridge>(bridgeState));
Pipelines::ManagedScriptableRenderPipelineAsset asset(descriptor);
const FinalColorSettings settings = asset.GetDefaultFinalColorSettings();
EXPECT_EQ(bridgeState->createAssetRuntimeCalls, 1);
ASSERT_NE(bridgeState->lastCreatedRuntimeState, nullptr);
EXPECT_EQ(
bridgeState->lastCreatedRuntimeState->getDefaultFinalColorSettingsCalls,
1);
EXPECT_EQ(settings.outputTransferMode, FinalColorOutputTransferMode::LinearToSRGB);
EXPECT_EQ(settings.exposureMode, FinalColorExposureMode::Fixed);
EXPECT_FLOAT_EQ(settings.exposureValue, 1.75f);
EXPECT_EQ(settings.toneMappingMode, 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);
Pipelines::ClearManagedRenderPipelineBridge();
}
TEST(ManagedScriptableRenderPipelineAsset_Test, ReusesManagedAssetRuntimeAcrossPipelineRequestAndPlanRequests) {
Pipelines::ClearManagedRenderPipelineBridge();