refactor(rendering): move frame plan defaults behind pipeline assets
This commit is contained in:
@@ -21,6 +21,7 @@
|
||||
#include <XCEngine/Scene/Scene.h>
|
||||
|
||||
#include "Rendering/Execution/Internal/CameraFrameGraph/SurfaceResolver.h"
|
||||
#include <functional>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <utility>
|
||||
@@ -412,8 +413,10 @@ public:
|
||||
|
||||
struct MockPipelineAssetState {
|
||||
int createCalls = 0;
|
||||
int configureCameraFramePlanCalls = 0;
|
||||
std::shared_ptr<MockPipelineState> lastCreatedPipelineState;
|
||||
FinalColorSettings defaultFinalColorSettings = {};
|
||||
std::function<void(CameraFramePlan&)> configureCameraFramePlan = {};
|
||||
};
|
||||
|
||||
struct MockStageRecorderState {
|
||||
@@ -659,6 +662,16 @@ public:
|
||||
return m_state->defaultFinalColorSettings;
|
||||
}
|
||||
|
||||
void ConfigureCameraFramePlan(CameraFramePlan& plan) const override {
|
||||
++m_state->configureCameraFramePlanCalls;
|
||||
if (m_state->configureCameraFramePlan) {
|
||||
m_state->configureCameraFramePlan(plan);
|
||||
return;
|
||||
}
|
||||
|
||||
RenderPipelineAsset::ConfigureCameraFramePlan(plan);
|
||||
}
|
||||
|
||||
private:
|
||||
std::shared_ptr<MockPipelineAssetState> m_state;
|
||||
};
|
||||
@@ -3109,6 +3122,47 @@ TEST(SceneRenderer_Test, ResolvesFinalColorPolicyFromPipelineDefaultsAndCameraOv
|
||||
EXPECT_FALSE(plan.finalOutput.IsRequested());
|
||||
}
|
||||
|
||||
TEST(SceneRenderer_Test, UsesPipelineAssetCameraFramePlanConfigurationHook) {
|
||||
Scene scene("SceneRendererPlanConfigurationHookScene");
|
||||
|
||||
GameObject* cameraObject = scene.CreateGameObject("Camera");
|
||||
auto* camera = cameraObject->AddComponent<CameraComponent>();
|
||||
camera->SetPrimary(true);
|
||||
camera->SetDepth(2.0f);
|
||||
camera->SetPostProcessPasses({
|
||||
XCEngine::Rendering::CameraPostProcessPassDesc::MakeColorScale(
|
||||
XCEngine::Math::Vector4(1.0f, 0.75f, 0.75f, 1.0f))
|
||||
});
|
||||
|
||||
FinalColorOverrideSettings cameraOverrides = {};
|
||||
cameraOverrides.overrideOutputTransferMode = true;
|
||||
cameraOverrides.outputTransferMode = FinalColorOutputTransferMode::LinearToSRGB;
|
||||
camera->SetFinalColorOverrides(cameraOverrides);
|
||||
|
||||
auto assetState = std::make_shared<MockPipelineAssetState>();
|
||||
assetState->configureCameraFramePlan = [](
|
||||
CameraFramePlan& plan) {
|
||||
plan.ClearOwnedPostProcessSequence();
|
||||
plan.ClearOwnedFinalOutputSequence();
|
||||
plan.finalColorPolicy = {};
|
||||
plan.postProcess = {};
|
||||
plan.finalOutput = {};
|
||||
plan.colorChain = {};
|
||||
};
|
||||
|
||||
SceneRenderer renderer(std::make_shared<MockPipelineAsset>(assetState));
|
||||
const std::vector<CameraFramePlan> plans =
|
||||
renderer.BuildFramePlans(scene, nullptr, CreateValidContext(), RenderSurface(640, 360));
|
||||
|
||||
ASSERT_EQ(plans.size(), 1u);
|
||||
EXPECT_EQ(assetState->configureCameraFramePlanCalls, 1);
|
||||
const CameraFramePlan& plan = plans[0];
|
||||
EXPECT_FALSE(plan.finalColorPolicy.hasPipelineDefaults);
|
||||
EXPECT_FALSE(plan.finalColorPolicy.hasCameraOverrides);
|
||||
EXPECT_FALSE(plan.postProcess.IsRequested());
|
||||
EXPECT_FALSE(plan.finalOutput.IsRequested());
|
||||
}
|
||||
|
||||
TEST(SceneRenderer_Test, BuildsFinalOutputRequestFromResolvedFinalColorPolicy) {
|
||||
Scene scene("SceneRendererFinalOutputScene");
|
||||
|
||||
|
||||
Reference in New Issue
Block a user