Graphics: Move scissor box from InstancedRenderable to GraphicsComponent
This commit is contained in:
@@ -33,6 +33,7 @@ namespace Nz
|
||||
inline void DetachRenderable(const std::shared_ptr<InstancedRenderable>& renderable);
|
||||
|
||||
inline const std::vector<Renderable>& GetRenderables() const;
|
||||
inline const Recti& GetScissorBox() const;
|
||||
inline const WorldInstancePtr& GetWorldInstance() const;
|
||||
|
||||
inline void Hide();
|
||||
@@ -41,6 +42,8 @@ namespace Nz
|
||||
|
||||
inline void Show(bool show = true);
|
||||
|
||||
inline void UpdateScissorBox(const Recti& scissorBox);
|
||||
|
||||
GraphicsComponent& operator=(const GraphicsComponent&) = default;
|
||||
GraphicsComponent& operator=(GraphicsComponent&&) = default;
|
||||
|
||||
@@ -56,6 +59,7 @@ namespace Nz
|
||||
|
||||
private:
|
||||
std::vector<Renderable> m_renderables;
|
||||
Recti m_scissorBox;
|
||||
WorldInstancePtr m_worldInstance;
|
||||
bool m_isVisible;
|
||||
};
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
namespace Nz
|
||||
{
|
||||
inline GraphicsComponent::GraphicsComponent(bool initialyVisible) :
|
||||
m_scissorBox(-1, -1, -1, -1),
|
||||
m_isVisible(initialyVisible)
|
||||
{
|
||||
m_worldInstance = std::make_shared<WorldInstance>(); //< FIXME: Use pools
|
||||
@@ -46,6 +47,11 @@ namespace Nz
|
||||
return m_renderables;
|
||||
}
|
||||
|
||||
inline const Recti& GraphicsComponent::GetScissorBox() const
|
||||
{
|
||||
return m_scissorBox;
|
||||
}
|
||||
|
||||
inline const WorldInstancePtr& GraphicsComponent::GetWorldInstance() const
|
||||
{
|
||||
return m_worldInstance;
|
||||
@@ -69,6 +75,15 @@ namespace Nz
|
||||
m_isVisible = show;
|
||||
}
|
||||
}
|
||||
|
||||
inline void GraphicsComponent::UpdateScissorBox(const Recti& scissorBox)
|
||||
{
|
||||
if (m_scissorBox != scissorBox)
|
||||
{
|
||||
OnScissorBoxUpdate(this, scissorBox);
|
||||
m_scissorBox = scissorBox;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#include <Nazara/Graphics/DebugOff.hpp>
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <Nazara/Prerequisites.hpp>
|
||||
#include <Nazara/Graphics/Config.hpp>
|
||||
#include <Nazara/Math/Rect.hpp>
|
||||
|
||||
namespace Nz
|
||||
{
|
||||
@@ -30,6 +31,7 @@ namespace Nz
|
||||
{
|
||||
const InstancedRenderable* instancedRenderable;
|
||||
const WorldInstance* worldInstance;
|
||||
Recti scissorBox;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
@@ -28,16 +28,14 @@ namespace Nz
|
||||
InstancedRenderable(InstancedRenderable&&) noexcept = default;
|
||||
~InstancedRenderable();
|
||||
|
||||
virtual void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements) const = 0;
|
||||
virtual void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements, const Recti& scissorBox) const = 0;
|
||||
|
||||
inline const Boxf& GetAABB() const;
|
||||
virtual const std::shared_ptr<Material>& GetMaterial(std::size_t i) const = 0;
|
||||
virtual std::size_t GetMaterialCount() const = 0;
|
||||
inline int GetRenderLayer() const;
|
||||
inline const Recti& GetScissorBox() const;
|
||||
|
||||
inline void UpdateRenderLayer(int renderLayer);
|
||||
inline void UpdateScissorBox(const Recti& scissorBox);
|
||||
|
||||
InstancedRenderable& operator=(const InstancedRenderable&) = delete;
|
||||
InstancedRenderable& operator=(InstancedRenderable&&) noexcept = default;
|
||||
@@ -51,7 +49,6 @@ namespace Nz
|
||||
|
||||
private:
|
||||
Boxf m_aabb;
|
||||
Recti m_scissorBox;
|
||||
int m_renderLayer;
|
||||
};
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ namespace Nz
|
||||
{
|
||||
inline InstancedRenderable::InstancedRenderable() :
|
||||
m_aabb(Boxf::Zero()),
|
||||
m_scissorBox(-1, -1, -1, -1),
|
||||
m_renderLayer(0)
|
||||
{
|
||||
}
|
||||
@@ -24,11 +23,6 @@ namespace Nz
|
||||
return m_renderLayer;
|
||||
}
|
||||
|
||||
inline const Recti& InstancedRenderable::GetScissorBox() const
|
||||
{
|
||||
return m_scissorBox;
|
||||
}
|
||||
|
||||
inline void InstancedRenderable::UpdateRenderLayer(int renderLayer)
|
||||
{
|
||||
if (m_renderLayer != renderLayer)
|
||||
@@ -38,15 +32,6 @@ namespace Nz
|
||||
}
|
||||
}
|
||||
|
||||
inline void InstancedRenderable::UpdateScissorBox(const Recti& scissorBox)
|
||||
{
|
||||
if (m_scissorBox != scissorBox)
|
||||
{
|
||||
m_scissorBox = scissorBox;
|
||||
OnElementInvalidated(this);
|
||||
}
|
||||
}
|
||||
|
||||
inline void InstancedRenderable::UpdateAABB(Boxf aabb)
|
||||
{
|
||||
OnAABBUpdate(this, aabb);
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace Nz
|
||||
Model(Model&&) noexcept = default;
|
||||
~Model() = default;
|
||||
|
||||
void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements) const override;
|
||||
void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements, const Recti& scissorBox) const override;
|
||||
|
||||
const std::shared_ptr<RenderBuffer>& GetIndexBuffer(std::size_t subMeshIndex) const;
|
||||
std::size_t GetIndexCount(std::size_t subMeshIndex) const;
|
||||
|
||||
@@ -27,7 +27,7 @@ namespace Nz
|
||||
SlicedSprite(SlicedSprite&&) noexcept = default;
|
||||
~SlicedSprite() = default;
|
||||
|
||||
void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements) const override;
|
||||
void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements, const Recti& scissorBox) const override;
|
||||
|
||||
inline const Color& GetColor() const;
|
||||
inline const Corner& GetBottomRightCorner() const;
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace Nz
|
||||
Sprite(Sprite&&) noexcept = default;
|
||||
~Sprite() = default;
|
||||
|
||||
void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements) const override;
|
||||
void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements, const Recti& scissorBox) const override;
|
||||
|
||||
inline const Color& GetColor() const;
|
||||
inline const Color& GetCornerColor(RectCorner corner) const;
|
||||
|
||||
@@ -28,7 +28,7 @@ namespace Nz
|
||||
TextSprite(TextSprite&&) noexcept = default;
|
||||
~TextSprite() = default;
|
||||
|
||||
void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements) const override;
|
||||
void BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements, const Recti& scissorBox) const override;
|
||||
|
||||
inline void Clear();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user