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

var<private> gl_FragCoord : vec4<f32>;

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

var<private> x_GLF_color : vec4<f32>;

fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
  let x_76 : f32 = (*(a)).x;
  let x_78 : f32 = (*(b)).y;
  let x_81 : f32 = (*(b)).x;
  let x_83 : f32 = (*(a)).y;
  return ((x_76 * x_78) - (x_81 * x_83));
}

fn pointInTriangle_vf2_vf2_vf2_vf2_(p : ptr<function, vec2<f32>>, a_1 : ptr<function, vec2<f32>>, b_1 : ptr<function, vec2<f32>>, c : ptr<function, vec2<f32>>) -> i32 {
  var pab : f32;
  var param : vec2<f32>;
  var param_1 : vec2<f32>;
  var pbc : f32;
  var param_2 : vec2<f32>;
  var param_3 : vec2<f32>;
  var pca : f32;
  var param_4 : vec2<f32>;
  var param_5 : vec2<f32>;
  var x_145 : bool;
  var x_185 : bool;
  var x_146_phi : bool;
  var x_186_phi : bool;
  let x_88 : f32 = (*(p)).x;
  let x_90 : f32 = (*(a_1)).x;
  let x_93 : f32 = (*(p)).y;
  let x_95 : f32 = (*(a_1)).y;
  let x_99 : f32 = (*(b_1)).x;
  let x_101 : f32 = (*(a_1)).x;
  let x_104 : f32 = (*(b_1)).y;
  let x_106 : f32 = (*(a_1)).y;
  param = vec2<f32>((x_88 - x_90), (x_93 - x_95));
  param_1 = vec2<f32>((x_99 - x_101), (x_104 - x_106));
  let x_109 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
  pab = x_109;
  let x_111 : f32 = (*(p)).x;
  let x_113 : f32 = (*(b_1)).x;
  let x_116 : f32 = (*(p)).y;
  let x_118 : f32 = (*(b_1)).y;
  let x_122 : f32 = (*(c)).x;
  let x_124 : f32 = (*(b_1)).x;
  let x_127 : f32 = (*(c)).y;
  let x_129 : f32 = (*(b_1)).y;
  param_2 = vec2<f32>((x_111 - x_113), (x_116 - x_118));
  param_3 = vec2<f32>((x_122 - x_124), (x_127 - x_129));
  let x_132 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
  pbc = x_132;
  let x_133 : f32 = pab;
  let x_135 : f32 = pbc;
  let x_137 : bool = ((x_133 < 0.0) && (x_135 < 0.0));
  x_146_phi = x_137;
  if (!(x_137)) {
    let x_141 : f32 = pab;
    let x_143 : f32 = pbc;
    x_145 = ((x_141 >= 0.0) && (x_143 >= 0.0));
    x_146_phi = x_145;
  }
  let x_146 : bool = x_146_phi;
  if (!(x_146)) {
    return 0;
  }
  let x_151 : f32 = (*(p)).x;
  let x_153 : f32 = (*(c)).x;
  let x_156 : f32 = (*(p)).y;
  let x_158 : f32 = (*(c)).y;
  let x_162 : f32 = (*(a_1)).x;
  let x_164 : f32 = (*(c)).x;
  let x_167 : f32 = (*(a_1)).y;
  let x_169 : f32 = (*(c)).y;
  param_4 = vec2<f32>((x_151 - x_153), (x_156 - x_158));
  param_5 = vec2<f32>((x_162 - x_164), (x_167 - x_169));
  let x_172 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
  pca = x_172;
  let x_173 : f32 = pab;
  let x_175 : f32 = pca;
  let x_177 : bool = ((x_173 < 0.0) && (x_175 < 0.0));
  x_186_phi = x_177;
  if (!(x_177)) {
    let x_181 : f32 = pab;
    let x_183 : f32 = pca;
    x_185 = ((x_181 >= 0.0) && (x_183 >= 0.0));
    x_186_phi = x_185;
  }
  let x_186 : bool = x_186_phi;
  if (!(x_186)) {
    return 0;
  }
  return 1;
}

fn main_1() {
  var pos : vec2<f32>;
  var param_6 : vec2<f32>;
  var param_7 : vec2<f32>;
  var param_8 : vec2<f32>;
  var param_9 : vec2<f32>;
  let x_63 : vec4<f32> = gl_FragCoord;
  let x_66 : vec2<f32> = x_24.resolution;
  pos = (vec2<f32>(x_63.x, x_63.y) / x_66);
  let x_68 : vec2<f32> = pos;
  param_6 = x_68;
  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_69 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
  if ((x_69 == 1)) {
    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);
}
