#version 310 es
precision mediump float;

struct FragmentInput {
  vec2 vUv;
};
struct FragmentOutput {
  vec4 color;
};
struct tint_symbol_3 {
  vec2 vUv;
};
struct tint_symbol_4 {
  vec4 color;
};

uniform highp sampler2D depthMap_texSampler;


FragmentOutput tint_symbol_inner(FragmentInput fIn) {
  float tint_symbol_1 = texture(depthMap_texSampler, fIn.vUv).x;
  vec3 color = vec3(tint_symbol_1, tint_symbol_1, tint_symbol_1);
  FragmentOutput fOut = FragmentOutput(vec4(0.0f, 0.0f, 0.0f, 0.0f));
  fOut.color = vec4(color, 1.0f);
  return fOut;
}

tint_symbol_4 tint_symbol(tint_symbol_3 tint_symbol_2) {
  FragmentInput tint_symbol_5 = FragmentInput(tint_symbol_2.vUv);
  FragmentOutput inner_result = tint_symbol_inner(tint_symbol_5);
  tint_symbol_4 wrapper_result = tint_symbol_4(vec4(0.0f, 0.0f, 0.0f, 0.0f));
  wrapper_result.color = inner_result.color;
  return wrapper_result;
}
layout(location = 2) in vec2 vUv;
layout(location = 0) out vec4 color;
void main() {
  tint_symbol_3 inputs;
  inputs.vUv = vUv;
  tint_symbol_4 outputs;
  outputs = tint_symbol(inputs);
  color = outputs.color;
}


