[[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_137 : bool;
  var x_169 : bool;
  var x_138_phi : bool;
  var x_170_phi : bool;
  let x_87 : ptr<function, f32> = &((*(p)).x);
  let x_88 : f32 = *(x_87);
  let x_89 : ptr<function, f32> = &((*(a_1)).x);
  let x_90 : f32 = *(x_89);
  let x_92 : ptr<function, f32> = &((*(p)).y);
  let x_93 : f32 = *(x_92);
  let x_94 : ptr<function, f32> = &((*(a_1)).y);
  let x_95 : f32 = *(x_94);
  let x_98 : ptr<function, f32> = &((*(b_1)).x);
  let x_99 : f32 = *(x_98);
  let x_100 : f32 = *(x_89);
  let x_102 : ptr<function, f32> = &((*(b_1)).y);
  let x_103 : f32 = *(x_102);
  let x_104 : f32 = *(x_94);
  param = vec2<f32>((x_88 - x_90), (x_93 - x_95));
  param_1 = vec2<f32>((x_99 - x_100), (x_103 - x_104));
  let x_107 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
  pab = x_107;
  let x_108 : f32 = *(x_87);
  let x_109 : f32 = *(x_98);
  let x_111 : f32 = *(x_92);
  let x_112 : f32 = *(x_102);
  let x_115 : ptr<function, f32> = &((*(c)).x);
  let x_116 : f32 = *(x_115);
  let x_117 : f32 = *(x_98);
  let x_119 : ptr<function, f32> = &((*(c)).y);
  let x_120 : f32 = *(x_119);
  let x_121 : f32 = *(x_102);
  param_2 = vec2<f32>((x_108 - x_109), (x_111 - x_112));
  param_3 = vec2<f32>((x_116 - x_117), (x_120 - x_121));
  let x_124 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
  pbc = x_124;
  let x_125 : f32 = pab;
  let x_127 : f32 = pbc;
  let x_129 : bool = ((x_125 < 0.0) & (x_127 < 0.0));
  x_138_phi = x_129;
  if (!(x_129)) {
    let x_133 : f32 = pab;
    let x_135 : f32 = pbc;
    x_137 = ((x_133 >= 0.0) & (x_135 >= 0.0));
    x_138_phi = x_137;
  }
  let x_138 : bool = x_138_phi;
  if (!(x_138)) {
    return 0;
  }
  let x_142 : f32 = *(x_87);
  let x_143 : f32 = *(x_115);
  let x_145 : f32 = *(x_92);
  let x_146 : f32 = *(x_119);
  let x_149 : f32 = *(x_89);
  let x_150 : f32 = *(x_115);
  let x_152 : f32 = *(x_94);
  let x_153 : f32 = *(x_119);
  param_4 = vec2<f32>((x_142 - x_143), (x_145 - x_146));
  param_5 = vec2<f32>((x_149 - x_150), (x_152 - x_153));
  let x_156 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
  pca = x_156;
  let x_157 : f32 = pab;
  let x_159 : f32 = pca;
  let x_161 : bool = ((x_157 < 0.0) & (x_159 < 0.0));
  x_170_phi = x_161;
  if (!(x_161)) {
    let x_165 : f32 = pab;
    let x_167 : f32 = pca;
    x_169 = ((x_165 >= 0.0) & (x_167 >= 0.0));
    x_170_phi = x_169;
  }
  let x_170 : bool = x_170_phi;
  if (!(x_170)) {
    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);
}
