[[block]]
struct buf1 {
  injectionSwitch : vec2<f32>;
};

[[block]]
struct buf0 {
  resolution : vec2<f32>;
};

[[group(0), binding(1)]] var<uniform> x_11 : buf1;

var<private> x_GLF_color : vec4<f32>;

var<private> gl_FragCoord : vec4<f32>;

[[group(0), binding(0)]] var<uniform> x_19 : buf0;

fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
  var x_78 : f32;
  var x_79 : f32;
  var x_80 : f32;
  var param : vec2<f32>;
  var param_1 : vec2<f32>;
  var param_2 : vec2<f32>;
  var param_3 : vec2<f32>;
  var param_4 : vec2<f32>;
  var param_5 : vec2<f32>;
  var x_147 : bool;
  var x_203 : bool;
  var x_148_phi : bool;
  var x_204_phi : bool;
  let x_81 : ptr<function, f32> = &((*(p)).x);
  let x_82 : f32 = *(x_81);
  let x_83 : ptr<function, f32> = &((*(a)).x);
  let x_84 : f32 = *(x_83);
  let x_86 : ptr<function, f32> = &((*(p)).y);
  let x_87 : f32 = *(x_86);
  let x_88 : ptr<function, f32> = &((*(a)).y);
  let x_89 : f32 = *(x_88);
  let x_92 : ptr<function, f32> = &((*(b)).x);
  let x_93 : f32 = *(x_92);
  let x_94 : f32 = *(x_83);
  let x_96 : ptr<function, f32> = &((*(b)).y);
  let x_97 : f32 = *(x_96);
  let x_98 : f32 = *(x_88);
  param = vec2<f32>((x_82 - x_84), (x_87 - x_89));
  param_1 = vec2<f32>((x_93 - x_94), (x_97 - x_98));
  let x_102 : f32 = param.x;
  let x_104 : f32 = param_1.y;
  let x_107 : f32 = param_1.x;
  let x_109 : f32 = param.y;
  let x_111 : f32 = ((x_102 * x_104) - (x_107 * x_109));
  x_80 = x_111;
  let x_112 : f32 = *(x_81);
  let x_113 : f32 = *(x_92);
  let x_115 : f32 = *(x_86);
  let x_116 : f32 = *(x_96);
  let x_119 : ptr<function, f32> = &((*(c)).x);
  let x_120 : f32 = *(x_119);
  let x_121 : f32 = *(x_92);
  let x_123 : ptr<function, f32> = &((*(c)).y);
  let x_124 : f32 = *(x_123);
  let x_125 : f32 = *(x_96);
  param_2 = vec2<f32>((x_112 - x_113), (x_115 - x_116));
  param_3 = vec2<f32>((x_120 - x_121), (x_124 - x_125));
  let x_129 : f32 = param_2.x;
  let x_131 : f32 = param_3.y;
  let x_134 : f32 = param_3.x;
  let x_136 : f32 = param_2.y;
  let x_138 : f32 = ((x_129 * x_131) - (x_134 * x_136));
  x_79 = x_138;
  let x_139 : bool = (x_111 < 0.0);
  let x_141 : bool = (x_139 && (x_138 < 0.0));
  x_148_phi = x_141;
  if (!(x_141)) {
    x_147 = ((x_111 >= 0.0) && (x_138 >= 0.0));
    x_148_phi = x_147;
  }
  var x_153_phi : i32;
  let x_148 : bool = x_148_phi;
  if (!(x_148)) {
    x_153_phi = 0;
    loop {
      var x_154 : i32;
      var x_164_phi : i32;
      let x_153 : i32 = x_153_phi;
      let x_159 : f32 = x_11.injectionSwitch.y;
      let x_160 : i32 = i32(x_159);
      if ((x_153 < x_160)) {
      } else {
        break;
      }
      x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);
      x_164_phi = 0;
      loop {
        var x_165 : i32;
        let x_164 : i32 = x_164_phi;
        if ((x_164 < x_160)) {
        } else {
          break;
        }
        x_GLF_color = vec4<f32>(1.0, 1.0, 1.0, 1.0);

        continuing {
          x_165 = (x_164 + 1);
          x_164_phi = x_165;
        }
      }

      continuing {
        x_154 = (x_153 + 1);
        x_153_phi = x_154;
      }
    }
    return 0;
  }
  let x_171 : f32 = *(x_81);
  let x_172 : f32 = *(x_119);
  let x_174 : f32 = *(x_86);
  let x_175 : f32 = *(x_123);
  let x_178 : f32 = *(x_83);
  let x_179 : f32 = *(x_119);
  let x_181 : f32 = *(x_88);
  let x_182 : f32 = *(x_123);
  param_4 = vec2<f32>((x_171 - x_172), (x_174 - x_175));
  param_5 = vec2<f32>((x_178 - x_179), (x_181 - x_182));
  let x_186 : f32 = param_4.x;
  let x_188 : f32 = param_5.y;
  let x_191 : f32 = param_5.x;
  let x_193 : f32 = param_4.y;
  let x_195 : f32 = ((x_186 * x_188) - (x_191 * x_193));
  x_78 = x_195;
  let x_197 : bool = (x_139 && (x_195 < 0.0));
  x_204_phi = x_197;
  if (!(x_197)) {
    x_203 = ((x_111 >= 0.0) && (x_195 >= 0.0));
    x_204_phi = x_203;
  }
  let x_204 : bool = x_204_phi;
  if (!(x_204)) {
    return 0;
  }
  return 1;
}

fn main_1() {
  var param_6 : vec2<f32>;
  var param_7 : vec2<f32>;
  var param_8 : vec2<f32>;
  var param_9 : vec2<f32>;
  let x_60 : vec4<f32> = gl_FragCoord;
  let x_63 : vec2<f32> = x_19.resolution;
  param_6 = (vec2<f32>(x_60.x, x_60.y) / x_63);
  param_7 = vec2<f32>(0.699999988, 0.300000012);
  param_8 = vec2<f32>(0.5, 0.899999976);
  param_9 = vec2<f32>(0.100000001, 0.400000006);
  let x_65 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
  if ((x_65 == 1)) {
    let x_71 : f32 = x_11.injectionSwitch.y;
    let x_73 : f32 = x_11.injectionSwitch.x;
    if ((x_71 >= x_73)) {
      x_GLF_color = vec4<f32>(1.0, 0.0, 0.0, 1.0);
    }
  } else {
    x_GLF_color = vec4<f32>(0.0, 0.0, 0.0, 1.0);
  }
  return;
}

struct main_out {
  [[location(0)]]
  x_GLF_color_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[builtin(position)]] gl_FragCoord_param : vec4<f32>) -> main_out {
  gl_FragCoord = gl_FragCoord_param;
  main_1();
  return main_out(x_GLF_color);
}
