struct buf0 {
  resolution : vec2<f32>,
}

@group(0) @binding(0) var<uniform> x_15 : buf0;

var<private> gl_FragCoord : vec4<f32>;

var<private> x_GLF_color : vec4<f32>;

fn cross2d_vf2_vf2_(a : ptr<function, vec2<f32>>, b : ptr<function, vec2<f32>>) -> f32 {
  let x_85 : f32 = (*(a)).x;
  let x_87 : f32 = (*(b)).y;
  let x_90 : f32 = (*(b)).x;
  let x_92 : f32 = (*(a)).y;
  return ((x_85 * x_87) - (x_90 * x_92));
}

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 var_y : f32;
  var x_96 : f32;
  var x_97 : f32;
  var clamp_y : f32;
  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_173 : bool;
  var x_205 : bool;
  var x_174_phi : bool;
  var x_206_phi : bool;
  let x_99 : f32 = x_15.resolution.x;
  let x_101 : f32 = x_15.resolution.y;
  if ((x_99 == x_101)) {
    let x_107 : f32 = (*(c)).y;
    let x_108 : vec2<f32> = vec2<f32>(0.0, x_107);
    if (true) {
      let x_112 : f32 = (*(c)).y;
      x_97 = x_112;
    } else {
      x_97 = 1.0;
    }
    let x_113 : f32 = x_97;
    let x_114 : f32 = (*(c)).y;
    let x_116 : vec2<f32> = vec2<f32>(1.0, max(x_113, x_114));
    let x_117 : vec2<f32> = vec2<f32>(x_108.x, x_108.y);
    x_96 = x_107;
  } else {
    x_96 = -1.0;
  }
  let x_118 : f32 = x_96;
  var_y = x_118;
  let x_120 : f32 = (*(c)).y;
  let x_121 : f32 = (*(c)).y;
  let x_122 : f32 = var_y;
  clamp_y = clamp(x_120, x_121, x_122);
  let x_125 : f32 = (*(p)).x;
  let x_127 : f32 = (*(a_1)).x;
  let x_130 : f32 = (*(p)).y;
  let x_132 : f32 = (*(a_1)).y;
  let x_136 : f32 = (*(b_1)).x;
  let x_137 : f32 = (*(a_1)).x;
  let x_140 : f32 = (*(b_1)).y;
  let x_141 : f32 = (*(a_1)).y;
  param = vec2<f32>((x_125 - x_127), (x_130 - x_132));
  param_1 = vec2<f32>((x_136 - x_137), (x_140 - x_141));
  let x_144 : f32 = cross2d_vf2_vf2_(&(param), &(param_1));
  pab = x_144;
  let x_145 : f32 = (*(p)).x;
  let x_146 : f32 = (*(b_1)).x;
  let x_148 : f32 = (*(p)).y;
  let x_149 : f32 = (*(b_1)).y;
  let x_153 : f32 = (*(c)).x;
  let x_154 : f32 = (*(b_1)).x;
  let x_156 : f32 = clamp_y;
  let x_157 : f32 = (*(b_1)).y;
  param_2 = vec2<f32>((x_145 - x_146), (x_148 - x_149));
  param_3 = vec2<f32>((x_153 - x_154), (x_156 - x_157));
  let x_160 : f32 = cross2d_vf2_vf2_(&(param_2), &(param_3));
  pbc = x_160;
  let x_161 : f32 = pab;
  let x_163 : f32 = pbc;
  let x_165 : bool = ((x_161 < 0.0) & (x_163 < 0.0));
  x_174_phi = x_165;
  if (!(x_165)) {
    let x_169 : f32 = pab;
    let x_171 : f32 = pbc;
    x_173 = ((x_169 >= 0.0) & (x_171 >= 0.0));
    x_174_phi = x_173;
  }
  let x_174 : bool = x_174_phi;
  if (!(x_174)) {
    return 0;
  }
  let x_178 : f32 = (*(p)).x;
  let x_179 : f32 = (*(c)).x;
  let x_181 : f32 = (*(p)).y;
  let x_182 : f32 = (*(c)).y;
  let x_185 : f32 = (*(a_1)).x;
  let x_186 : f32 = (*(c)).x;
  let x_188 : f32 = (*(a_1)).y;
  let x_189 : f32 = (*(c)).y;
  param_4 = vec2<f32>((x_178 - x_179), (x_181 - x_182));
  param_5 = vec2<f32>((x_185 - x_186), (x_188 - x_189));
  let x_192 : f32 = cross2d_vf2_vf2_(&(param_4), &(param_5));
  pca = x_192;
  let x_193 : f32 = pab;
  let x_195 : f32 = pca;
  let x_197 : bool = ((x_193 < 0.0) & (x_195 < 0.0));
  x_206_phi = x_197;
  if (!(x_197)) {
    let x_201 : f32 = pab;
    let x_203 : f32 = pca;
    x_205 = ((x_201 >= 0.0) & (x_203 >= 0.0));
    x_206_phi = x_205;
  }
  let x_206 : bool = x_206_phi;
  if (!(x_206)) {
    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_72 : vec4<f32> = gl_FragCoord;
  let x_75 : vec2<f32> = x_15.resolution;
  pos = (vec2<f32>(x_72.x, x_72.y) / x_75);
  let x_77 : vec2<f32> = pos;
  param_6 = x_77;
  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_78 : i32 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
  if ((x_78 == 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);
}
