#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_2 {
  float4 x_GLF_color_1 [[color(0)]];
};

float cross2d_vf2_vf2_(thread float2* const a, thread float2* const b) {
  float const x_76 = (*(a)).x;
  float const x_78 = (*(b)).y;
  float const x_81 = (*(b)).x;
  float const x_83 = (*(a)).y;
  return ((x_76 * x_78) - (x_81 * x_83));
}

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

void main_1(constant buf0& x_24, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  float2 pos = 0.0f;
  float2 param_6 = 0.0f;
  float2 param_7 = 0.0f;
  float2 param_8 = 0.0f;
  float2 param_9 = 0.0f;
  float4 const x_63 = *(tint_symbol_5);
  float2 const x_66 = x_24.resolution;
  pos = (float2(x_63.x, x_63.y) / x_66);
  float2 const x_68 = pos;
  param_6 = x_68;
  param_7 = float2(0.699999988f, 0.300000012f);
  param_8 = float2(0.5f, 0.899999976f);
  param_9 = float2(0.100000001f, 0.400000006f);
  int const x_69 = pointInTriangle_vf2_vf2_vf2_vf2_(&(param_6), &(param_7), &(param_8), &(param_9));
  if ((x_69 == 1)) {
    *(tint_symbol_6) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_6) = float4(0.0f, 0.0f, 0.0f, 1.0f);
  }
  return;
}

fragment tint_symbol_2 tint_symbol(float4 gl_FragCoord_param [[position]], constant buf0& x_24 [[buffer(0)]]) {
  thread float4 tint_symbol_7 = 0.0f;
  thread float4 tint_symbol_8 = 0.0f;
  tint_symbol_7 = gl_FragCoord_param;
  main_1(x_24, &(tint_symbol_7), &(tint_symbol_8));
  main_out const tint_symbol_3 = {.x_GLF_color_1=tint_symbol_8};
  tint_symbol_2 const tint_symbol_4 = {.x_GLF_color_1=tint_symbol_3.x_GLF_color_1};
  return tint_symbol_4;
}

