Graphics/InstancedRenderable: Replace constructor AABB with UpdateAABB method

This commit is contained in:
Jérôme Leclercq 2021-11-21 17:14:39 +01:00
parent 57d39f7eeb
commit 2a8568f2ac
6 changed files with 31 additions and 13 deletions

View File

@ -23,7 +23,7 @@ namespace Nz
class NAZARA_GRAPHICS_API InstancedRenderable
{
public:
inline InstancedRenderable(const Boxf& aabb);
inline InstancedRenderable();
InstancedRenderable(const InstancedRenderable&) = delete;
InstancedRenderable(InstancedRenderable&&) noexcept = default;
~InstancedRenderable();
@ -37,8 +37,12 @@ namespace Nz
InstancedRenderable& operator=(const InstancedRenderable&) = delete;
InstancedRenderable& operator=(InstancedRenderable&&) noexcept = default;
NazaraSignal(OnAABBUpdate, InstancedRenderable* /*instancedRenderable*/, const Boxf& /*aabb*/);
NazaraSignal(OnMaterialInvalidated, InstancedRenderable* /*instancedRenderable*/, std::size_t /*materialIndex*/, const std::shared_ptr<Material>& /*newMaterial*/);
protected:
inline void UpdateAABB(Boxf aabb);
private:
Boxf m_aabb;
};

View File

@ -7,8 +7,8 @@
namespace Nz
{
inline InstancedRenderable::InstancedRenderable(const Boxf& aabb) :
m_aabb(aabb)
inline InstancedRenderable::InstancedRenderable() :
m_aabb(Boxf::Zero())
{
}
@ -16,6 +16,12 @@ namespace Nz
{
return m_aabb;
}
inline void InstancedRenderable::UpdateAABB(Boxf aabb)
{
OnAABBUpdate(this, aabb);
m_aabb = aabb;
}
}
#include <Nazara/Graphics/DebugOff.hpp>

View File

@ -39,25 +39,36 @@ namespace Nz
VertexStruct_XYZ_Color_UV* vertices = m_vertices.data();
Vector3f origin = Vector3f::Zero();
Boxf aabb;
vertices->color = m_color * m_cornerColor[UnderlyingCast(RectCorner::LeftTop)];
vertices->position = Vector3f(-origin);
vertices->uv = m_textureCoords.GetCorner(RectCorner::LeftTop);
vertices++;
aabb.Set(vertices->position);
vertices++;
vertices->color = m_color * m_cornerColor[UnderlyingCast(RectCorner::RightTop)];
vertices->position = m_size.x * Vector3f::Right() - origin;
vertices->uv = m_textureCoords.GetCorner(RectCorner::RightTop);
vertices++;
aabb.ExtendTo(vertices->position);
vertices++;
vertices->color = m_color * m_cornerColor[UnderlyingCast(RectCorner::LeftBottom)];
vertices->position = m_size.y * Vector3f::Down() - origin;
vertices->uv = m_textureCoords.GetCorner(RectCorner::LeftBottom);
vertices++;
aabb.ExtendTo(vertices->position);
vertices++;
vertices->color = m_color * m_cornerColor[UnderlyingCast(RectCorner::RightBottom)];
vertices->position = m_size.x * Vector3f::Right() + m_size.y * Vector3f::Down() - origin;
vertices->uv = m_textureCoords.GetCorner(RectCorner::RightBottom);
aabb.ExtendTo(vertices->position);
UpdateAABB(aabb);
}
}

View File

@ -14,7 +14,6 @@
namespace Nz
{
Model::Model(std::shared_ptr<GraphicalMesh> graphicalMesh, const Boxf& aabb) :
InstancedRenderable(aabb),
m_graphicalMesh(std::move(graphicalMesh))
{
m_submeshes.reserve(m_graphicalMesh->GetSubMeshCount());
@ -29,6 +28,8 @@ namespace Nz
}
};
}
UpdateAABB(aabb);
}
void Model::BuildElement(std::size_t passIndex, const WorldInstance& worldInstance, std::vector<std::unique_ptr<RenderElement>>& elements) const

View File

@ -11,7 +11,6 @@
namespace Nz
{
Sprite::Sprite(std::shared_ptr<Material> material) :
InstancedRenderable(Nz::Boxf(-1000.f, -1000.f, -1000.f, 2000.f, 2000.f, 2000.f)),
m_material(std::move(material)),
m_color(Color::White),
m_textureCoords(0.f, 0.f, 1.f, 1.f),

View File

@ -13,7 +13,7 @@
namespace Nz
{
TextSprite::TextSprite(std::shared_ptr<Material> material) :
InstancedRenderable(Nz::Boxf(-10000.f, -10000.f, -10000.f, 20000.f, 20000.f, 20000.f)),
InstancedRenderable(),
m_material(std::move(material))
{
}
@ -208,10 +208,7 @@ namespace Nz
indices->count++;
}
/*m_localBounds = drawer.GetBounds();
InvalidateBoundingVolume();
InvalidateInstanceData(0);*/
UpdateAABB(bounds);
clearOnFail.Reset();
}