/* Copyright (c) 2021, Sascha Willems * * SPDX-License-Identifier: MIT * */ #version 450 #extension GL_EXT_mesh_shader : require layout (binding = 0) uniform UBO { mat4 projection; mat4 model; mat4 view; } ubo; layout (binding = 1) buffer VERTEX { vec4 pos[]; } vertex; layout (binding = 2) buffer INDEX { uint index[]; } index; layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in; layout(triangles, max_vertices = 3, max_primitives = 1) out; layout(location = 0) out VertexOutput { vec4 color; } vertexOutput[]; const vec4[3] colors = { vec4(0.0, 1.0, 0.0, 1.0), vec4(0.0, 0.0, 1.0, 1.0), vec4(1.0, 0.0, 0.0, 1.0) }; void main() { uint iid = gl_LocalInvocationID.x; SetMeshOutputsEXT(3, 1); mat4 mvp = ubo.projection * ubo.view * ubo.model; gl_MeshVerticesEXT[0].gl_Position = mvp * vertex.pos[0]; gl_MeshVerticesEXT[1].gl_Position = mvp * vertex.pos[1]; gl_MeshVerticesEXT[2].gl_Position = mvp * vertex.pos[2]; vertexOutput[0].color = colors[0]; vertexOutput[1].color = colors[1]; vertexOutput[2].color = colors[2]; gl_PrimitiveTriangleIndicesEXT[gl_LocalInvocationIndex] = uvec3(0, 1, 2); }