From 2e40ad832ea213462382579af3f7caf78f746f0d Mon Sep 17 00:00:00 2001 From: Lynix Date: Mon, 3 Dec 2012 16:24:47 +0100 Subject: [PATCH] SubMeshs are now valid even when not animated Former-commit-id: 5bd6289d30f4f6ffa1fcaf8d946aa9aba9cf7131 --- include/Nazara/Utility/SkeletalMesh.hpp | 2 ++ include/Nazara/Utility/StaticMesh.hpp | 2 ++ include/Nazara/Utility/SubMesh.hpp | 2 ++ src/Nazara/Utility/Mesh.cpp | 2 ++ src/Nazara/Utility/SkeletalMesh.cpp | 13 +++++++++++++ src/Nazara/Utility/StaticMesh.cpp | 6 ++++++ 6 files changed, 27 insertions(+) diff --git a/include/Nazara/Utility/SkeletalMesh.hpp b/include/Nazara/Utility/SkeletalMesh.hpp index 9ca9bfc90..a2b62e451 100644 --- a/include/Nazara/Utility/SkeletalMesh.hpp +++ b/include/Nazara/Utility/SkeletalMesh.hpp @@ -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(); diff --git a/include/Nazara/Utility/StaticMesh.hpp b/include/Nazara/Utility/StaticMesh.hpp index b6a5e8dd7..7fd14db0a 100644 --- a/include/Nazara/Utility/StaticMesh.hpp +++ b/include/Nazara/Utility/StaticMesh.hpp @@ -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; diff --git a/include/Nazara/Utility/SubMesh.hpp b/include/Nazara/Utility/SubMesh.hpp index 3d4ff7d61..6034fdada 100644 --- a/include/Nazara/Utility/SubMesh.hpp +++ b/include/Nazara/Utility/SubMesh.hpp @@ -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; diff --git a/src/Nazara/Utility/Mesh.cpp b/src/Nazara/Utility/Mesh.cpp index 81861ce04..906a34b9a 100644 --- a/src/Nazara/Utility/Mesh.cpp +++ b/src/Nazara/Utility/Mesh.cpp @@ -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); diff --git a/src/Nazara/Utility/SkeletalMesh.cpp b/src/Nazara/Utility/SkeletalMesh.cpp index fd6fd8c9f..1c4ab816a 100644 --- a/src/Nazara/Utility/SkeletalMesh.cpp +++ b/src/Nazara/Utility/SkeletalMesh.cpp @@ -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 diff --git a/src/Nazara/Utility/StaticMesh.cpp b/src/Nazara/Utility/StaticMesh.cpp index bde9bc596..9606f465e 100644 --- a/src/Nazara/Utility/StaticMesh.cpp +++ b/src/Nazara/Utility/StaticMesh.cpp @@ -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())