Graphics/Camera: Add render order property

This commit is contained in:
Jérôme Leclercq
2021-11-28 20:15:22 +01:00
parent d0aad3ee1e
commit 0c3bcf6c86
7 changed files with 33 additions and 6 deletions

View File

@@ -31,6 +31,7 @@ namespace Nz
const Color& GetClearColor() const override;
inline DegreeAnglef GetFOV() const;
UInt32 GetRenderMask() const override;
inline Int32 GetRenderOrder() const;
const RenderTarget& GetRenderTarget() override;
inline const Vector2f& GetSize() const;
inline const Rectf& GetTargetRegion() const;
@@ -44,6 +45,7 @@ namespace Nz
inline void UpdateFOV(DegreeAnglef fov);
inline void UpdateProjectionType(ProjectionType projectionType);
inline void UpdateRenderMask(UInt32 renderMask);
inline void UpdateRenderOrder(Int32 renderOrder);
inline void UpdateSize(const Vector2f& size);
void UpdateTarget(const RenderTarget* framebuffer);
inline void UpdateTargetRegion(const Rectf& targetRegion);
@@ -65,6 +67,7 @@ namespace Nz
const RenderTarget* m_renderTarget;
Color m_clearColor;
DegreeAnglef m_fov;
Int32 m_renderOrder;
ProjectionType m_projectionType;
Rectf m_targetRegion;
Recti m_viewport;

View File

@@ -16,6 +16,7 @@ namespace Nz
m_targetRegion(0.f, 0.f, 1.f, 1.f),
m_viewport(0, 0, 0, 0),
m_renderMask(0xFFFFFFFF),
m_renderOrder(0),
m_size(-1.f, -1.f),
m_zFar((projectionType == ProjectionType::Perspective) ? 1000.f : 1.f),
m_zNear((projectionType == ProjectionType::Perspective) ? 1.f : -1.f)
@@ -31,6 +32,7 @@ namespace Nz
m_targetRegion(camera.m_targetRegion),
m_viewport(camera.m_viewport),
m_renderMask(camera.m_renderMask),
m_renderOrder(camera.m_renderOrder),
m_size(camera.m_size),
m_aspectRatio(camera.m_aspectRatio),
m_zFar(camera.m_zFar),
@@ -47,6 +49,7 @@ namespace Nz
m_targetRegion(camera.m_targetRegion),
m_viewport(camera.m_viewport),
m_renderMask(camera.m_renderMask),
m_renderOrder(camera.m_renderOrder),
m_size(camera.m_size),
m_aspectRatio(camera.m_aspectRatio),
m_zFar(camera.m_zFar),
@@ -65,6 +68,11 @@ namespace Nz
return m_fov;
}
inline Int32 Camera::GetRenderOrder() const
{
return m_renderOrder;
}
inline const Vector2f& Camera::GetSize() const
{
return m_size;
@@ -155,6 +163,13 @@ namespace Nz
// TODO: Signal RenderTechnique to regenerate commandbuffers
}
inline void Camera::UpdateRenderOrder(Int32 renderOrder)
{
m_renderOrder = renderOrder;
// TODO: Signal RenderTechnique to regenerate commandbuffers
}
inline void Camera::UpdateTargetRegion(const Rectf& targetRegion)
{
m_targetRegion = targetRegion;

View File

@@ -40,7 +40,7 @@ namespace Nz
void InvalidateWorldInstance(WorldInstance* worldInstance) override;
void RegisterInstancedDrawable(WorldInstancePtr worldInstance, const InstancedRenderable* instancedRenderable, UInt32 renderMask) override;
void RegisterViewer(AbstractViewer* viewerInstance) override;
void RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder) override;
void Render(RenderFrame& renderFrame) override;
@@ -86,6 +86,7 @@ namespace Nz
std::vector<std::unique_ptr<RenderElement>> depthPrepassRenderElements;
std::vector<std::unique_ptr<RenderElement>> forwardRenderElements;
std::vector<std::unique_ptr<ElementRendererData>> elementRendererData;
Int32 renderOrder = 0;
RenderQueueRegistry depthPrepassRegistry;
RenderQueueRegistry forwardRegistry;
RenderQueue<RenderElement*> depthPrepassRenderQueue;

View File

@@ -29,7 +29,7 @@ namespace Nz
virtual void InvalidateWorldInstance(WorldInstance* worldInstance) = 0;
virtual void RegisterInstancedDrawable(WorldInstancePtr worldInstance, const InstancedRenderable* instancedRenderable, UInt32 renderMask) = 0;
virtual void RegisterViewer(AbstractViewer* viewerInstance) = 0;
virtual void RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder) = 0;
virtual void Render(RenderFrame& renderFrame) = 0;