struct CameraUniform { vp: mat4x4; }; struct MeshInstance { transform: mat4x4; }; struct MeshData { instances: array; }; struct VertexInput { [[location(0)]] position: vec3; }; struct VertexOutput { [[builtin(position)]] clip_position: vec4; }; [[group(0), binding(0)]] var camera: CameraUniform; [[group(1), binding(0)]] var meshes: MeshData; [[stage(vertex)]] fn vs_main( [[builtin(instance_index)]] mesh_idx: u32, vertex: VertexInput, ) -> VertexOutput { let transform = meshes.instances[mesh_idx].transform; var out: VertexOutput; out.clip_position = camera.vp * vec4(vertex.position, 1.0); return out; } [[stage(fragment)]] fn fs_main( frag: VertexOutput, ) -> [[location(0)]] vec4 { return vec4(1.0); }