#version 310 es
precision mediump float;

layout(location = 2) in vec2 vUv_1;
layout(location = 0) out vec4 color_1;
struct FragmentInput {
  vec2 vUv;
};

struct FragmentOutput {
  vec4 color;
};

uniform highp sampler2D depthMap_texSampler;

FragmentOutput tint_symbol(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;
}

void main() {
  FragmentInput tint_symbol_2 = FragmentInput(vUv_1);
  FragmentOutput inner_result = tint_symbol(tint_symbol_2);
  color_1 = inner_result.color;
  return;
}
