Files
XCEngine/engine/include/XCEngine/Rendering/RenderPipeline.h

68 lines
2.1 KiB
C++

#pragma once
#include <XCEngine/Core/Containers/String.h>
#include <XCEngine/Rendering/Execution/CameraFrameRenderGraphFrameData.h>
#include <XCEngine/Rendering/Execution/FrameExecutionContext.h>
#include <XCEngine/Rendering/FrameData/RenderSceneData.h>
#include <XCEngine/Rendering/Graph/RenderGraphTypes.h>
#include <XCEngine/Rendering/RenderContext.h>
#include <XCEngine/Rendering/RenderSurface.h>
#include <vector>
namespace XCEngine {
namespace Rendering {
class RenderGraphBuilder;
struct RenderPipelineMainSceneRenderGraphContext {
RenderGraphBuilder& graphBuilder;
Containers::String passName = {};
const RenderContext& renderContext;
const RenderSceneData& sceneData;
RenderSurface surfaceTemplate = {};
const RenderSurface* sourceSurface = nullptr;
RHI::RHIResourceView* sourceColorView = nullptr;
RHI::ResourceStates sourceColorState = RHI::ResourceStates::Common;
RenderGraphTextureHandle sourceColorTexture = {};
std::vector<RenderGraphTextureHandle> colorTargets = {};
RenderGraphTextureHandle depthTarget = {};
bool* executionSucceeded = nullptr;
RenderGraphBlackboard* blackboard = nullptr;
};
class RenderPipelineRenderer {
public:
virtual ~RenderPipelineRenderer() = default;
virtual bool Initialize(const RenderContext& context) = 0;
virtual void Shutdown() = 0;
virtual bool SupportsMainSceneRenderGraph() const {
return false;
}
virtual bool RecordMainSceneRenderGraph(
const RenderPipelineMainSceneRenderGraphContext&) {
return false;
}
virtual bool Render(const FrameExecutionContext& executionContext) {
return Render(
executionContext.renderContext,
executionContext.surface,
executionContext.sceneData);
}
virtual bool Render(
const RenderContext& context,
const RenderSurface& surface,
const RenderSceneData& sceneData) = 0;
};
class RenderPipeline : public RenderPipelineRenderer {
public:
using RenderPipelineRenderer::Render;
~RenderPipeline() override = default;
};
} // namespace Rendering
} // namespace XCEngine