From 9f2a390b5ee0e378d44c99aa84a4323b7113f7d2 Mon Sep 17 00:00:00 2001
From: Alexander Gauggel <agauggel@uni-koblenz.de>
Date: Tue, 13 Jul 2021 17:29:18 +0200
Subject: [PATCH] [#87] Fix mesh shader data vertex order

---
 projects/mesh_shader/resources/shaders/shader.mesh |  2 +-
 projects/mesh_shader/src/main.cpp                  | 11 +++++------
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/projects/mesh_shader/resources/shaders/shader.mesh b/projects/mesh_shader/resources/shaders/shader.mesh
index f26cef3d..e9287439 100644
--- a/projects/mesh_shader/resources/shaders/shader.mesh
+++ b/projects/mesh_shader/resources/shaders/shader.mesh
@@ -63,7 +63,7 @@ void main()	{
     
         gl_MeshVerticesNV[workIndex].gl_Position    = mvp * vec4(vertex.position, 1);
         passNormal[workIndex]                       = vertex.normal;
-        // passTaskIndex[workIndex]                    = IN.meshletIndex;
+        passTaskIndex[workIndex]                    = IN.meshletIndex;
     }
     
     // set local indices
diff --git a/projects/mesh_shader/src/main.cpp b/projects/mesh_shader/src/main.cpp
index 699c4026..b53c9758 100644
--- a/projects/mesh_shader/src/main.cpp
+++ b/projects/mesh_shader/src/main.cpp
@@ -80,7 +80,8 @@ MeshShaderModelData createMeshShaderModelData(
 		meshlet.indexOffset  = data.localIndices.size();
 		meshlet.vertexOffset = data.vertices.size();
 
-        std::map<uint32_t, uint32_t> globalToLocalIndexMap;
+		std::map<uint32_t, uint32_t> globalToLocalIndexMap;
+		std::vector<uint32_t> globalIndicesOrdered;
 
 		while (true) {
 
@@ -119,6 +120,7 @@ MeshShaderModelData createMeshShaderModelData(
 				else {
 					localIndex = globalToLocalIndexMap.size();
 					globalToLocalIndexMap[globalIndex] = localIndex;
+					globalIndicesOrdered.push_back(globalIndex);
 				}
 
 				data.localIndices.push_back(localIndex);
@@ -129,10 +131,7 @@ MeshShaderModelData createMeshShaderModelData(
 			meshlet.vertexCount += vertexCountToAdd;
 		}
 
-		for (const auto& iterator : globalToLocalIndexMap) {
-			const uint32_t globalIndex = iterator.first;
-			const uint32_t localIndex  = iterator.second;
-
+		for (const uint32_t globalIndex : globalIndicesOrdered) {
 			const Vertex v = inVertices[globalIndex];
 			data.vertices.push_back(v);
 		}
@@ -405,7 +404,7 @@ int main(int argc, const char** argv) {
 				renderPass,
 				meshShaderPipeline,
 				pushConstantData,
-				{ vkcv::MeshShaderDrawcall({descriptorUsage}, meshShaderModelData.meshlets.size()) },
+				{ vkcv::MeshShaderDrawcall({descriptorUsage}, meshShaderModelData.meshlets.size())},
 				{ renderTargets });
 		}
 		else {
-- 
GitLab