#version 300 es

// 全ての浮動小数点型の変数に高い精度を指定
precision highp float;

uniform vec2 uResolution;
uniform vec2 uMouse;

out vec4 outColor;

void main() {
  // ビューポートの中心を原点としてスケール
  vec2 pos = (2.0 * gl_FragCoord.xy - uResolution.xy) / min(uResolution.x, uResolution.y);
  vec2 mouse = (2.0 * uMouse.xy - uResolution.xy) / min(uResolution.x, uResolution.y);
  mouse.y *= -1.0;
  
  // 中心に近くなるにつれて小さい値に -> 黒くなる
  float orb = length(mouse - pos);
  
  // 半径
  float radius = 0.1;
  
  // 色を反転させる
  // * orbがradiusより大きい値 -> 小さい値に
  // * orbがradiusより小さい値 -> 大きい値に
  // * orb = radius -> 真っ白(1.0)になるので、境界がはっきり描かれる
  orb = radius / orb;
  
  outColor.rgb = vec3(orb);
  outColor.a = 1.0;
}