SubMeshs are now valid even when not animated

Former-commit-id: 5bd6289d30f4f6ffa1fcaf8d946aa9aba9cf7131
This commit is contained in:
Lynix 2012-12-03 16:24:47 +01:00
parent 817119933c
commit 2e40ad832e
6 changed files with 27 additions and 0 deletions

View File

@ -35,6 +35,8 @@ class NAZARA_API NzSkeletalMesh final : public NzSubMesh
bool Create(NzVertexBuffer* vertexBuffer, unsigned int weightCount);
void Destroy();
void Finish();
const NzAxisAlignedBox& GetAABB() const;
nzAnimationType GetAnimationType() const final;
void* GetBindPoseBuffer();

View File

@ -20,6 +20,8 @@ class NAZARA_API NzStaticMesh final : public NzSubMesh, NzResourceListener
bool Create(NzVertexBuffer* vertexBuffer);
void Destroy();
void Finish();
bool GenerateAABB();
const NzAxisAlignedBox& GetAABB() const override;

View File

@ -25,6 +25,8 @@ class NAZARA_API NzSubMesh : public NzResource
NzSubMesh(const NzMesh* parent);
virtual ~NzSubMesh();
virtual void Finish() = 0; ///DOC: Mets le mesh dans sa position d'origine et calcule son AABB
virtual const NzAxisAlignedBox& GetAABB() const = 0;
virtual nzAnimationType GetAnimationType() const = 0;
virtual const NzIndexBuffer* GetIndexBuffer() const = 0;

View File

@ -73,6 +73,7 @@ bool NzMesh::AddSubMesh(NzSubMesh* subMesh)
#endif
subMesh->AddResourceListener(this, m_impl->subMeshes.size());
subMesh->Finish();
m_impl->aabb.SetNull(); // On invalide l'AABB
m_impl->subMeshes.push_back(subMesh);
@ -118,6 +119,7 @@ bool NzMesh::AddSubMesh(const NzString& identifier, NzSubMesh* subMesh)
int index = m_impl->subMeshes.size();
subMesh->AddResourceListener(this, index);
subMesh->Finish();
m_impl->aabb.SetNull(); // On invalide l'AABB
m_impl->subMeshes.push_back(subMesh);

View File

@ -76,6 +76,19 @@ void NzSkeletalMesh::Destroy()
}
}
void NzSkeletalMesh::Finish()
{
#if NAZARA_UTILITY_SAFE
if (!m_impl)
{
NazaraError("Skeletal mesh not created");
return;
}
#endif
Skin();
}
const NzAxisAlignedBox& NzSkeletalMesh::GetAABB() const
{
#if NAZARA_UTILITY_SAFE

View File

@ -53,6 +53,12 @@ void NzStaticMesh::Destroy()
}
}
void NzStaticMesh::Finish()
{
// La seule chose à faire ici est de calculer l'AABB
GenerateAABB();
}
bool NzStaticMesh::GenerateAABB()
{
if (!m_aabb.IsNull())