struct View { view_proj: mat4x4; world_position: vec3; }; [[group(0), binding(0)]] var view: View; struct VertexOutput { [[location(0)]] uv: vec2; #ifdef COLORED [[location(1)]] color: vec4; #endif [[builtin(position)]] position: vec4; }; [[stage(vertex)]] fn vertex( [[location(0)]] vertex_position: vec3, [[location(1)]] vertex_uv: vec2, #ifdef COLORED [[location(2)]] vertex_color: vec4, #endif ) -> VertexOutput { var out: VertexOutput; out.uv = vertex_uv; out.position = view.view_proj * vec4(vertex_position, 1.0); #ifdef COLORED out.color = vertex_color; #endif return out; } [[group(1), binding(0)]] var sprite_texture: texture_2d; [[group(1), binding(1)]] var sprite_sampler: sampler; [[stage(fragment)]] fn fragment(in: VertexOutput) -> [[location(0)]] vec4 { var color = textureSample(sprite_texture, sprite_sampler, in.uv); #ifdef COLORED color = in.color * color; #endif return color; }