anchor.diff:  
     FilterRegisterEvent(this.name, this.filter);
   }
  -
  -/// Textures register event.
  -/// Will be reaised when all textures will be registered.
  -class TexturesRegisterEvent {
  -  /// All registered textures.
  -  Map<String, Texture> textures;
  -
  -  TexturesRegisterEvent(this.textures);
  -}
  -
  -/// Filter register event.
  -/// Will be reaised when all filters will be registered.
  -class FiltersRegisterEvent {
  -  /// All registered filters.
  -  Map<String, Filter> filters;
  -
  -  FiltersRegisterEvent(this.filters);
  -}
  
positive.code:         filters = <String, Filter>{} {
      _onFilterRegister = onFilterRegister;
      _onTextureRegister = onTextureRegister;
      _onTextureRegisterCtrl = new StreamController<TextureRegisterEvent>();
      _onFilterRegisterCtrl = new StreamController<FilterRegisterEvent>();
      _onTexturesRegisterCtrl = new StreamController<TexturesRegisterEvent>();
      _onFiltersRegisterCtrl = new StreamController<FiltersRegisterEvent>();
      _filtersToRegister = <String, Filter>{};
      _texturesToRegister = <String, Texture>{};
    }
  
    /// Register texture.
    /// Produce [TextureRegisterEvent] when texture will be registered.
    Future registerTexture(String name, Texture texture) async {
      if (textures.containsKey(name)) {
        window.console.warn("Texture with name \"${name}\" already registered.");
        return;
      }
      _texturesToRegister[name] = texture;
      TextureRegisterEvent event = new TextureRegisterEvent(name, texture);
      _onTextureRegister(event);
      _texturesToRegister.remove(name);
      textures[name] = texture;
      await _onTextureRegisterCtrl
        ..add(event)
        ..done;
    }
  
    /// Register multiply textures.
    /// Produce [TexturesRegisterEvent] when all textures will be registered.
    Future registerTextures(Map<String, Texture> textures) async {
      _texturesToRegister.addAll(textures);
      textures.forEach(await registerTexture);
      if (_texturesToRegister.length == 0)
        await _onTexturesRegisterCtrl
          ..add(new TexturesRegisterEvent(textures))
          ..done;
    }
  
    /// Register filter.
    /// Produce [FilterRegisterEvent] when filter will be registered.
    Future registerFilter(String name, Filter filter) async {
      if (filters.containsKey(name)) {
        window.console.warn("Filter with name \"${name}\" already registered.");
        return;
      }
      _filtersToRegister[name] = filter;
      FilterRegisterEvent event = new FilterRegisterEvent(name, filter);
      _onFilterRegister(event);
      _filtersToRegister.remove(name);
      filters[name] = filter;
      await _onFilterRegisterCtrl
        ..add(new FilterRegisterEvent(name, filter))
        ..done;
    }
  
    /// Register multply filters.
    /// Produce [FiltersRegisterEvent] when all filters will be registered.
    Future registerFilters(Map<String, Filter> filters) async {
      _filtersToRegister.addAll(filters);
      filters.forEach(await registerFilter);
      if (_filtersToRegister.length == 0) {
        await _onFiltersRegisterCtrl
          ..add(new FiltersRegisterEvent(filters))
          ..done;
      }
    }
  
    Stream<TextureRegisterEvent> get onTextureRegister =>
        _onTextureRegisterCtrl.stream;
  
    Stream<FilterRegisterEvent> get onFilterRegister =>
        _onFilterRegisterCtrl.stream;
  
    Stream<TexturesRegisterEvent> get onTexturesRegister =>
        _onTexturesRegisterCtrl.stream;
  
    Stream<FiltersRegisterEvent> get onFiltersRegister =>
        _onFiltersRegisterCtrl.stream;
  }
  
  /// Texture register event.
  
negative.code:   /// Registered filters.
    Map<String, Filter> filters;
  
    AssetManager(
        {void onFilterRegister(FilterRegisterEvent e),
        void onTextureRegister(TextureRegisterEvent e)})
  