anchor.diff:      properties.SetFilterNearest();
     }
   
  +  void UpdateContent(WEBGL.RenderingContext gl, int w, int h, var data) {
  +    _data = data;
  +    _width = w;
  +    _height = h;
  +    gl.bindTexture(WEBGL.TEXTURE_2D, _texture);
  +    gl.texImage2DTyped(WEBGL.TEXTURE_2D, 0, _formatType, _width, _height, 0,
  +        _formatType, _dataType, _data);
  +    gl.bindTexture(WEBGL.TEXTURE_2D, null);
  +  }
  +
     void Install(WEBGL.RenderingContext gl) {
       _texture = gl.createTexture();
       gl.bindTexture(WEBGL.TEXTURE_2D, _texture);
  
positive.code:   }
  
    Texture(this._url) {
      assert(!_cache.containsKey(_url));
      _cache[_url] = this;
    }
  
    WEBGL.Texture GetTexture() {
  
negative.code: 
    TextureProperties properties = new TextureProperties();
  
    static List<Texture> _cache = [];
  
  
    static Future<dynamic> loadAndInstallAllTextures(WEBGL.RenderingContext gl) {
      List<Future<HTML.Event>> futures = [];
      for (Texture tw in _cache) {
        Future<dynamic> f = tw.GetFuture();
        if (f != null) futures.add(f);
      }
      return Future.wait(futures).then((List list) {
        LogInfo("All images have loaded");
        for (Texture tw in _cache) {
          if (tw._texture != null) continue;
          tw.Install(gl);
        }
  