anchor.diff:      for (Node node in objects) {
         if (node.enabled) node.draw(this, mvMatrix);
       }
  -    _program.End(_gl, debug);
  +    _program.End(debug);
     }
   }
  
positive.code:           default:
              throw "unknown texture ";
          }
          gl.activeTexture(WEBGL.TEXTURE0 + n);
          gl.bindTexture(WEBGL.TEXTURE_2D, val.GetTexture());
          gl.uniform1i(l, n);
          break;
        case "samplerCube":
          assert(canonical == uTextureCubeSampler);
          int n = (_uniformLocations.containsKey(uTextureSampler) ? 1 : 0) +
              (_uniformLocations.containsKey(uTexture2Sampler) ? 1 : 0);
          gl.activeTexture(WEBGL.TEXTURE0 + n);
          gl.bindTexture(WEBGL.TEXTURE_CUBE_MAP, val.GetTexture());
          gl.uniform1i(l, n);
          break;
        default:
          print("Error: unknow uniform type: ${desc.type}");
  
negative.code:     for (String canonical in inputs.GetCanonicals()) {
        var val = inputs.GetUniformVal(canonical);
        if (_program.HasUniform(canonical)) {
          _program.SetUniform(canonical, val);
        }
      }
    }
  