From 55937807aeca2b32185241d098d4b494d7e0f366 Mon Sep 17 00:00:00 2001 From: Alexander Gauggel <agauggel@uni-koblenz.de> Date: Tue, 13 Jul 2021 11:47:49 +0200 Subject: [PATCH] [#87] Add task index visualisation --- .../mesh_shader/resources/shaders/shader.frag | 25 ++++++++++++++++++- .../mesh_shader/resources/shaders/shader.mesh | 3 +++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/projects/mesh_shader/resources/shaders/shader.frag b/projects/mesh_shader/resources/shaders/shader.frag index c3740e2c..f4f6982f 100644 --- a/projects/mesh_shader/resources/shaders/shader.frag +++ b/projects/mesh_shader/resources/shaders/shader.frag @@ -2,8 +2,31 @@ #extension GL_ARB_separate_shader_objects : enable layout(location = 0) in vec3 passNormal; +layout(location = 1) in flat uint passTaskIndex; layout(location = 0) out vec3 outColor; +uint lowbias32(uint x) +{ + x ^= x >> 16; + x *= 0x7feb352dU; + x ^= x >> 15; + x *= 0x846ca68bU; + x ^= x >> 16; + return x; +} + +float hashToFloat(uint hash){ + return (hash % 255) / 255.f; +} + +vec3 colorFromIndex(uint i){ + return vec3( + hashToFloat(lowbias32(i+0)), + hashToFloat(lowbias32(i+1)), + hashToFloat(lowbias32(i+2))); +} + void main() { - outColor = normalize(passNormal) * 0.5 +0.5; + outColor = normalize(passNormal) * 0.5 + 0.5; + outColor = colorFromIndex(passTaskIndex); } \ No newline at end of file diff --git a/projects/mesh_shader/resources/shaders/shader.mesh b/projects/mesh_shader/resources/shaders/shader.mesh index a120e432..848fca2c 100644 --- a/projects/mesh_shader/resources/shaders/shader.mesh +++ b/projects/mesh_shader/resources/shaders/shader.mesh @@ -12,6 +12,7 @@ layout( push_constant ) uniform constants{ }; layout(location = 0) out vec3 passNormal[]; +layout(location = 1) out uint passTaskIndex[]; struct Vertex { @@ -45,8 +46,10 @@ void main() { vec3 inPos = vertices[index].position; vec3 inNormal = vertices[index].normal; + gl_MeshVerticesNV[workIndex].gl_Position = mvp * vec4(inPos, 1); passNormal[workIndex] = inNormal; + passTaskIndex[workIndex] = previousMeshGroupCount; if(gl_LocalInvocationID.x == 0){ gl_PrimitiveCountNV = 10; -- GitLab