diff --git a/include/Nazara/Core/VertexDeclaration.hpp b/include/Nazara/Core/VertexDeclaration.hpp index 5ea360fc0..e5c919d7a 100644 --- a/include/Nazara/Core/VertexDeclaration.hpp +++ b/include/Nazara/Core/VertexDeclaration.hpp @@ -53,6 +53,7 @@ namespace Nz VertexDeclaration& operator=(VertexDeclaration&&) = delete; static inline const std::shared_ptr& Get(VertexLayout layout); + static inline const VertexLayout Find(const std::shared_ptr& declaration); static bool IsTypeSupported(ComponentType type); struct Component diff --git a/include/Nazara/Core/VertexDeclaration.inl b/include/Nazara/Core/VertexDeclaration.inl index 752990b9e..571f28999 100644 --- a/include/Nazara/Core/VertexDeclaration.inl +++ b/include/Nazara/Core/VertexDeclaration.inl @@ -75,5 +75,15 @@ namespace Nz NazaraAssert(layout <= VertexLayout::Max, "Vertex layout out of enum"); return s_declarations[layout]; } + + inline const VertexLayout VertexDeclaration::Find(const std::shared_ptr& declaration) + { + for (size_t i = 0; i < (size_t)VertexLayout::Max; ++i) + if (s_declarations[(VertexLayout)i].get() == declaration.get()) + return (VertexLayout)i; + + NazaraAssert(declaration, "Invalid declaration"); + return VertexLayout::Max; + } }