anchor.diff:    pssp.add(node1);
   
     chronosGL.bindTransformFeedback(transform1);
  -  programSprites.enabled = false;
  -
  -  // Prep for copyBufferSubData below
  -  chronosGL.bindBuffer(GL_ARRAY_BUFFER, md1.GetBuffer(aVertexPosition));
  -  chronosGL.bindBuffer(
  -      GL_TRANSFORM_FEEDBACK_BUFFER, md2.GetBuffer(aVertexPosition));
  +  programSprites.enabled = true;
  +  pssp.enabled = false;
   
     double _lastTimeMs = 0.0;
     void animate(timeMs) {
  
positive.code:       (rng.nextDouble() - 0.5) * d, (rng.nextDouble() - 0.5) * d);
  }
  
  void main() {
    StatsFps fps =
        new StatsFps(HTML.document.getElementById("stats"), "blue", "gray");
  
    HTML.CanvasElement canvas = HTML.document.querySelector('#webgl-canvas');
    final int width = canvas.clientWidth;
    final int height = canvas.clientHeight;
    ChronosGL chronosGL = new ChronosGL(canvas);
    OrbitCamera orbit = new OrbitCamera(15.0, 0.5, 0.5, canvas);
  
    Perspective perspective = new Perspective(orbit, 0.1, 1000.0)
      ..AdjustAspect(width, height);
  
    RenderPhase phase = new RenderPhase("main", chronosGL)
      ..viewPortW = width
      ..viewPortH = height;
  
    Math.Random rng = new Math.Random(0);
    List<Pole> srcPoles = [];
    double p = 3.0;
    srcPoles.add(new Pole(new VM.Vector3(2.0 * p, 0.0, 2.0 * p))..Update(1.0));
    srcPoles.add(new Pole(new VM.Vector3(1.0 * p, 0.0, 2.0 * p))..Update(1.0));
    srcPoles.add(new Pole(new VM.Vector3(0.0 * p, 0.0, 2.0 * p))..Update(1.0));
    srcPoles.add(new Pole(new VM.Vector3(-1.0 * p, 0.0, 2.0 * p))..Update(1.0));
    srcPoles.add(new Pole(new VM.Vector3(-2.0 * p, 0.0, 2.0 * p))..Update(1.0));
  
    List<Pole> dstPoles = [];
    dstPoles.add(new Pole(new VM.Vector3(2.0 * p, 0.0, -2.0 * p))..Update(1.0));
    dstPoles.add(new Pole(new VM.Vector3(1.0 * p, 0.0, -2.0 * p))..Update(1.0));
    dstPoles.add(new Pole(new VM.Vector3(0.0 * p, 0.0, -2.0 * p))..Update(1.0));
    dstPoles.add(new Pole(new VM.Vector3(-1.0 * p, 0.0, -2.0 * p))..Update(1.0));
    dstPoles.add(new Pole(new VM.Vector3(-2.0 * p, 0.0, -2.0 * p))..Update(1.0));
  
    VM.Vector3 outOfBounds = new VM.Vector3.all(kMaxDistance * 100.0);
    List<Ion> ions = [];
  
negative.code:     ..SetUniform(uPointSize, 200.0);
    GeometryBuilder gb = new GeometryBuilder(true);
    for (var i = 0; i < kIons; i++) {
      gb.AddVertex(new VM.Vector3.zero());
    }
    MeshData md = GeometryBuilderToMeshData("", chronosGL, gb);
    RenderProgram programSprites =
        phase.createProgram(createPointSpritesShader());
    programSprites.add(new Node("ions", md, mat));
  
    RenderProgram pssp = phase.createProgram(createFireWorksShader());
    MeshData md2 = GeometryBuilderToMeshData("", chronosGL, gb);
    MeshData md1 = GeometryBuilderToMeshData("", chronosGL, gb);
  
  