Files
XCEngine/engine/include/XCEngine/Rendering/Execution/CameraFramePlan.h
ssdfasd 9e6c473186 feat(srp): add managed camera frame planning seam
Expose native camera frame planning controls to managed pipeline assets and renderer features.

Allow managed planning to override fullscreen stage heuristics while keeping CameraFramePlan as the native execution contract.

Add scripting coverage, probe assets, and archive the phase plan after build, test, and editor smoke validation.
2026-04-20 01:48:16 +08:00

91 lines
3.7 KiB
C++

#pragma once
#include <XCEngine/Rendering/Execution/CameraFrameColorSource.h>
#include <XCEngine/Rendering/Execution/CameraFrameStage.h>
#include <XCEngine/Rendering/Planning/CameraRenderRequest.h>
#include <memory>
namespace XCEngine {
namespace Rendering {
struct CameraFrameFullscreenStagePlan {
bool requested = false;
bool usesGraphManagedOutputColor = false;
bool explicitlyConfigured = false;
CameraFrameColorSource source = CameraFrameColorSource::ExplicitSurface;
};
struct CameraFrameColorChainPlan {
bool usesGraphManagedSceneColor = false;
CameraFrameFullscreenStagePlan postProcess = {};
CameraFrameFullscreenStagePlan finalOutput = {};
};
struct CameraFramePlan {
static RenderSurface BuildGraphManagedIntermediateSurfaceTemplate(
const RenderSurface& surface);
CameraRenderRequest request = {};
ShadowCasterRenderRequest shadowCaster = {};
DirectionalShadowRenderPlan directionalShadow = {};
PostProcessRenderRequest postProcess = {};
FinalOutputRenderRequest finalOutput = {};
ResolvedFinalColorPolicy finalColorPolicy = {};
RenderPassSequence* preScenePasses = nullptr;
RenderPassSequence* postScenePasses = nullptr;
RenderPassSequence* overlayPasses = nullptr;
CameraFrameColorChainPlan colorChain = {};
RenderSurface graphManagedSceneSurface = {};
static CameraFramePlan FromRequest(const CameraRenderRequest& request);
bool IsValid() const;
void ConfigureGraphManagedSceneSurface();
void ClearOwnedPostProcessSequence();
void SetOwnedPostProcessSequence(std::shared_ptr<RenderPassSequence> sequence);
const std::shared_ptr<RenderPassSequence>& GetOwnedPostProcessSequence() const {
return m_ownedPostProcessSequence;
}
void ClearOwnedFinalOutputSequence();
void SetOwnedFinalOutputSequence(std::shared_ptr<RenderPassSequence> sequence);
const std::shared_ptr<RenderPassSequence>& GetOwnedFinalOutputSequence() const {
return m_ownedFinalOutputSequence;
}
bool UsesGraphManagedSceneColor() const;
bool UsesGraphManagedOutputColor(CameraFrameStage stage) const;
CameraFrameColorSource ResolveStageColorSource(CameraFrameStage stage) const;
bool IsFullscreenStageRequested(CameraFrameStage stage) const;
bool RequestFullscreenStage(
CameraFrameStage stage,
CameraFrameColorSource source,
bool usesGraphManagedOutputColor = false,
bool explicitlyConfigured = false);
void ClearFullscreenStage(
CameraFrameStage stage,
bool explicitlyConfigured = false);
bool HasExplicitFullscreenStageConfiguration(
CameraFrameStage stage) const;
bool IsPostProcessStageValid() const;
bool IsFinalOutputStageValid() const;
bool HasFrameStage(CameraFrameStage stage) const;
RenderPassSequence* GetPassSequence(CameraFrameStage stage) const;
const CameraFrameFullscreenStagePlan* GetFullscreenStagePlan(CameraFrameStage stage) const;
const FullscreenPassRenderRequest* GetFullscreenPassRequest(CameraFrameStage stage) const;
const ScenePassRenderRequest* GetScenePassRequest(CameraFrameStage stage) const;
const ObjectIdRenderRequest* GetObjectIdRequest(CameraFrameStage stage) const;
const RenderSurface* GetSharedStageOutputSurface(CameraFrameStage stage) const;
const RenderSurface& GetMainSceneSurface() const;
const RenderSurface& GetFinalCompositedSurface() const;
bool RequiresIntermediateSceneColor() const;
private:
void RefreshGraphManagedSceneSurfaceState();
std::shared_ptr<RenderPassSequence> m_ownedPostProcessSequence = {};
std::shared_ptr<RenderPassSequence> m_ownedFinalOutputSequence = {};
};
} // namespace Rendering
} // namespace XCEngine