struct CameraUniform { view_pos: vec4, view_proj: mat4x4, }; struct VertexInput { @location(0) position: vec3, @location(1) normal: vec3, @location(2) tex_coords: vec2, }; struct VertexOutput { @builtin(position) clip_position: vec4, }; struct Light { position: vec4, color: vec4, }; @group(0) @binding(0) var camera: CameraUniform; @group(1) @binding(0) var light: Light; @vertex fn vs_main(model: VertexInput) -> VertexOutput { var out: VertexOutput; let world_pos = vec4(model.position + light.position.xyz, 1.0); out.clip_position = camera.view_proj * world_pos; return out; } @fragment fn fs_main(in: VertexOutput) -> @location(0) vec4 { return vec4(1.0, 1.0, 1.0, 0.5); }