#version 430 core struct DrawCtx { mat4 model; vec4 color[4]; }; layout(std430, binding = 0) buffer InstanceBuffer { DrawCtx instances[]; }; layout (location = 0) in vec3 a_position; layout (location = 1) in vec2 a_texcoord; layout (location = 2) in vec3 a_normal; uniform mat4 u_vp; // uniform mat4 u_model; out vec3 v_fragpos; out vec2 v_texcoord; out vec3 v_normal; void main() { // uint index = gl_GlobalInvocationID.x; mat4 u_model = instances[gl_InstanceID].model; v_texcoord = a_texcoord; v_normal = normalize(mat3(transpose(inverse(u_model))) * a_normal); vec4 fragpos4 = u_model * vec4(a_position, 1.0); v_fragpos = vec3(fragpos4); gl_Position = u_vp * fragpos4; }