anchor.diff:      ..AddVertices(ionsPos);
     MeshData mdIn = programGPU.MakeMeshData("ionsIn", GL_POINTS)
       ..AddVertices(ionsPos);
  -  programGPU.add(new Node("ionsGPU", mdIn, matGPU));
  -
  -  void SelectRenderer(HTML.Event ev) {
  - programJS.enabled = gCpuCompute.checked;
  -  programGPU.enabled = !programJS.enabled;
  - }
   
     void ResizeIons(HTML.Event ev) {
       int n = int.parse(gParticles.value);
  
positive.code:   // JS version setup
    Material matJS = new Material.Transparent("stars", BlendEquationMix)
      ..SetUniform(uTexture, Utils.createParticleTexture(chronosGL))
      ..SetUniform(uPointSize, 200.0);
    MeshData mdJS = programJS.MakeMeshData("mdJS", GL_POINTS)
      ..AddVertices(ionsPos);
    programJS.add(new Node("ionsJS", mdJS, matJS));
  
    // GPU version setup
    Material matGPU = new Material.Transparent("stars", BlendEquationMix)
      ..SetUniform(uTexture, Utils.createParticleTexture(chronosGL))
      ..SetUniform(uPointSize, 200.0)
      ..SetUniform(uSources, ExtractPolePos(srcPoles))
      ..SetUniform(uSinks, ExtractPolePos(dstPoles));
  
negative.code:     ${tPosition} = Update(${aVertexPosition}, gl_Position.xyz);
  }
  """
    ]);
  
  final ShaderObject particleFragmentShader = new ShaderObject("ParticleF")
    ..AddUniformVars([uTexture])
    ..SetBody([
      """
  void main() {
        ${oFragColor} = texture( ${uTexture},  gl_PointCoord);
  }
  """
    ]);
  
  String DumpVec(VM.Vector3 v) => "${v.x} ${v.y} ${v.z}";
  
  