85 lines
3.5 KiB
C++
85 lines
3.5 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;
|
|
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);
|
|
void ClearFullscreenStage(CameraFrameStage stage);
|
|
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
|