From 8743d28ec54df8d303097ebd0c7741f6e882c21f Mon Sep 17 00:00:00 2001 From: Daniel Hritzkiv Date: Mon, 18 Sep 2017 12:16:30 -0400 Subject: [PATCH] SImplify mesh merging code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit My assumption that primitives of different types (modes) can’t be in the same mesh was incorrect. --- code/glTF2Exporter.cpp | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/code/glTF2Exporter.cpp b/code/glTF2Exporter.cpp index 888721c41..576e8c723 100644 --- a/code/glTF2Exporter.cpp +++ b/code/glTF2Exporter.cpp @@ -755,31 +755,18 @@ void glTF2Exporter::MergeMeshes() //skip if it's 1 or less meshes per node if (nMeshes > 1) { Ref firstMesh = node->meshes.at(0); - Mesh::Primitive firstPrimitive = firstMesh->primitives.at(0); //loop backwards to allow easy removal of a mesh from a node once it's merged for (unsigned int m = nMeshes - 1; m >= 1; --m) { Ref mesh = node->meshes.at(m); - bool primitivesPushed = false; - for (unsigned int p = 0; p < mesh->primitives.size(); ++p) { - Mesh::Primitive primitive = mesh->primitives.at(p); + firstMesh->primitives.insert(firstMesh->primitives.end(), mesh->primitives.begin(), mesh->primitives.end()); - if (firstPrimitive.mode == primitive.mode) { - firstMesh->primitives.push_back(primitive); - primitivesPushed = true; - } - } - - if (primitivesPushed) { - //remove the merged meshes from the node - node->meshes.erase(node->meshes.begin() + m); - } + node->meshes.erase(node->meshes.begin() + m); } //since we were looping backwards, reverse the order of merged primitives to their original order std::reverse(firstMesh->primitives.begin() + 1, firstMesh->primitives.end()); - } } }