Graphics/Camera: Add render order property
This commit is contained in:
parent
d0aad3ee1e
commit
0c3bcf6c86
|
|
@ -94,7 +94,7 @@ int main()
|
|||
modelInstance2->UpdateWorldMatrix(Nz::Matrix4f::Translate(Nz::Vector3f::Forward() * 2 + Nz::Vector3f::Right()));
|
||||
|
||||
Nz::ForwardFramePipeline framePipeline;
|
||||
framePipeline.RegisterViewer(&camera);
|
||||
framePipeline.RegisterViewer(&camera, 0);
|
||||
framePipeline.RegisterInstancedDrawable(modelInstance, &model, 0xFFFFFFFF);
|
||||
framePipeline.RegisterInstancedDrawable(modelInstance2, &model, 0xFFFFFFFF);
|
||||
|
||||
|
|
|
|||
|
|
@ -165,6 +165,7 @@ int main()
|
|||
{
|
||||
registry.emplace<Nz::NodeComponent>(viewer2D);
|
||||
auto& cameraComponent = registry.emplace<Nz::CameraComponent>(viewer2D, window.GetRenderTarget(), Nz::ProjectionType::Orthographic);
|
||||
cameraComponent.UpdateRenderOrder(1);
|
||||
cameraComponent.UpdateRenderMask(2);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -125,9 +125,11 @@ namespace Nz
|
|||
}
|
||||
}
|
||||
|
||||
void ForwardFramePipeline::RegisterViewer(AbstractViewer* viewerInstance)
|
||||
void ForwardFramePipeline::RegisterViewer(AbstractViewer* viewerInstance, Int32 renderOrder)
|
||||
{
|
||||
m_viewers.emplace(viewerInstance, ViewerData{});
|
||||
auto& viewerData = m_viewers.emplace(viewerInstance, ViewerData{}).first->second;
|
||||
viewerData.renderOrder = renderOrder;
|
||||
|
||||
m_invalidatedViewerInstances.insert(viewerInstance);
|
||||
m_rebuildFrameGraph = true;
|
||||
}
|
||||
|
|
@ -366,7 +368,12 @@ namespace Nz
|
|||
Recti renderRegion(0, 0, frameSize.x, frameSize.y);
|
||||
|
||||
const RenderTarget& renderTarget = *renderTargetPtr;
|
||||
const auto& viewers = viewerDataVec;
|
||||
auto& viewers = viewerDataVec;
|
||||
|
||||
std::sort(viewers.begin(), viewers.end(), [](const ViewerData* lhs, const ViewerData* rhs)
|
||||
{
|
||||
return lhs->renderOrder < rhs->renderOrder;
|
||||
});
|
||||
|
||||
renderFrame.Execute([&](CommandBufferBuilder& builder)
|
||||
{
|
||||
|
|
|
|||
Loading…
Reference in New Issue