diff --git a/projects/mesh_shader/resources/shaders/shader.frag b/projects/mesh_shader/resources/shaders/shader.frag index c3740e2c79da1a34287e1339b3213d2c4721f818..f4f6982f2089e6c8e102027f3b8763bb38f8e59c 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 a120e432441a6f367772ded537a89c1f4b92a414..848fca2ccbcdf94eb9551bfd3aa101710daf29a8 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;