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;
}

@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;
}
