@group(0) @binding(0) var view_proj_matrix: mat4x4; @group(1) @binding(0) var texture_sampler: sampler; @group(1) @binding(1) var model_texture: texture_2d; @group(1) @binding(2) var model_matrix: mat4x4; @group(1) @binding(3) var model_color: vec3; struct VertexInput { @location(0) position: vec3, @location(1) uv: vec2, }; struct VertexOutput { @builtin(position) position: vec4, @location(0) color: vec4, @location(1) frag_uv: vec2, }; struct FragmentOutput { @location(0) pixel_color: vec4 }; @vertex fn vertex_main(in: VertexInput) -> VertexOutput { var out: VertexOutput; let mvp = model_matrix * view_proj_matrix; out.position = vec4(in.position, 1.0) * mvp; out.color = vec4(model_color, 1.0); out.frag_uv = in.uv; return out; } @fragment fn frag_main(in: VertexOutput) -> FragmentOutput { var out: FragmentOutput; let texture_color = textureSample(model_texture, texture_sampler, in.frag_uv); out.pixel_color = texture_color * in.color; return out; }