Files
XCEngine/engine/include/XCEngine/Rendering/Execution/CameraFramePlan.h

64 lines
2.4 KiB
C++

#pragma once
#include <XCEngine/Rendering/Execution/CameraFrameStage.h>
#include <XCEngine/Rendering/Planning/CameraRenderRequest.h>
namespace XCEngine {
namespace Rendering {
enum class CameraFrameColorSource {
ExplicitSurface = 0,
MainSceneColor,
PostProcessColor
};
struct CameraFrameFullscreenStagePlan {
bool usesGraphManagedOutputColor = false;
CameraFrameColorSource source = CameraFrameColorSource::ExplicitSurface;
};
struct CameraFrameColorChainPlan {
bool usesGraphManagedMainSceneColor = 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 graphManagedMainSceneSurface = {};
static CameraFramePlan FromRequest(const CameraRenderRequest& request);
bool IsValid() const;
void ConfigureGraphManagedMainSceneSurface();
bool UsesGraphManagedMainSceneColor() const;
bool UsesGraphManagedOutputColor(CameraFrameStage stage) const;
CameraFrameColorSource ResolveStageColorSource(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& GetMainSceneSurface() const;
const RenderSurface& GetFinalCompositedSurface() const;
bool RequiresIntermediateSceneColor() const;
};
} // namespace Rendering
} // namespace XCEngine