64 lines
2.4 KiB
C++
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
|