Refactor camera renderer orchestration
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEngine/Rendering/CameraRenderRequest.h>
|
||||
#include <XCEngine/Rendering/RenderSceneExtractor.h>
|
||||
#include <XCEngine/Rendering/RenderPass.h>
|
||||
#include <XCEngine/Rendering/RenderPipeline.h>
|
||||
|
||||
@@ -12,8 +13,13 @@ class CameraComponent;
|
||||
class Scene;
|
||||
} // namespace Components
|
||||
|
||||
namespace RHI {
|
||||
class RHIResourceView;
|
||||
} // namespace RHI
|
||||
|
||||
namespace Rendering {
|
||||
|
||||
class DirectionalShadowSurfaceCache;
|
||||
class RenderSurface;
|
||||
class RenderPipelineAsset;
|
||||
struct RenderContext;
|
||||
@@ -44,12 +50,19 @@ public:
|
||||
bool Render(const CameraRenderRequest& request);
|
||||
|
||||
private:
|
||||
struct DirectionalShadowSurfaceResources;
|
||||
|
||||
void ResetPipeline(std::unique_ptr<RenderPipeline> pipeline);
|
||||
DirectionalShadowSurfaceResources* AcquireDirectionalShadowSurface(
|
||||
const RenderContext& context,
|
||||
const DirectionalShadowRenderPlan& plan);
|
||||
bool ResolveShadowCasterRequest(
|
||||
const CameraRenderRequest& request,
|
||||
ShadowCasterRenderRequest& outResolvedShadowCaster,
|
||||
RHI::RHIResourceView*& outShadowMapView);
|
||||
bool BuildSceneDataForRequest(
|
||||
const CameraRenderRequest& request,
|
||||
RHI::RHIResourceView* shadowMapView,
|
||||
RenderSceneData& outSceneData);
|
||||
bool ExecuteRenderPlan(
|
||||
const CameraRenderRequest& request,
|
||||
const ShadowCasterRenderRequest& resolvedShadowCaster,
|
||||
const RenderSceneData& sceneData);
|
||||
|
||||
RenderSceneExtractor m_sceneExtractor;
|
||||
std::shared_ptr<const RenderPipelineAsset> m_pipelineAsset;
|
||||
@@ -57,7 +70,7 @@ private:
|
||||
std::unique_ptr<RenderPass> m_objectIdPass;
|
||||
std::unique_ptr<RenderPass> m_depthOnlyPass;
|
||||
std::unique_ptr<RenderPass> m_shadowCasterPass;
|
||||
std::unique_ptr<DirectionalShadowSurfaceResources> m_directionalShadowSurface;
|
||||
std::unique_ptr<DirectionalShadowSurfaceCache> m_directionalShadowSurface;
|
||||
};
|
||||
|
||||
} // namespace Rendering
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#pragma once
|
||||
|
||||
#include <XCEngine/Rendering/RenderSurface.h>
|
||||
|
||||
namespace XCEngine {
|
||||
namespace RHI {
|
||||
class RHIDevice;
|
||||
class RHIResourceView;
|
||||
class RHITexture;
|
||||
} // namespace RHI
|
||||
|
||||
namespace Rendering {
|
||||
|
||||
struct DirectionalShadowRenderPlan;
|
||||
struct RenderContext;
|
||||
|
||||
class DirectionalShadowSurfaceCache {
|
||||
public:
|
||||
DirectionalShadowSurfaceCache() = default;
|
||||
DirectionalShadowSurfaceCache(const DirectionalShadowSurfaceCache&) = delete;
|
||||
DirectionalShadowSurfaceCache& operator=(const DirectionalShadowSurfaceCache&) = delete;
|
||||
~DirectionalShadowSurfaceCache();
|
||||
|
||||
bool EnsureSurface(const RenderContext& context, const DirectionalShadowRenderPlan& plan);
|
||||
|
||||
const RenderSurface& GetSurface() const { return m_surface; }
|
||||
RHI::RHIResourceView* GetDepthShaderView() const { return m_depthShaderView; }
|
||||
|
||||
private:
|
||||
bool Matches(const RenderContext& context, const DirectionalShadowRenderPlan& plan) const;
|
||||
void Reset();
|
||||
|
||||
RHI::RHIDevice* m_device = nullptr;
|
||||
uint32_t m_width = 0;
|
||||
uint32_t m_height = 0;
|
||||
RHI::RHITexture* m_depthTexture = nullptr;
|
||||
RHI::RHIResourceView* m_depthView = nullptr;
|
||||
RHI::RHIResourceView* m_depthShaderView = nullptr;
|
||||
RenderSurface m_surface = {};
|
||||
};
|
||||
|
||||
} // namespace Rendering
|
||||
} // namespace XCEngine
|
||||
Reference in New Issue
Block a user