anchor.diff:    void ForceInput(String canonical, var val, [NamedEntity origin = null]) {
       if (RetrieveShaderVarDesc(canonical) == null) throw "unknown ${canonical}";
       if (origin == null) origin = kUnknownEntity;
  -    _inputs[canonical] = val;
  +    _uniforms[canonical] = val;
       _origin[canonical] = origin;
     }
   
     @override
     void SetInput(String canonical, var val, [NamedEntity origin = null]) {
  -    if (_inputs.containsKey(canonical)) {
  +    if (_uniforms.containsKey(canonical)) {
         LogError("canonical already present: ${canonical}");
         assert(false);
       }
  
positive.code: 
    @override
    void Remove(String canonical) {
      assert(_inputs.containsKey(canonical));
      _inputs.remove(canonical);
      _origin.remove(canonical);
    }
  }
  
negative.code: 
    // TODO: this should contain all the state, including blending, depth writing
    // and detect incompatible settings
    Map<String, dynamic> _uniforms = {};
    // Where the input came from
    Map<String, NamedEntity> _origin = {};
  
    int _nextTextureUnit;
  