struct PointLight {
  position : vec4<f32>;
}

struct PointLights {
  values : [[stride(16)]] array<PointLight>;
}

struct Uniforms {
  worldView : mat4x4<f32>;
  proj : mat4x4<f32>;
  numPointLights : u32;
  color_source : u32;
  color : vec4<f32>;
}

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

[[binding(1), group(0)]] var<storage, read> pointLights : PointLights;

[[binding(2), group(0)]] var mySampler : sampler;

[[binding(3), group(0)]] var myTexture : texture_2d<f32>;

struct FragmentInput {
  [[builtin(position)]]
  position : vec4<f32>;
  [[location(0)]]
  view_position : vec4<f32>;
  [[location(1)]]
  normal : vec4<f32>;
  [[location(2)]]
  uv : vec2<f32>;
  [[location(3)]]
  color : vec4<f32>;
}

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

fn getColor(fragment : FragmentInput) -> vec4<f32> {
  var color : vec4<f32>;
  if ((uniforms.color_source == 0u)) {
    color = fragment.color;
  } else if ((uniforms.color_source == 1u)) {
    color = fragment.normal;
    color.a = 1.0;
  } else if ((uniforms.color_source == 2u)) {
    color = uniforms.color;
  } else if ((uniforms.color_source == 3u)) {
    color = textureSample(myTexture, mySampler, fragment.uv);
  }
  return color;
}

[[stage(fragment)]]
fn main(fragment : FragmentInput) -> FragmentOutput {
  var output : FragmentOutput;
  output.color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
  _ = uniforms;
  _ = mySampler;
  _ = myTexture;
  _ = &(pointLights);
  return output;
}
