struct VertexOut { @location(0) color: vec4, @builtin(position) position: vec4, }; struct Uniforms { @size(16) angle: f32, // pad to 16 bytes }; @group(0) @binding(0) var uniforms: Uniforms; var v_positions: array, 3> = array, 3>( vec2(0.0, 1.0), vec2(1.0, -1.0), vec2(-1.0, -1.0), ); var v_colors: array, 3> = array, 3>( vec4(1.0, 0.0, 0.0, 1.0), vec4(0.0, 1.0, 0.0, 1.0), vec4(0.0, 0.0, 1.0, 1.0), ); @vertex fn vs_main(@builtin(vertex_index) v_idx: u32) -> VertexOut { var out: VertexOut; out.position = vec4(v_positions[v_idx], 0.0, 1.0); out.position.x = out.position.x * cos(uniforms.angle); out.color = v_colors[v_idx]; return out; } @fragment fn fs_main(in: VertexOut) -> @location(0) vec4 { return in.color; }