diff --git a/projects/mesh_shader/resources/shaders/shader.mesh b/projects/mesh_shader/resources/shaders/shader.mesh index f26cef3d850835b0c6a57c4b25a4279c2906570f..e92874393bf075d270e57c5eb4db080e4d79fe25 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 699c40263ffb9a9d3e1e07ce95b9a636fa564ebd..b53c9758e27f955332f79d8db821f80d4c21227e 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 {