#version 310 es

layout(location = 1) out float col1_1;
layout(location = 2) out float col2_1;
struct Interface {
  float col1;
  float col2;
  vec4 pos;
};

Interface vert_main() {
  Interface tint_symbol = Interface(0.400000006f, 0.600000024f, vec4(0.0f, 0.0f, 0.0f, 0.0f));
  return tint_symbol;
}

void main() {
  Interface inner_result = vert_main();
  col1_1 = inner_result.col1;
  col2_1 = inner_result.col2;
  gl_Position = inner_result.pos;
  gl_Position.y = -(gl_Position.y);
  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
  return;
}
#version 310 es
precision mediump float;

layout(location = 1) in float col1_1;
layout(location = 2) in float col2_1;
struct Interface {
  float col1;
  float col2;
  vec4 pos;
};

void frag_main(Interface colors) {
  float r = colors.col1;
  float g = colors.col2;
}

void main() {
  Interface tint_symbol = Interface(col1_1, col2_1, gl_FragCoord);
  frag_main(tint_symbol);
  return;
}
