Unify camera frame graph resource binding helpers

This commit is contained in:
2026-04-14 22:00:03 +08:00
parent 86eb455ab9
commit a3efcda550
3 changed files with 211 additions and 41 deletions

View File

@@ -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 = {};