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:
|
private:
|
||||||
bool FrustumCull(const NzFrustumf& frustum) override;
|
bool FrustumCull(const NzFrustumf& frustum) override;
|
||||||
|
void Invalidate() override;
|
||||||
void Register() override;
|
void Register() override;
|
||||||
void Unregister() override;
|
void Unregister() override;
|
||||||
|
void UpdateBoundingVolume() const;
|
||||||
|
|
||||||
|
mutable NzBoundingVolumef m_boundingVolume;
|
||||||
|
NzMaterialRef m_material;
|
||||||
NzRectf m_textureCoords;
|
NzRectf m_textureCoords;
|
||||||
NzVector2f m_size;
|
NzVector2f m_size;
|
||||||
NzMaterialRef m_material;
|
mutable bool m_boundingVolumeUpdated;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // NAZARA_SPRITE_HPP
|
#endif // NAZARA_SPRITE_HPP
|
||||||
|
|
|
||||||
|
|
@ -6,24 +6,30 @@
|
||||||
#include <Nazara/Graphics/Debug.hpp>
|
#include <Nazara/Graphics/Debug.hpp>
|
||||||
|
|
||||||
NzSprite::NzSprite() :
|
NzSprite::NzSprite() :
|
||||||
|
m_boundingVolume(NzBoundingVolumef::Null()),
|
||||||
m_textureCoords(0.f, 0.f, 1.f, 1.f),
|
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) :
|
NzSprite::NzSprite(const NzSprite& sprite) :
|
||||||
NzSceneNode(sprite),
|
NzSceneNode(sprite),
|
||||||
|
m_boundingVolume(sprite.m_boundingVolume),
|
||||||
|
m_material(sprite.m_material),
|
||||||
m_textureCoords(sprite.m_textureCoords),
|
m_textureCoords(sprite.m_textureCoords),
|
||||||
m_size(sprite.m_size),
|
m_size(sprite.m_size),
|
||||||
m_material(sprite.m_material)
|
m_boundingVolumeUpdated(sprite.m_boundingVolumeUpdated)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
NzSprite::NzSprite(NzSprite&& sprite) :
|
NzSprite::NzSprite(NzSprite&& sprite) :
|
||||||
NzSceneNode(sprite),
|
NzSceneNode(sprite),
|
||||||
|
m_boundingVolume(sprite.m_boundingVolume),
|
||||||
|
m_material(std::move(sprite.m_material)),
|
||||||
m_textureCoords(sprite.m_textureCoords),
|
m_textureCoords(sprite.m_textureCoords),
|
||||||
m_size(sprite.m_size),
|
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)
|
void NzSprite::SetSize(const NzVector2f& size)
|
||||||
{
|
{
|
||||||
m_size = size;
|
m_size = size;
|
||||||
|
m_boundingVolume.MakeNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
void NzSprite::SetTextureCoords(const NzRectf& coords)
|
void NzSprite::SetTextureCoords(const NzRectf& coords)
|
||||||
|
|
@ -101,8 +108,17 @@ void NzSprite::SetTextureRect(const NzRectui& rect)
|
||||||
|
|
||||||
bool NzSprite::FrustumCull(const NzFrustumf& frustum)
|
bool NzSprite::FrustumCull(const NzFrustumf& frustum)
|
||||||
{
|
{
|
||||||
///TODO: Effectuer un vrai test
|
if (!m_boundingVolumeUpdated)
|
||||||
return true;
|
UpdateBoundingVolume();
|
||||||
|
|
||||||
|
return frustum.Contains(m_boundingVolume);
|
||||||
|
}
|
||||||
|
|
||||||
|
void NzSprite::Invalidate()
|
||||||
|
{
|
||||||
|
NzSceneNode::Invalidate();
|
||||||
|
|
||||||
|
m_boundingVolumeUpdated = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NzSprite::Register()
|
void NzSprite::Register()
|
||||||
|
|
@ -112,3 +128,15 @@ void NzSprite::Register()
|
||||||
void NzSprite::Unregister()
|
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