struct CameraUniform { eye: vec4, vp: mat4x4, }; struct VertexInput { @location(0) position: vec3, @location(1) color: vec3 }; struct VertexOutput { @builtin(position) clip_position: vec4, @location(0) position: vec3, @location(1) color: vec3 }; @group(0) @binding(0) var camera: CameraUniform; @vertex fn vs_main( @builtin(instance_index) mesh_idx: u32, @builtin(vertex_index) vertex_idx: u32, vertex: VertexInput, ) -> VertexOutput { let world_pos = vertex.position; var out: VertexOutput; out.clip_position = camera.vp * vec4(world_pos, 1.0); out.position = world_pos; out.color = vertex.color; return out; } @fragment fn fs_main( frag: VertexOutput, ) -> @location(0) vec4 { return vec4(frag.color, 1.0); }