Files
XCEngine/engine/src/Rendering/Internal/RenderPipelineFactory.h

117 lines
4.1 KiB
C++

#pragma once
#include <functional>
#include <memory>
#include <string>
namespace XCEngine {
namespace Rendering {
class NativeSceneRenderer;
class RenderPipeline;
class RenderPipelineAsset;
class RenderPass;
struct CameraRenderRequest;
struct CameraFramePlan;
struct FinalColorSettings;
struct RenderSceneData;
struct DirectionalShadowPlanningSettings;
struct DirectionalShadowExecutionState;
struct DirectionalShadowSurfaceAllocation;
namespace Internal {
using PipelineRendererAssetFactory =
std::function<std::shared_ptr<const RenderPipelineAsset>()>;
using CameraFrameStandalonePassFactory =
std::function<std::unique_ptr<RenderPass>()>;
using DirectionalShadowPlanningPolicy =
std::function<void(
CameraRenderRequest&,
size_t,
size_t,
const DirectionalShadowPlanningSettings&)>;
using CameraFramePlanPolicy =
std::function<void(
CameraFramePlan&,
const FinalColorSettings&)>;
using RenderSceneSetupPolicy =
std::function<void(
const CameraFramePlan&,
RenderSceneData&)>;
using DirectionalShadowExecutionPolicy =
std::function<bool(
const CameraFramePlan&,
const DirectionalShadowSurfaceAllocation&,
DirectionalShadowExecutionState&)>;
std::shared_ptr<const RenderPipelineAsset> CreateConfiguredRenderPipelineAsset();
std::shared_ptr<const RenderPipelineAsset> CreateFallbackRenderPipelineAsset();
bool RegisterPipelineRendererAssetFactory(
const std::string& key,
PipelineRendererAssetFactory factory);
bool UnregisterPipelineRendererAssetFactory(const std::string& key);
std::shared_ptr<const RenderPipelineAsset> CreatePipelineRendererAssetByKey(
const std::string& key);
bool RegisterCameraFrameStandalonePassFactory(
const std::string& key,
CameraFrameStandalonePassFactory factory);
bool UnregisterCameraFrameStandalonePassFactory(
const std::string& key);
std::unique_ptr<RenderPass> CreateCameraFrameStandalonePassByKey(
const std::string& key);
bool RegisterDirectionalShadowPlanningPolicy(
const std::string& key,
DirectionalShadowPlanningPolicy policy);
bool UnregisterDirectionalShadowPlanningPolicy(
const std::string& key);
bool ApplyDirectionalShadowPlanningPolicyByKey(
const std::string& key,
CameraRenderRequest& request,
size_t renderedBaseCameraCount,
size_t renderedRequestCount,
const DirectionalShadowPlanningSettings& settings);
bool RegisterCameraFramePlanPolicy(
const std::string& key,
CameraFramePlanPolicy policy);
bool UnregisterCameraFramePlanPolicy(
const std::string& key);
bool ApplyCameraFramePlanPolicyByKey(
const std::string& key,
CameraFramePlan& plan,
const FinalColorSettings& defaultFinalColorSettings);
bool RegisterRenderSceneSetupPolicy(
const std::string& key,
RenderSceneSetupPolicy policy);
bool UnregisterRenderSceneSetupPolicy(
const std::string& key);
bool ApplyRenderSceneSetupPolicyByKey(
const std::string& key,
const CameraFramePlan& plan,
RenderSceneData& sceneData);
bool RegisterDirectionalShadowExecutionPolicy(
const std::string& key,
DirectionalShadowExecutionPolicy policy);
bool UnregisterDirectionalShadowExecutionPolicy(
const std::string& key);
bool ConfigureDirectionalShadowExecutionStateByKey(
const std::string& key,
const CameraFramePlan& plan,
const DirectionalShadowSurfaceAllocation& shadowAllocation,
DirectionalShadowExecutionState& shadowState);
std::shared_ptr<const RenderPipelineAsset> ResolveRenderPipelineAssetOrDefault(
std::shared_ptr<const RenderPipelineAsset> preferredAsset);
std::unique_ptr<RenderPipeline> CreateRenderPipelineOrDefault(
const std::shared_ptr<const RenderPipelineAsset>& preferredAsset,
std::shared_ptr<const RenderPipelineAsset>* outResolvedAsset = nullptr);
std::unique_ptr<NativeSceneRenderer> CreateNativeSceneRendererFromAsset(
const std::shared_ptr<const RenderPipelineAsset>& preferredAsset,
std::shared_ptr<const RenderPipelineAsset>* outResolvedAsset = nullptr);
std::unique_ptr<NativeSceneRenderer> CreateDefaultNativeSceneRenderer();
} // namespace Internal
} // namespace Rendering
} // namespace XCEngine