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