diff --git a/include/Nazara/Graphics/ParticleDeclaration.hpp b/include/Nazara/Graphics/ParticleDeclaration.hpp index 0edfba85f..278d25961 100644 --- a/include/Nazara/Graphics/ParticleDeclaration.hpp +++ b/include/Nazara/Graphics/ParticleDeclaration.hpp @@ -15,6 +15,7 @@ #include #include #include +#include namespace Nz { @@ -46,6 +47,7 @@ namespace Nz static ParticleDeclaration* Get(ParticleLayout layout); static bool IsTypeSupported(ComponentType type); + template static ParticleDeclarationRef New(Args&&... args); // Signals: NazaraSignal(OnParticleDeclarationRelease, const ParticleDeclaration* /*particleDeclaration*/); @@ -68,12 +70,14 @@ namespace Nz */ }; - Component m_components[ParticleComponent_Max + 1]; + std::array m_components; unsigned int m_stride; - static ParticleDeclaration s_declarations[ParticleLayout_Max + 1]; + static std::array s_declarations; static ParticleDeclarationLibrary::LibraryMap s_library; }; } +#include + #endif // NAZARA_PARTICLEDECLARATION_HPP diff --git a/include/Nazara/Graphics/ParticleDeclaration.inl b/include/Nazara/Graphics/ParticleDeclaration.inl new file mode 100644 index 000000000..27cd92a22 --- /dev/null +++ b/include/Nazara/Graphics/ParticleDeclaration.inl @@ -0,0 +1,18 @@ +// Copyright (C) 2016 Jérôme Leclercq +// This file is part of the "Nazara Engine - Graphics module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +namespace Nz +{ + template + ParticleDeclarationRef ParticleDeclaration::New(Args&&... args) + { + std::unique_ptr object(new ParticleDeclaration(std::forward(args)...)); + return object.release(); + } +} + +#include diff --git a/include/Nazara/Utility/VertexDeclaration.hpp b/include/Nazara/Utility/VertexDeclaration.hpp index f5dea6457..8c1e4b55a 100644 --- a/include/Nazara/Utility/VertexDeclaration.hpp +++ b/include/Nazara/Utility/VertexDeclaration.hpp @@ -14,6 +14,7 @@ #include #include #include +#include namespace Nz { @@ -69,14 +70,14 @@ namespace Nz */ }; - Component m_components[VertexComponent_Max+1]; + std::array m_components; std::size_t m_stride; - static VertexDeclaration s_declarations[VertexLayout_Max+1]; + static std::array s_declarations; static VertexDeclarationLibrary::LibraryMap s_library; }; } -#include +#include #endif // NAZARA_VERTEXDECLARATION_HPP diff --git a/src/Nazara/Graphics/ParticleDeclaration.cpp b/src/Nazara/Graphics/ParticleDeclaration.cpp index ecd09c752..62cf321ab 100644 --- a/src/Nazara/Graphics/ParticleDeclaration.cpp +++ b/src/Nazara/Graphics/ParticleDeclaration.cpp @@ -38,9 +38,9 @@ namespace Nz ParticleDeclaration::ParticleDeclaration(const ParticleDeclaration& declaration) : RefCounted(), + m_components(declaration.m_components), m_stride(declaration.m_stride) { - std::memcpy(m_components, declaration.m_components, sizeof(Component) * (ParticleComponent_Max + 1)); } /*! @@ -205,7 +205,7 @@ namespace Nz ParticleDeclaration& ParticleDeclaration::operator=(const ParticleDeclaration& declaration) { - std::memcpy(m_components, declaration.m_components, sizeof(Component) * (ParticleComponent_Max + 1)); + m_components = declaration.m_components; m_stride = declaration.m_stride; return *this; @@ -222,13 +222,7 @@ namespace Nz ParticleDeclaration* ParticleDeclaration::Get(ParticleLayout layout) { - #ifdef NAZARA_DEBUG - if (layout > ParticleLayout_Max) - { - NazaraError("Particle layout out of enum"); - return nullptr; - } - #endif + NazaraAssert(layout <= ParticleLayout_Max, "Particle layout out of enum"); return &s_declarations[layout]; } @@ -338,6 +332,6 @@ namespace Nz ParticleDeclarationLibrary::Uninitialize(); } - ParticleDeclaration ParticleDeclaration::s_declarations[ParticleLayout_Max + 1]; + std::array ParticleDeclaration::s_declarations; ParticleDeclarationLibrary::LibraryMap ParticleDeclaration::s_library; } diff --git a/src/Nazara/Utility/Formats/OBJSaver.cpp b/src/Nazara/Utility/Formats/OBJSaver.cpp index 9a79638bc..baf54e44b 100644 --- a/src/Nazara/Utility/Formats/OBJSaver.cpp +++ b/src/Nazara/Utility/Formats/OBJSaver.cpp @@ -120,7 +120,6 @@ namespace Nz MTLParser::Material* material = mtlFormat.AddMaterial(name); - bool bValue; String strVal; if (matData.HasParameter(MaterialData::CustomDefined)) { diff --git a/src/Nazara/Utility/VertexDeclaration.cpp b/src/Nazara/Utility/VertexDeclaration.cpp index 998f12f8b..945888406 100644 --- a/src/Nazara/Utility/VertexDeclaration.cpp +++ b/src/Nazara/Utility/VertexDeclaration.cpp @@ -22,9 +22,9 @@ namespace Nz VertexDeclaration::VertexDeclaration(const VertexDeclaration& declaration) : RefCounted(), + m_components(declaration.m_components), m_stride(declaration.m_stride) { - std::memcpy(m_components, declaration.m_components, sizeof(Component)*(VertexComponent_Max+1)); } VertexDeclaration::~VertexDeclaration() @@ -133,7 +133,7 @@ namespace Nz VertexDeclaration& VertexDeclaration::operator=(const VertexDeclaration& declaration) { - std::memcpy(m_components, declaration.m_components, sizeof(Component)*(VertexComponent_Max+1)); + m_components = declaration.m_components; m_stride = declaration.m_stride; return *this; @@ -141,13 +141,7 @@ namespace Nz VertexDeclaration* VertexDeclaration::Get(VertexLayout layout) { - #ifdef NAZARA_DEBUG - if (layout > VertexLayout_Max) - { - NazaraError("Vertex layout out of enum"); - return nullptr; - } - #endif + NazaraAssert(layout <= VertexLayout_Max, "Vertex layout out of enum"); return &s_declarations[layout]; } @@ -301,6 +295,6 @@ namespace Nz VertexDeclarationLibrary::Uninitialize(); } - VertexDeclaration VertexDeclaration::s_declarations[VertexLayout_Max+1]; + std::array VertexDeclaration::s_declarations; VertexDeclarationLibrary::LibraryMap VertexDeclaration::s_library; }