anchor.diff:      }
     }
   
  -  get frameBuffer => _frameBuf;
  -  get frameTexture => _frameTex;
  -
  -  Framebuffer _frameBuf;
  -  Renderbuffer _frameRenderBuf;
  -  Texture _frameTex;
  -
  -  enableFrameBuffer([int width = -1, int height = -1]) {
  -    disableFrameBuffer();
  -    if (width < 0) width = gl.canvas.width;
  -    if (height < 0) height = gl.canvas.height;
  -
  -    _frameBuf = gl.createFramebuffer();
  -    gl.bindFramebuffer(FRAMEBUFFER, _frameBuf);
  -
  -    _frameTex = gl.createTexture();
  -    gl.bindTexture(TEXTURE_2D, _frameTex);
  -    gl.texImage2DTyped(TEXTURE_2D, 0, RGBA, width, height, 0, RGBA, UNSIGNED_BYTE, null);
  -    gl.texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, LINEAR);
  -    gl.texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, LINEAR_MIPMAP_NEAREST);
  -    gl.generateMipmap(TEXTURE_2D);
  -
  -    _frameRenderBuf = gl.createRenderbuffer();
  -    gl.bindRenderbuffer(RENDERBUFFER, _frameRenderBuf);
  -    gl.renderbufferStorage(RENDERBUFFER, DEPTH_COMPONENT16, width, height);
  -
  -    gl.framebufferTexture2D(FRAMEBUFFER, COLOR_ATTACHMENT0, TEXTURE_2D, _frameTex, 0);
  -    gl.framebufferRenderbuffer(FRAMEBUFFER, DEPTH_ATTACHMENT, RENDERBUFFER, _frameRenderBuf);
  -
  -    gl.bindTexture(TEXTURE_2D, null);
  -    gl.bindRenderbuffer(RENDERBUFFER, null);
  -    gl.bindFramebuffer(FRAMEBUFFER, null);
  -  }
  -
  -  disableFrameBuffer() {
  -    if (_frameRenderBuf != null) {
  -      gl.deleteRenderbuffer(_frameRenderBuf);
  -      _frameRenderBuf = null;
  -    }
  -    if (_frameTex != null) {
  -      gl.deleteTexture(_frameTex);
  -      _frameTex = null;
  -    }
  -    if (_frameBuf == null) {
  -      gl.deleteFramebuffer(_frameBuf);
  -      _frameBuf = null;
  -    }
  -  }
     //TODO should be to most optimized call
     run() {
       _teardowns.forEach((f) => f(gl));
  
positive.code:   final _onAddProgramCtxs = new List<RunOnProgramContextRegistration>();
    final _onRemoveProgramCtxs = new List<RunOnProgramContextRegistration>();
    final _autoData = new Map<String, RunOnProgramContext>();
  
    ProgramsRunner(this.gl);
  
  
negative.code:     });
  
      _afterAlls.forEach((f) => f(gl));
      if (fbo != null) {
        gl.bindFramebuffer(FRAMEBUFFER, null);
      }
  
  