anchor.diff:    final RenderProgram prog = RenderProgram(
         "fireworks", cgl, fireworksVertexShader, fireworksFragmentShader);
     final int bindingIndex = prog.GetTransformBindingIndex(tPosition);
  -
   
     final Material material = Material("torus-mat")
       ..SetUniform(uPointSize, 10.0)
  
positive.code:      return fract(sin(dot(xy, vec2(12.9898, 78.233))) * 43758.5453);
  }
       
  float NewHeight(float oy, float y, float t) {
      float bottom = - 2.0;
      float speed = 0.03;
      t = mod(t, 12.0);
      if (t < 2.0) {            // normal
          return y;
      } else if ( t < 6.0) {    // shrinking
          t = t - 2.0;
          y = y - t * speed * (rand(vec2(t, y)));
          if (y > bottom) return y;
          return bottom;  
      } else if ( t < 8.0) {    // flat 
          return bottom;      
      } else {
         t = t - 8.0;
         y = y + t * speed * (rand(vec2(t, oy)));
         if (y > oy) return oy;
         return y; 
      }
  }
  
  void main() {
      vec4 pos = vec4(${aCurrentPosition}, 1.0);
      pos.y = NewHeight(${aPosition}.y, pos.y, ${uTime});
      // new current pos for next run
      ${tPosition} = pos.xyz;
  
      gl_Position = ${uPerspectiveViewMatrix} * ${uModelMatrix} * pos;
                    
      gl_PointSize = ${uPointSize} / gl_Position.z;
      ${vColor}.r = sin(${aPosition}.x)/2.0+0.5;
  
negative.code:       HTML.document.querySelector('#webgl-canvas');
    final ChronosGL cgl = ChronosGL(canvas);
  
    final OrbitCamera orbit = OrbitCamera(7.0, 0.0, 0.0, HTML.document.body);
  
    final PerspectiveResizeAware perspective =
        PerspectiveResizeAware(cgl, canvas, orbit, 0.1, 1000.0);
  