summary refs log tree commit diff
path: root/src/GFX/Util/MeshBuilder.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/GFX/Util/MeshBuilder.hpp')
-rw-r--r--src/GFX/Util/MeshBuilder.hpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/GFX/Util/MeshBuilder.hpp b/src/GFX/Util/MeshBuilder.hpp
index e3caa8c..c174b8c 100644
--- a/src/GFX/Util/MeshBuilder.hpp
+++ b/src/GFX/Util/MeshBuilder.hpp
@@ -2,6 +2,7 @@
 
 #include "../../Common/Sizes.hpp"
 #include "../../Math/Common.hpp"
+#include "Primitives.hpp"
 #include <vector>
 
 namespace MC::GFX::Util {
@@ -53,6 +54,18 @@ public:
         m_indices.insert(m_indices.end(), from.begin(), from.end());
     }
 
+    template<uint PN>
+    void primitive(const Primitives::Primitive<PN>& primitive) {
+        decltype(primitive.indices) relativized_indices{};
+        for (Int i = 0; i < primitive.indices.size(); i++) {
+            relativized_indices[i] = primitive.indices[i] + m_positions.size();
+        }
+
+        positions(primitive.positions);
+        attributes<0>(primitive.normals);
+        indices(relativized_indices);
+    }
+
     Mesh mesh() {
         return mesh(std::make_index_sequence<AttributesN>{});
     }