struct Uniforms {
  modelViewProjectionMatrix : mat4x4<f32>;
};

[[binding(0), group(0)]] var<uniform> uniforms : Uniforms;

struct VertexInput {
  [[location(0)]]
  cur_position : vec4<f32>;
  [[location(1)]]
  color : vec4<f32>;
};

struct VertexOutput {
  [[location(0)]]
  vtxFragColor : vec4<f32>;
  [[builtin(position)]]
  Position : vec4<f32>;
};

[[stage(vertex)]]
fn vtx_main(input : VertexInput) -> VertexOutput {
  var output : VertexOutput;
  output.Position = (uniforms.modelViewProjectionMatrix * input.cur_position);
  output.vtxFragColor = input.color;
  return output;
}

[[stage(fragment)]]
fn frag_main([[location(0)]] fragColor : vec4<f32>) -> [[location(0)]] vec4<f32> {
  return fragColor;
}
