const bloomDir = vec2(0.0, 1.0);

var<private> offsets : array<f32, 3> = array<f32, 3>(0.0, 1.384615421, 3.230769157);

var<private> weights : array<f32, 3> = array<f32, 3>(0.227027029, 0.31621623, 0.07027027);

struct BloomUniforms {
  radius : f32,
  dim : f32,
}

@group(0) @binding(0) var<uniform> bloom : BloomUniforms;

@group(0) @binding(1) var bloomTexture : texture_2d<f32>;

@group(0) @binding(2) var bloomSampler : sampler;

struct FragmentInput {
  @location(0)
  texCoord : vec2<f32>,
}

fn getGaussianBlur(texCoord : vec2<f32>) -> vec4<f32> {
  let texelRadius = (vec2(bloom.radius) / vec2<f32>(textureDimensions(bloomTexture)));
  let step = (bloomDir * texelRadius);
  var sum = vec4(0.0);
  sum = (sum + (textureSample(bloomTexture, bloomSampler, texCoord) * weights[0]));
  sum = (sum + (textureSample(bloomTexture, bloomSampler, (texCoord + (step * 1.0))) * weights[1]));
  sum = (sum + (textureSample(bloomTexture, bloomSampler, (texCoord - (step * 1.0))) * weights[1]));
  sum = (sum + (textureSample(bloomTexture, bloomSampler, (texCoord + (step * 2.0))) * weights[2]));
  sum = (sum + (textureSample(bloomTexture, bloomSampler, (texCoord - (step * 2.0))) * weights[2]));
  return vec4(sum.rgb, 1.0);
}

@group(0) @binding(3) var prevTexture : texture_2d<f32>;

@fragment
fn fragmentMain(input : FragmentInput) -> @location(0) vec4<f32> {
  let blurColor = getGaussianBlur(input.texCoord);
  let dimColor = (textureSample(prevTexture, bloomSampler, input.texCoord) * bloom.dim);
  return (blurColor + dimColor);
}
