Enabled Frustum culling for Sprites
Former-commit-id: 5c5bf7da97f10b43c204bb336c2e979899f506d0
This commit is contained in:
parent
6556acfa32
commit
198d13be20
|
|
@ -34,12 +34,16 @@ class NAZARA_API NzSprite : public NzSceneNode
|
|||
|
||||
private:
|
||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
||||
void Invalidate() override;
|
||||
void Register() override;
|
||||
void Unregister() override;
|
||||
void UpdateBoundingVolume() const;
|
||||
|
||||
mutable NzBoundingVolumef m_boundingVolume;
|
||||
NzMaterialRef m_material;
|
||||
NzRectf m_textureCoords;
|
||||
NzVector2f m_size;
|
||||
NzMaterialRef m_material;
|
||||
mutable bool m_boundingVolumeUpdated;
|
||||
};
|
||||
|
||||
#endif // NAZARA_SPRITE_HPP
|
||||
|
|
|
|||
|
|
@ -6,24 +6,30 @@
|
|||
#include <Nazara/Graphics/Debug.hpp>
|
||||
|
||||
NzSprite::NzSprite() :
|
||||
m_boundingVolume(NzBoundingVolumef::Null()),
|
||||
m_textureCoords(0.f, 0.f, 1.f, 1.f),
|
||||
m_size(64.f, 64.f)
|
||||
m_size(64.f, 64.f),
|
||||
m_boundingVolumeUpdated(true)
|
||||
{
|
||||
}
|
||||
|
||||
NzSprite::NzSprite(const NzSprite& sprite) :
|
||||
NzSceneNode(sprite),
|
||||
m_boundingVolume(sprite.m_boundingVolume),
|
||||
m_material(sprite.m_material),
|
||||
m_textureCoords(sprite.m_textureCoords),
|
||||
m_size(sprite.m_size),
|
||||
m_material(sprite.m_material)
|
||||
m_boundingVolumeUpdated(sprite.m_boundingVolumeUpdated)
|
||||
{
|
||||
}
|
||||
|
||||
NzSprite::NzSprite(NzSprite&& sprite) :
|
||||
NzSceneNode(sprite),
|
||||
m_boundingVolume(sprite.m_boundingVolume),
|
||||
m_material(std::move(sprite.m_material)),
|
||||
m_textureCoords(sprite.m_textureCoords),
|
||||
m_size(sprite.m_size),
|
||||
m_material(std::move(sprite.m_material))
|
||||
m_boundingVolumeUpdated(sprite.m_boundingVolumeUpdated)
|
||||
{
|
||||
}
|
||||
|
||||
|
|
@ -68,6 +74,7 @@ void NzSprite::SetMaterial(NzMaterial* material)
|
|||
void NzSprite::SetSize(const NzVector2f& size)
|
||||
{
|
||||
m_size = size;
|
||||
m_boundingVolume.MakeNull();
|
||||
}
|
||||
|
||||
void NzSprite::SetTextureCoords(const NzRectf& coords)
|
||||
|
|
@ -101,8 +108,17 @@ void NzSprite::SetTextureRect(const NzRectui& rect)
|
|||
|
||||
bool NzSprite::FrustumCull(const NzFrustumf& frustum)
|
||||
{
|
||||
///TODO: Effectuer un vrai test
|
||||
return true;
|
||||
if (!m_boundingVolumeUpdated)
|
||||
UpdateBoundingVolume();
|
||||
|
||||
return frustum.Contains(m_boundingVolume);
|
||||
}
|
||||
|
||||
void NzSprite::Invalidate()
|
||||
{
|
||||
NzSceneNode::Invalidate();
|
||||
|
||||
m_boundingVolumeUpdated = false;
|
||||
}
|
||||
|
||||
void NzSprite::Register()
|
||||
|
|
@ -112,3 +128,15 @@ void NzSprite::Register()
|
|||
void NzSprite::Unregister()
|
||||
{
|
||||
}
|
||||
|
||||
void NzSprite::UpdateBoundingVolume() const
|
||||
{
|
||||
if (m_boundingVolume.IsNull())
|
||||
m_boundingVolume.Set(-m_size.x*0.5f, -m_size.y*0.5f, 0, m_size.x, m_size.y, 1.f);
|
||||
|
||||
if (!m_transformMatrixUpdated)
|
||||
UpdateTransformMatrix();
|
||||
|
||||
m_boundingVolume.Update(m_transformMatrix);
|
||||
m_boundingVolumeUpdated = true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue