#version 430 core layout (local_size_x = 1) in; struct Vertex { vec3 pos; vec3 norm; vec2 uv; }; layout(std430, binding=0) readonly buffer Vertices { Vertex vertices[]; }; layout(std430, binding=1) readonly buffer EdgeIndices { unsigned int indices[][4]; }; layout(std430, binding=2) writeonly buffer Output { Vertex edges[]; }; void main(){ edges[gl_GlobalInvocationID.x].norm = vec3(0.0, 0.0, 0.0); edges[gl_GlobalInvocationID.x].uv = vec2(0.0, 0.0); edges[gl_GlobalInvocationID.x].pos = 3.0/8.0 * (vertices[indices[gl_GlobalInvocationID.x][0]].pos + vertices[indices[gl_GlobalInvocationID.x][1]].pos) + 1.0/8.0 * (vertices[indices[gl_GlobalInvocationID.x][2]].pos + vertices[indices[gl_GlobalInvocationID.y][3]].pos); }