refactor(rendering): centralize camera frame stage graph policy
This commit is contained in:
@@ -18,48 +18,71 @@ struct CameraFrameRenderGraphResources {
|
||||
RenderGraphTextureHandle mainDirectionalShadow = {};
|
||||
};
|
||||
|
||||
inline CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphStageSurfaceResources(
|
||||
inline CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphSurfaceResources(
|
||||
CameraFrameRenderGraphResources& frameResources,
|
||||
CameraFrameStage stage) {
|
||||
switch (stage) {
|
||||
case CameraFrameStage::MainScene:
|
||||
CameraFrameStageSurfaceResourceSlot slot) {
|
||||
switch (slot) {
|
||||
case CameraFrameStageSurfaceResourceSlot::MainScene:
|
||||
return &frameResources.mainScene;
|
||||
case CameraFrameStage::PostProcess:
|
||||
case CameraFrameStageSurfaceResourceSlot::PostProcess:
|
||||
return &frameResources.postProcess;
|
||||
case CameraFrameStage::ObjectId:
|
||||
case CameraFrameStageSurfaceResourceSlot::ObjectId:
|
||||
return &frameResources.objectId;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
inline const CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphStageSurfaceResources(
|
||||
inline const CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphSurfaceResources(
|
||||
const CameraFrameRenderGraphResources& frameResources,
|
||||
CameraFrameStage stage) {
|
||||
switch (stage) {
|
||||
case CameraFrameStage::MainScene:
|
||||
CameraFrameStageSurfaceResourceSlot slot) {
|
||||
switch (slot) {
|
||||
case CameraFrameStageSurfaceResourceSlot::MainScene:
|
||||
return &frameResources.mainScene;
|
||||
case CameraFrameStage::PostProcess:
|
||||
case CameraFrameStageSurfaceResourceSlot::PostProcess:
|
||||
return &frameResources.postProcess;
|
||||
case CameraFrameStage::ObjectId:
|
||||
case CameraFrameStageSurfaceResourceSlot::ObjectId:
|
||||
return &frameResources.objectId;
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
inline CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphStageSurfaceResources(
|
||||
CameraFrameRenderGraphResources& frameResources,
|
||||
CameraFrameStage stage) {
|
||||
return ResolveCameraFrameRenderGraphSurfaceResources(
|
||||
frameResources,
|
||||
GetCameraFrameStageSurfaceResourceSlot(stage));
|
||||
}
|
||||
|
||||
inline const CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphStageSurfaceResources(
|
||||
const CameraFrameRenderGraphResources& frameResources,
|
||||
CameraFrameStage stage) {
|
||||
return ResolveCameraFrameRenderGraphSurfaceResources(
|
||||
frameResources,
|
||||
GetCameraFrameStageSurfaceResourceSlot(stage));
|
||||
}
|
||||
|
||||
inline constexpr CameraFrameStageSurfaceResourceSlot
|
||||
ResolveCameraFrameColorSourceSurfaceResourceSlot(
|
||||
CameraFrameColorSource source) {
|
||||
switch (source) {
|
||||
case CameraFrameColorSource::MainSceneColor:
|
||||
return CameraFrameStageSurfaceResourceSlot::MainScene;
|
||||
case CameraFrameColorSource::PostProcessColor:
|
||||
return CameraFrameStageSurfaceResourceSlot::PostProcess;
|
||||
default:
|
||||
return CameraFrameStageSurfaceResourceSlot::None;
|
||||
}
|
||||
}
|
||||
|
||||
inline const CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphColorSourceResources(
|
||||
const CameraFrameRenderGraphResources& frameResources,
|
||||
CameraFrameColorSource source) {
|
||||
switch (source) {
|
||||
case CameraFrameColorSource::MainSceneColor:
|
||||
return &frameResources.mainScene;
|
||||
case CameraFrameColorSource::PostProcessColor:
|
||||
return &frameResources.postProcess;
|
||||
case CameraFrameColorSource::ExplicitSurface:
|
||||
default:
|
||||
return nullptr;
|
||||
}
|
||||
return ResolveCameraFrameRenderGraphSurfaceResources(
|
||||
frameResources,
|
||||
ResolveCameraFrameColorSourceSurfaceResourceSlot(source));
|
||||
}
|
||||
|
||||
inline RenderGraphTextureHandle ResolveCameraFrameRenderGraphColorSource(
|
||||
|
||||
@@ -32,6 +32,13 @@ enum class CameraFrameStageRequestKind : uint8_t {
|
||||
ObjectId
|
||||
};
|
||||
|
||||
enum class CameraFrameStageSurfaceResourceSlot : uint8_t {
|
||||
None,
|
||||
MainScene,
|
||||
PostProcess,
|
||||
ObjectId
|
||||
};
|
||||
|
||||
struct CameraFrameStageInfo {
|
||||
CameraFrameStage stage = CameraFrameStage::MainScene;
|
||||
const char* name = "";
|
||||
@@ -93,6 +100,11 @@ inline constexpr bool IsCameraFrameSequenceStage(CameraFrameStage stage) {
|
||||
CameraFrameStageExecutionKind::Sequence;
|
||||
}
|
||||
|
||||
inline constexpr bool IsCameraFrameFullscreenSequenceStage(CameraFrameStage stage) {
|
||||
return stage == CameraFrameStage::PostProcess ||
|
||||
stage == CameraFrameStage::FinalOutput;
|
||||
}
|
||||
|
||||
inline constexpr bool SupportsCameraFrameStandalonePass(CameraFrameStage stage) {
|
||||
return GetCameraFrameStageExecutionKind(stage) ==
|
||||
CameraFrameStageExecutionKind::StandalonePass;
|
||||
@@ -130,5 +142,35 @@ inline constexpr const char* GetCameraFrameStageName(CameraFrameStage stage) {
|
||||
}
|
||||
}
|
||||
|
||||
inline constexpr bool DoesCameraFrameStageGraphOwnColorTransitions(
|
||||
CameraFrameStage stage) {
|
||||
return stage == CameraFrameStage::MainScene ||
|
||||
stage == CameraFrameStage::PostProcess ||
|
||||
stage == CameraFrameStage::FinalOutput ||
|
||||
stage == CameraFrameStage::ObjectId;
|
||||
}
|
||||
|
||||
inline constexpr bool DoesCameraFrameStageGraphOwnDepthTransitions(
|
||||
CameraFrameStage stage) {
|
||||
return stage == CameraFrameStage::ShadowCaster ||
|
||||
stage == CameraFrameStage::DepthOnly ||
|
||||
stage == CameraFrameStage::MainScene ||
|
||||
stage == CameraFrameStage::ObjectId;
|
||||
}
|
||||
|
||||
inline constexpr CameraFrameStageSurfaceResourceSlot
|
||||
GetCameraFrameStageSurfaceResourceSlot(CameraFrameStage stage) {
|
||||
switch (stage) {
|
||||
case CameraFrameStage::MainScene:
|
||||
return CameraFrameStageSurfaceResourceSlot::MainScene;
|
||||
case CameraFrameStage::PostProcess:
|
||||
return CameraFrameStageSurfaceResourceSlot::PostProcess;
|
||||
case CameraFrameStage::ObjectId:
|
||||
return CameraFrameStageSurfaceResourceSlot::ObjectId;
|
||||
default:
|
||||
return CameraFrameStageSurfaceResourceSlot::None;
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace Rendering
|
||||
} // namespace XCEngine
|
||||
|
||||
Reference in New Issue
Block a user