struct VertexInput { @location(0) position: vec3, @location(1) color: vec3, }; struct InstanceInput { @location(5) model_row0: vec4, @location(6) model_row1: vec4, @location(7) model_row2: vec4, @location(8) model_row3: vec4, }; struct VSOutput { @builtin(position) position: vec4, @location(0) color: vec3, }; @vertex fn vs_main(vertex: VertexInput, instance: InstanceInput) -> VSOutput { var out: VSOutput; let model = mat4x4( instance.model_row0, instance.model_row1, instance.model_row2, instance.model_row3 ); out.position = model * vec4(vertex.position, 1.0); out.color = vertex.color; return out; } @fragment fn fs_main(input: VSOutput) -> @location(0) vec4 { return vec4(input.color, 1.0); }