struct PointLight {
  position : vec4<f32>;
}

struct PointLights {
  values : 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;
}
