Graph-ify forward feature injection points
This commit is contained in:
@@ -335,11 +335,6 @@ private:
|
||||
const FrameExecutionContext& executionContext,
|
||||
size_t beginStepIndex,
|
||||
size_t endStepIndex);
|
||||
bool ExecuteForwardSceneSegmentPass(
|
||||
const FrameExecutionContext& executionContext,
|
||||
size_t beginStepIndex,
|
||||
size_t endStepIndex,
|
||||
bool clearAttachments);
|
||||
bool BeginForwardScenePass(
|
||||
const RenderPassContext& context,
|
||||
bool clearAttachments = true);
|
||||
|
||||
33
engine/include/XCEngine/Rendering/SceneRenderFeatureHost.h
Normal file
33
engine/include/XCEngine/Rendering/SceneRenderFeatureHost.h
Normal file
@@ -0,0 +1,33 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEngine/Rendering/SceneRenderFeaturePass.h>
|
||||
|
||||
#include <memory>
|
||||
#include <vector>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
|
||||
class SceneRenderFeatureHost {
|
||||
public:
|
||||
void AddFeaturePass(std::unique_ptr<SceneRenderFeaturePass> featurePass);
|
||||
size_t GetFeaturePassCount() const;
|
||||
SceneRenderFeaturePass* GetFeaturePass(size_t index) const;
|
||||
|
||||
bool Initialize(const RenderContext& context);
|
||||
void Shutdown();
|
||||
bool Prepare(const FrameExecutionContext& executionContext) const;
|
||||
bool Record(
|
||||
const SceneRenderFeaturePassRenderGraphContext& context,
|
||||
SceneRenderInjectionPoint injectionPoint,
|
||||
bool* recordedAnyPass = nullptr) const;
|
||||
bool Execute(
|
||||
const FrameExecutionContext& executionContext,
|
||||
SceneRenderInjectionPoint injectionPoint) const;
|
||||
|
||||
private:
|
||||
std::vector<std::unique_ptr<SceneRenderFeaturePass>> m_featurePasses;
|
||||
};
|
||||
|
||||
} // namespace Rendering
|
||||
} // namespace XCEngine
|
||||
@@ -1,16 +1,59 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEngine/Core/Containers/String.h>
|
||||
#include <XCEngine/Rendering/Execution/SceneRenderInjectionPoint.h>
|
||||
#include <XCEngine/Rendering/Graph/RenderGraphTypes.h>
|
||||
#include <XCEngine/Rendering/RenderPass.h>
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
|
||||
#include <functional>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace Rendering {
|
||||
|
||||
class RenderGraphBuilder;
|
||||
|
||||
using SceneRenderFeaturePassBeginCallback = std::function<bool(const RenderPassContext&, bool clearAttachments)>;
|
||||
using SceneRenderFeaturePassEndCallback = std::function<void(const RenderPassContext&)>;
|
||||
|
||||
struct SceneRenderFeaturePassRenderGraphContext {
|
||||
RenderGraphBuilder& graphBuilder;
|
||||
Containers::String passName = {};
|
||||
const RenderContext& renderContext;
|
||||
const RenderSceneData& sceneData;
|
||||
RenderSurface surface = {};
|
||||
const RenderSurface* sourceSurface = nullptr;
|
||||
RHI::RHIResourceView* sourceColorView = nullptr;
|
||||
RHI::ResourceStates sourceColorState = RHI::ResourceStates::Common;
|
||||
std::vector<RenderGraphTextureHandle> colorTargets = {};
|
||||
RenderGraphTextureHandle depthTarget = {};
|
||||
RenderGraphTextureHandle mainDirectionalShadowTexture = {};
|
||||
bool clearAttachments = false;
|
||||
bool* executionSucceeded = nullptr;
|
||||
SceneRenderFeaturePassBeginCallback beginPassCallback = {};
|
||||
SceneRenderFeaturePassEndCallback endPassCallback = {};
|
||||
};
|
||||
|
||||
class SceneRenderFeaturePass : public RenderPass {
|
||||
public:
|
||||
~SceneRenderFeaturePass() override = default;
|
||||
|
||||
virtual SceneRenderInjectionPoint GetInjectionPoint() const {
|
||||
return SceneRenderInjectionPoint::BeforeTransparent;
|
||||
}
|
||||
|
||||
bool SupportsInjectionPoint(SceneRenderInjectionPoint injectionPoint) const {
|
||||
return GetInjectionPoint() == injectionPoint;
|
||||
}
|
||||
|
||||
virtual bool IsActive(const RenderSceneData& sceneData) const = 0;
|
||||
|
||||
virtual bool Prepare(const FrameExecutionContext& executionContext) {
|
||||
return Prepare(
|
||||
executionContext.renderContext,
|
||||
executionContext.sceneData);
|
||||
}
|
||||
|
||||
virtual bool Prepare(
|
||||
const RenderContext& renderContext,
|
||||
const RenderSceneData& sceneData) {
|
||||
@@ -18,6 +61,9 @@ public:
|
||||
(void)sceneData;
|
||||
return true;
|
||||
}
|
||||
|
||||
virtual bool RecordRenderGraph(
|
||||
const SceneRenderFeaturePassRenderGraphContext& context);
|
||||
};
|
||||
|
||||
} // namespace Rendering
|
||||
|
||||
Reference in New Issue
Block a user