diff options
Diffstat (limited to 'gfx')
-rw-r--r-- | gfx/models/obj.h | 3 | ||||
-rw-r--r-- | gfx/models/obj.impl.cpp | 19 |
2 files changed, 18 insertions, 4 deletions
diff --git a/gfx/models/obj.h b/gfx/models/obj.h index 2921e34..71733fe 100644 --- a/gfx/models/obj.h +++ b/gfx/models/obj.h @@ -12,6 +12,7 @@ #include <vector> class Mesh; +class Vertex; class ObjParser : yyFlexLexer { public: @@ -38,6 +39,8 @@ public: std::vector<Object> objects; glm::length_t axis {0}; + using NamedMeshData = std::pair<std::string, std::pair<std::vector<Vertex>, std::vector<unsigned int>>>; + [[nodiscard]] std::vector<NamedMeshData> createMeshData() const; using NamedMesh = std::pair<std::string, std::shared_ptr<const Mesh>>; [[nodiscard]] std::vector<NamedMesh> createMeshes() const; }; diff --git a/gfx/models/obj.impl.cpp b/gfx/models/obj.impl.cpp index 0c1303a..5ac15ac 100644 --- a/gfx/models/obj.impl.cpp +++ b/gfx/models/obj.impl.cpp @@ -1,6 +1,6 @@ #include "obj.h" #include <algorithm> -#include <gfx/models/mesh.h> +#include <gfx/models/mesh.h> // IWYU pragma: keep #include <gfx/models/vertex.hpp> #include <glm/glm.hpp> #include <iterator> @@ -12,8 +12,19 @@ std::vector<ObjParser::NamedMesh> ObjParser::createMeshes() const { std::vector<ObjParser::NamedMesh> out; + const auto data {createMeshData()}; + std::transform(data.begin(), data.end(), std::back_inserter(out), [](auto && obj) { + return std::make_pair(obj.first, std::make_shared<Mesh>(obj.second.first, obj.second.second)); + }); + return out; +} + +std::vector<ObjParser::NamedMeshData> +ObjParser::createMeshData() const +{ + std::vector<ObjParser::NamedMeshData> out; out.reserve(objects.size()); - for (const auto & obj : objects) { + std::transform(objects.begin(), objects.end(), std::back_inserter(out), [this](auto && obj) { std::vector<Vertex> overtices; std::vector<ObjParser::FaceElement> vertexOrder; std::vector<unsigned int> indices; @@ -36,7 +47,7 @@ ObjParser::createMeshes() const f(idx - 1); } } - out.emplace_back(obj.first, std::make_shared<Mesh>(overtices, indices)); - } + return std::make_pair(obj.first, std::make_pair(overtices, indices)); + }); return out; } |