anchor.diff:        ctx.gl.uniform3fv(ctx.getUniformLocation(glf.SFNAME_FOCUSPOSITION), camera.focusPosition.storage);
         _os.forEach((x){if (x.at != null) { x.at(ctx); }});
       });
  -    print("_updateShader");
       _needShaderUpdate = false;
     }
   
  
positive.code:   String de;
    /// code of the signed distance of the object (shape)
    String sd;
    /// shade fragment to insert into the shade
    String sh;
    /// code of the material of the object
  
negative.code: 
    _updateShader() {
      var frag = makeShader(_os, tmpl:tmpl, stepmax: stepmax, epsilon_de:epsilon_de, nearLight: nearLight);
      if (debugPrintFragShader) {
        print("_updateShader");
        print(frag);
      }
      _post2d.filters[0] = new glf.Filter2D(gl, frag, (ctx){
        ctx.gl.uniform1f(ctx.getUniformLocation(glf.SFNAME_NEAR), camera.near);
        ctx.gl.uniform1f(ctx.getUniformLocation(glf.SFNAME_FAR), camera.far);
  