[[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_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_100 : f32 = (*(a_1)).x;
  let x_103 : f32 = (*(b_1)).y;
  let x_104 : f32 = (*(a_1)).y;
  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 = (*(p)).x;
  let x_109 : f32 = (*(b_1)).x;
  let x_111 : f32 = (*(p)).y;
  let x_112 : f32 = (*(b_1)).y;
  let x_116 : f32 = (*(c)).x;
  let x_117 : f32 = (*(b_1)).x;
  let x_120 : f32 = (*(c)).y;
  let x_121 : f32 = (*(b_1)).y;
  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 = (*(p)).x;
  let x_143 : f32 = (*(c)).x;
  let x_145 : f32 = (*(p)).y;
  let x_146 : f32 = (*(c)).y;
  let x_149 : f32 = (*(a_1)).x;
  let x_150 : f32 = (*(c)).x;
  let x_152 : f32 = (*(a_1)).y;
  let x_153 : f32 = (*(c)).y;
  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);
}
