#include <metal_stdlib>

using namespace metal;
struct buf0 {
  /* 0x0000 */ packed_float2 resolution;
};
struct main_out {
  float4 x_GLF_color_1;
};
struct tint_symbol_1 {
  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_137 = false;
  bool x_169 = false;
  bool x_138_phi = false;
  bool x_170_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_100 = (*(a_1)).x;
  float const x_103 = (*(b_1)).y;
  float const x_104 = (*(a_1)).y;
  param = float2((x_88 - x_90), (x_93 - x_95));
  param_1 = float2((x_99 - x_100), (x_103 - x_104));
  float const x_107 = cross2d_vf2_vf2_(&(param), &(param_1));
  pab = x_107;
  float const x_108 = (*(p)).x;
  float const x_109 = (*(b_1)).x;
  float const x_111 = (*(p)).y;
  float const x_112 = (*(b_1)).y;
  float const x_116 = (*(c)).x;
  float const x_117 = (*(b_1)).x;
  float const x_120 = (*(c)).y;
  float const x_121 = (*(b_1)).y;
  param_2 = float2((x_108 - x_109), (x_111 - x_112));
  param_3 = float2((x_116 - x_117), (x_120 - x_121));
  float const x_124 = cross2d_vf2_vf2_(&(param_2), &(param_3));
  pbc = x_124;
  float const x_125 = pab;
  float const x_127 = pbc;
  bool const x_129 = ((x_125 < 0.0f) && (x_127 < 0.0f));
  x_138_phi = x_129;
  if (!(x_129)) {
    float const x_133 = pab;
    float const x_135 = pbc;
    x_137 = ((x_133 >= 0.0f) && (x_135 >= 0.0f));
    x_138_phi = x_137;
  }
  bool const x_138 = x_138_phi;
  if (!(x_138)) {
    return 0;
  }
  float const x_142 = (*(p)).x;
  float const x_143 = (*(c)).x;
  float const x_145 = (*(p)).y;
  float const x_146 = (*(c)).y;
  float const x_149 = (*(a_1)).x;
  float const x_150 = (*(c)).x;
  float const x_152 = (*(a_1)).y;
  float const x_153 = (*(c)).y;
  param_4 = float2((x_142 - x_143), (x_145 - x_146));
  param_5 = float2((x_149 - x_150), (x_152 - x_153));
  float const x_156 = cross2d_vf2_vf2_(&(param_4), &(param_5));
  pca = x_156;
  float const x_157 = pab;
  float const x_159 = pca;
  bool const x_161 = ((x_157 < 0.0f) && (x_159 < 0.0f));
  x_170_phi = x_161;
  if (!(x_161)) {
    float const x_165 = pab;
    float const x_167 = pca;
    x_169 = ((x_165 >= 0.0f) && (x_167 >= 0.0f));
    x_170_phi = x_169;
  }
  bool const x_170 = x_170_phi;
  if (!(x_170)) {
    return 0;
  }
  return 1;
}

void main_1(constant buf0& x_24, thread float4* const tint_symbol_3, thread float4* const tint_symbol_4) {
  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_3);
  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_4) = float4(1.0f, 0.0f, 0.0f, 1.0f);
  } else {
    *(tint_symbol_4) = float4(0.0f, 0.0f, 0.0f, 1.0f);
  }
  return;
}

main_out tint_symbol_inner(constant buf0& x_24, float4 gl_FragCoord_param, thread float4* const tint_symbol_5, thread float4* const tint_symbol_6) {
  *(tint_symbol_5) = gl_FragCoord_param;
  main_1(x_24, tint_symbol_5, tint_symbol_6);
  main_out const tint_symbol_2 = {.x_GLF_color_1=*(tint_symbol_6)};
  return tint_symbol_2;
}

fragment tint_symbol_1 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;
  main_out const inner_result = tint_symbol_inner(x_24, gl_FragCoord_param, &(tint_symbol_7), &(tint_symbol_8));
  tint_symbol_1 wrapper_result = {};
  wrapper_result.x_GLF_color_1 = inner_result.x_GLF_color_1;
  return wrapper_result;
}

