Unify camera frame graph resource binding helpers
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEngine/Core/Containers/String.h>
|
||||
#include <XCEngine/Rendering/Execution/CameraFramePlan.h>
|
||||
#include <XCEngine/Rendering/Execution/FrameExecutionContext.h>
|
||||
#include <XCEngine/Rendering/FrameData/RenderSceneData.h>
|
||||
#include <XCEngine/Rendering/Graph/RenderGraphBlackboard.h>
|
||||
@@ -27,6 +28,50 @@ struct CameraFrameRenderGraphResources {
|
||||
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
|
||||
@@ -41,6 +86,41 @@ inline const CameraFrameRenderGraphResources* TryGetCameraFrameRenderGraphResour
|
||||
: 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 = {};
|
||||
|
||||
Reference in New Issue
Block a user