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