anchor.diff:        _indexBufferType = GL_UNSIGNED_INT;
       }
   
  -    if (_locationMap != null) {
  -      _cgl.bindVertexArray(_vao);
  -    }
  +    _cgl.bindVertexArray(_vao);
       _cgl.ChangeElementArrayBuffer(_indexBuffer, _faces as TypedData);
     }
   
  
positive.code:   void AddAttribute(String canonical, List data, int width) {
      _buffers[canonical] = _cgl.createBuffer();
      ChangeAttribute(canonical, data, width);
      if (_locationMap != null) {
        _cgl.bindVertexArray(_vao);
        ShaderVarDesc desc = RetrieveShaderVarDesc(canonical);
        if (desc == null) throw "Unknown canonical ${canonical}";
        assert(_locationMap.containsKey(canonical), "unexpected attribute ${canonical}");
        int index = _locationMap[canonical];
        _cgl.enableVertexAttribArray(index, 0);
        _cgl.vertexAttribPointer(
            _buffers[canonical], index, desc.GetSize(), GL_FLOAT, false, 0, 0);
      }
    }
  
    void AddVertices(Float32List data) {
      final String canonical = aVertexPosition;
      _buffers[canonical] = _cgl.createBuffer();
      ChangeVertices(data);
      if (_locationMap != null) {
        _cgl.bindVertexArray(_vao);
        ShaderVarDesc desc = RetrieveShaderVarDesc(canonical);
        if (desc == null) throw "Unknown canonical ${canonical}";
        assert(_locationMap.containsKey(canonical));
        int index = _locationMap[canonical];
        _cgl.enableVertexAttribArray(index, 0);
        _cgl.vertexAttribPointer(
            _buffers[canonical], index, desc.GetSize(), GL_FLOAT, false, 0, 0);
      }
    }
  
    void ChangeFaces(List<int> faces) {
  
negative.code:   return md;
  }
  
  MeshData ExtractWireframeNormals(ShaderProgram prog, MeshData md,
      [scale = 1.0]) {
    assert(md._drawMode == GL_TRIANGLES);
    MeshData out = prog.MakeMeshData(md.name, GL_LINES);
    final Float32List vertices = md.GetAttribute(aVertexPosition);
  