struct Scene {
  vEyePosition : vec4<f32>,
}

struct Material {
  vDiffuseColor : vec4<f32>,
  vAmbientColor : vec3<f32>,
  dummy : f32,
  vEmissiveColor : vec3<f32>,
  dummy2 : f32,
}

struct Mesh {
  visibility : f32,
}

var<private> fClipDistance3 : f32;

var<private> fClipDistance4 : f32;

@group(0) @binding(0) var<uniform> x_29 : Scene;

@group(0) @binding(1) var<uniform> x_49 : Material;

@group(0) @binding(2) var<uniform> x_137 : Mesh;

var<private> glFragColor : vec4<f32>;

fn main_1() {
  var viewDirectionW : vec3<f32>;
  var baseColor : vec4<f32>;
  var diffuseColor : vec3<f32>;
  var alpha : f32;
  var normalW : vec3<f32>;
  var uvOffset : vec2<f32>;
  var baseAmbientColor : vec3<f32>;
  var glossiness : f32;
  var diffuseBase : vec3<f32>;
  var shadow : f32;
  var refractionColor : vec4<f32>;
  var reflectionColor : vec4<f32>;
  var emissiveColor : vec3<f32>;
  var finalDiffuse : vec3<f32>;
  var finalSpecular : vec3<f32>;
  var color : vec4<f32>;
  let x_9 : f32 = fClipDistance3;
  if ((x_9 > 0.0)) {
    discard;
  }
  let x_17 : f32 = fClipDistance4;
  if ((x_17 > 0.0)) {
    discard;
  }
  let x_34 : vec4<f32> = x_29.vEyePosition;
  let x_38 : vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);
  viewDirectionW = normalize((vec3<f32>(x_34.x, x_34.y, x_34.z) - x_38));
  baseColor = vec4<f32>(1.0, 1.0, 1.0, 1.0);
  let x_52 : vec4<f32> = x_49.vDiffuseColor;
  diffuseColor = vec3<f32>(x_52.x, x_52.y, x_52.z);
  let x_60 : f32 = x_49.vDiffuseColor.w;
  alpha = x_60;
  let x_62 : vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);
  let x_64 : vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);
  normalW = normalize(-(cross(dpdx(x_62), dpdy(x_64))));
  uvOffset = vec2<f32>(0.0, 0.0);
  let x_74 : vec4<f32> = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  let x_76 : vec4<f32> = baseColor;
  let x_78 : vec3<f32> = (vec3<f32>(x_76.x, x_76.y, x_76.z) * vec3<f32>(x_74.x, x_74.y, x_74.z));
  let x_79 : vec4<f32> = baseColor;
  baseColor = vec4<f32>(x_78.x, x_78.y, x_78.z, x_79.w);
  baseAmbientColor = vec3<f32>(1.0, 1.0, 1.0);
  glossiness = 0.0;
  diffuseBase = vec3<f32>(0.0, 0.0, 0.0);
  shadow = 1.0;
  refractionColor = vec4<f32>(0.0, 0.0, 0.0, 1.0);
  reflectionColor = vec4<f32>(0.0, 0.0, 0.0, 1.0);
  let x_94 : vec3<f32> = x_49.vEmissiveColor;
  emissiveColor = x_94;
  let x_96 : vec3<f32> = diffuseBase;
  let x_97 : vec3<f32> = diffuseColor;
  let x_99 : vec3<f32> = emissiveColor;
  let x_103 : vec3<f32> = x_49.vAmbientColor;
  let x_108 : vec4<f32> = baseColor;
  finalDiffuse = (clamp((((x_96 * x_97) + x_99) + x_103), vec3<f32>(0.0, 0.0, 0.0), vec3<f32>(1.0, 1.0, 1.0)) * vec3<f32>(x_108.x, x_108.y, x_108.z));
  finalSpecular = vec3<f32>(0.0, 0.0, 0.0);
  let x_113 : vec3<f32> = finalDiffuse;
  let x_114 : vec3<f32> = baseAmbientColor;
  let x_116 : vec3<f32> = finalSpecular;
  let x_118 : vec4<f32> = reflectionColor;
  let x_121 : vec4<f32> = refractionColor;
  let x_123 : vec3<f32> = ((((x_113 * x_114) + x_116) + vec3<f32>(x_118.x, x_118.y, x_118.z)) + vec3<f32>(x_121.x, x_121.y, x_121.z));
  let x_124 : f32 = alpha;
  color = vec4<f32>(x_123.x, x_123.y, x_123.z, x_124);
  let x_129 : vec4<f32> = color;
  let x_132 : vec3<f32> = max(vec3<f32>(x_129.x, x_129.y, x_129.z), vec3<f32>(0.0, 0.0, 0.0));
  let x_133 : vec4<f32> = color;
  color = vec4<f32>(x_132.x, x_132.y, x_132.z, x_133.w);
  let x_140 : f32 = x_137.visibility;
  let x_142 : f32 = color.w;
  color.w = (x_142 * x_140);
  let x_147 : vec4<f32> = color;
  glFragColor = x_147;
  return;
}

struct main_out {
  @location(0)
  glFragColor_1 : vec4<f32>,
}

@stage(fragment)
fn main(@location(2) fClipDistance3_param : f32, @location(3) fClipDistance4_param : f32) -> main_out {
  fClipDistance3 = fClipDistance3_param;
  fClipDistance4 = fClipDistance4_param;
  main_1();
  return main_out(glFragColor);
}
