anchor.diff:  
     @override
     void Remove(String canonical) {
  -    assert(_inputs.containsKey(canonical));
  -    _inputs.remove(canonical);
  +    assert(_uniforms.containsKey(canonical));
  +    _uniforms.remove(canonical);
       _origin.remove(canonical);
     }
   }
  
positive.code: 
    // TODO: this should contain all the state, including blending, depth writing
    // and detect incompatible settings
    Map<String, dynamic> _inputs = {};
    Map<String, NamedEntity> _origin = {};
  
    int _nextTextureUnit;
  
negative.code:     if (node.SomethingToDraw()) {
        LogDebug("drawing: ${node}");
        node.AddShaderInputs(this);
        _drawOne(node.meshData, _uniforms, stats);
        node.RemoveShaderInputs(this);
      }
      for (Node child in node.children) {
  