Extract camera frame render-graph resource contract header

This commit is contained in:
2026-04-14 22:05:28 +08:00
parent a3efcda550
commit a02ff65651
2 changed files with 117 additions and 107 deletions

View File

@@ -0,0 +1,116 @@
#pragma once
#include <XCEngine/Rendering/Execution/CameraFramePlan.h>
#include <XCEngine/Rendering/Graph/RenderGraphBlackboard.h>
#include <XCEngine/Rendering/Graph/RenderGraphTypes.h>
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<CameraFrameRenderGraphResources>()
: nullptr;
}
inline const CameraFrameRenderGraphResources* TryGetCameraFrameRenderGraphResources(
const RenderGraphBlackboard* blackboard) {
return blackboard != nullptr
? blackboard->TryGet<CameraFrameRenderGraphResources>()
: 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

View File

@@ -1,10 +1,9 @@
#pragma once
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Rendering/Execution/CameraFramePlan.h>
#include <XCEngine/Rendering/Execution/CameraFrameRenderGraphResources.h>
#include <XCEngine/Rendering/Execution/FrameExecutionContext.h>
#include <XCEngine/Rendering/FrameData/RenderSceneData.h>
#include <XCEngine/Rendering/Graph/RenderGraphBlackboard.h>
#include <XCEngine/Rendering/Graph/RenderGraphTypes.h>
#include <XCEngine/Rendering/RenderContext.h>
#include <XCEngine/Rendering/RenderSurface.h>
@@ -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<CameraFrameRenderGraphResources>()
: nullptr;
}
inline const CameraFrameRenderGraphResources* TryGetCameraFrameRenderGraphResources(
const RenderGraphBlackboard* blackboard) {
return blackboard != nullptr
? blackboard->TryGet<CameraFrameRenderGraphResources>()
: 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 = {};