68 lines
2.1 KiB
C++
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
|