diff --git a/engine/include/XCEngine/Rendering/Execution/CameraFrameRenderGraphResources.h b/engine/include/XCEngine/Rendering/Execution/CameraFrameRenderGraphResources.h new file mode 100644 index 00000000..3e73cce7 --- /dev/null +++ b/engine/include/XCEngine/Rendering/Execution/CameraFrameRenderGraphResources.h @@ -0,0 +1,116 @@ +#pragma once + +#include +#include +#include + +namespace XCEngine { +namespace Rendering { + +struct CameraFrameRenderGraphSurfaceResources { + RenderGraphTextureHandle color = {}; + RenderGraphTextureHandle depth = {}; +}; + +struct CameraFrameRenderGraphResources { + CameraFrameRenderGraphSurfaceResources mainScene = {}; + CameraFrameRenderGraphSurfaceResources postProcess = {}; + CameraFrameRenderGraphSurfaceResources objectId = {}; + RenderGraphTextureHandle mainDirectionalShadow = {}; +}; + +inline CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphStageSurfaceResources( + CameraFrameRenderGraphResources& frameResources, + CameraFrameStage stage) { + switch (stage) { + case CameraFrameStage::MainScene: + return &frameResources.mainScene; + case CameraFrameStage::PostProcess: + return &frameResources.postProcess; + case CameraFrameStage::ObjectId: + return &frameResources.objectId; + default: + return nullptr; + } +} + +inline const CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphStageSurfaceResources( + const CameraFrameRenderGraphResources& frameResources, + CameraFrameStage stage) { + switch (stage) { + case CameraFrameStage::MainScene: + return &frameResources.mainScene; + case CameraFrameStage::PostProcess: + return &frameResources.postProcess; + case CameraFrameStage::ObjectId: + return &frameResources.objectId; + default: + return nullptr; + } +} + +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; + } +} + +inline CameraFrameRenderGraphResources* TryGetCameraFrameRenderGraphResources( + RenderGraphBlackboard* blackboard) { + return blackboard != nullptr + ? blackboard->TryGet() + : nullptr; +} + +inline const CameraFrameRenderGraphResources* TryGetCameraFrameRenderGraphResources( + const RenderGraphBlackboard* blackboard) { + return blackboard != nullptr + ? blackboard->TryGet() + : nullptr; +} + +inline RenderGraphTextureHandle ResolveCameraFrameRenderGraphColorSource( + const CameraFrameRenderGraphResources& frameResources, + CameraFrameColorSource source) { + const CameraFrameRenderGraphSurfaceResources* const surfaceResources = + ResolveCameraFrameRenderGraphColorSourceResources(frameResources, source); + return surfaceResources != nullptr + ? surfaceResources->color + : RenderGraphTextureHandle{}; +} + +inline RenderGraphTextureHandle ResolveCameraFrameRenderGraphColorSource( + const RenderGraphBlackboard* blackboard, + CameraFrameColorSource source) { + const CameraFrameRenderGraphResources* const frameResources = + TryGetCameraFrameRenderGraphResources(blackboard); + return frameResources != nullptr + ? ResolveCameraFrameRenderGraphColorSource(*frameResources, source) + : RenderGraphTextureHandle{}; +} + +inline void WriteCameraFrameRenderGraphStageSurfaceResources( + CameraFrameRenderGraphResources& frameResources, + CameraFrameStage stage, + RenderGraphTextureHandle color, + RenderGraphTextureHandle depth) { + CameraFrameRenderGraphSurfaceResources* const surfaceResources = + ResolveCameraFrameRenderGraphStageSurfaceResources(frameResources, stage); + if (surfaceResources == nullptr) { + return; + } + + surfaceResources->color = color; + surfaceResources->depth = depth; +} + +} // namespace Rendering +} // namespace XCEngine diff --git a/engine/include/XCEngine/Rendering/RenderPipeline.h b/engine/include/XCEngine/Rendering/RenderPipeline.h index 5d217060..76bb99ed 100644 --- a/engine/include/XCEngine/Rendering/RenderPipeline.h +++ b/engine/include/XCEngine/Rendering/RenderPipeline.h @@ -1,10 +1,9 @@ #pragma once #include -#include +#include #include #include -#include #include #include #include @@ -16,111 +15,6 @@ namespace Rendering { class RenderGraphBuilder; -struct CameraFrameRenderGraphSurfaceResources { - RenderGraphTextureHandle color = {}; - RenderGraphTextureHandle depth = {}; -}; - -struct CameraFrameRenderGraphResources { - CameraFrameRenderGraphSurfaceResources mainScene = {}; - CameraFrameRenderGraphSurfaceResources postProcess = {}; - CameraFrameRenderGraphSurfaceResources objectId = {}; - RenderGraphTextureHandle mainDirectionalShadow = {}; -}; - -inline CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphStageSurfaceResources( - CameraFrameRenderGraphResources& frameResources, - CameraFrameStage stage) { - switch (stage) { - case CameraFrameStage::MainScene: - return &frameResources.mainScene; - case CameraFrameStage::PostProcess: - return &frameResources.postProcess; - case CameraFrameStage::ObjectId: - return &frameResources.objectId; - default: - return nullptr; - } -} - -inline const CameraFrameRenderGraphSurfaceResources* ResolveCameraFrameRenderGraphStageSurfaceResources( - const CameraFrameRenderGraphResources& frameResources, - CameraFrameStage stage) { - switch (stage) { - case CameraFrameStage::MainScene: - return &frameResources.mainScene; - case CameraFrameStage::PostProcess: - return &frameResources.postProcess; - case CameraFrameStage::ObjectId: - return &frameResources.objectId; - default: - return nullptr; - } -} - -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; - } -} - -inline CameraFrameRenderGraphResources* TryGetCameraFrameRenderGraphResources( - RenderGraphBlackboard* blackboard) { - return blackboard != nullptr - ? blackboard->TryGet() - : nullptr; -} - -inline const CameraFrameRenderGraphResources* TryGetCameraFrameRenderGraphResources( - const RenderGraphBlackboard* blackboard) { - return blackboard != nullptr - ? blackboard->TryGet() - : nullptr; -} - -inline RenderGraphTextureHandle ResolveCameraFrameRenderGraphColorSource( - const CameraFrameRenderGraphResources& frameResources, - CameraFrameColorSource source) { - const CameraFrameRenderGraphSurfaceResources* const surfaceResources = - ResolveCameraFrameRenderGraphColorSourceResources(frameResources, source); - return surfaceResources != nullptr - ? surfaceResources->color - : RenderGraphTextureHandle{}; -} - -inline RenderGraphTextureHandle ResolveCameraFrameRenderGraphColorSource( - const RenderGraphBlackboard* blackboard, - CameraFrameColorSource source) { - const CameraFrameRenderGraphResources* const frameResources = - TryGetCameraFrameRenderGraphResources(blackboard); - return frameResources != nullptr - ? ResolveCameraFrameRenderGraphColorSource(*frameResources, source) - : RenderGraphTextureHandle{}; -} - -inline void WriteCameraFrameRenderGraphStageSurfaceResources( - CameraFrameRenderGraphResources& frameResources, - CameraFrameStage stage, - RenderGraphTextureHandle color, - RenderGraphTextureHandle depth) { - CameraFrameRenderGraphSurfaceResources* const surfaceResources = - ResolveCameraFrameRenderGraphStageSurfaceResources(frameResources, stage); - if (surfaceResources == nullptr) { - return; - } - - surfaceResources->color = color; - surfaceResources->depth = depth; -} - struct RenderPipelineMainSceneRenderGraphContext { RenderGraphBuilder& graphBuilder; Containers::String passName = {};