Wire depth and shadow requests through camera renderer
This commit is contained in:
@@ -13,6 +13,31 @@ class Scene;
|
||||
|
||||
namespace Rendering {
|
||||
|
||||
struct ScenePassRenderRequest {
|
||||
RenderSurface surface;
|
||||
RenderClearFlags clearFlags = RenderClearFlags::Depth;
|
||||
bool hasClearColorOverride = false;
|
||||
Math::Color clearColorOverride = Math::Color::Black();
|
||||
bool hasCameraDataOverride = false;
|
||||
RenderCameraData cameraDataOverride = {};
|
||||
|
||||
bool IsRequested() const {
|
||||
return !surface.GetColorAttachments().empty();
|
||||
}
|
||||
|
||||
bool IsValid() const {
|
||||
const std::vector<RHI::RHIResourceView*>& colorAttachments = surface.GetColorAttachments();
|
||||
return !colorAttachments.empty() &&
|
||||
colorAttachments[0] != nullptr &&
|
||||
surface.GetDepthAttachment() != nullptr &&
|
||||
surface.GetRenderAreaWidth() > 0 &&
|
||||
surface.GetRenderAreaHeight() > 0;
|
||||
}
|
||||
};
|
||||
|
||||
using DepthOnlyRenderRequest = ScenePassRenderRequest;
|
||||
using ShadowCasterRenderRequest = ScenePassRenderRequest;
|
||||
|
||||
struct ObjectIdRenderRequest {
|
||||
RenderSurface surface;
|
||||
|
||||
@@ -35,6 +60,8 @@ struct CameraRenderRequest {
|
||||
Components::CameraComponent* camera = nullptr;
|
||||
RenderContext context;
|
||||
RenderSurface surface;
|
||||
DepthOnlyRenderRequest depthOnly;
|
||||
ShadowCasterRenderRequest shadowCaster;
|
||||
ObjectIdRenderRequest objectId;
|
||||
float cameraDepth = 0.0f;
|
||||
uint8_t cameraStackOrder = 0;
|
||||
|
||||
@@ -24,15 +24,21 @@ public:
|
||||
explicit CameraRenderer(std::shared_ptr<const RenderPipelineAsset> pipelineAsset);
|
||||
CameraRenderer(
|
||||
std::unique_ptr<RenderPipeline> pipeline,
|
||||
std::unique_ptr<ObjectIdPass> objectIdPass);
|
||||
std::unique_ptr<ObjectIdPass> objectIdPass,
|
||||
std::unique_ptr<RenderPass> depthOnlyPass = nullptr,
|
||||
std::unique_ptr<RenderPass> shadowCasterPass = nullptr);
|
||||
~CameraRenderer();
|
||||
|
||||
void SetPipeline(std::unique_ptr<RenderPipeline> pipeline);
|
||||
void SetPipelineAsset(std::shared_ptr<const RenderPipelineAsset> pipelineAsset);
|
||||
void SetObjectIdPass(std::unique_ptr<ObjectIdPass> objectIdPass);
|
||||
void SetDepthOnlyPass(std::unique_ptr<RenderPass> depthOnlyPass);
|
||||
void SetShadowCasterPass(std::unique_ptr<RenderPass> shadowCasterPass);
|
||||
RenderPipeline* GetPipeline() const { return m_pipeline.get(); }
|
||||
const RenderPipelineAsset* GetPipelineAsset() const { return m_pipelineAsset.get(); }
|
||||
ObjectIdPass* GetObjectIdPass() const { return m_objectIdPass.get(); }
|
||||
RenderPass* GetDepthOnlyPass() const { return m_depthOnlyPass.get(); }
|
||||
RenderPass* GetShadowCasterPass() const { return m_shadowCasterPass.get(); }
|
||||
|
||||
bool Render(const CameraRenderRequest& request);
|
||||
|
||||
@@ -43,6 +49,8 @@ private:
|
||||
std::shared_ptr<const RenderPipelineAsset> m_pipelineAsset;
|
||||
std::unique_ptr<RenderPipeline> m_pipeline;
|
||||
std::unique_ptr<ObjectIdPass> m_objectIdPass;
|
||||
std::unique_ptr<RenderPass> m_depthOnlyPass;
|
||||
std::unique_ptr<RenderPass> m_shadowCasterPass;
|
||||
};
|
||||
|
||||
} // namespace Rendering
|
||||
|
||||
Reference in New Issue
Block a user