anchor.diff:  
     md.AddFaces4(radialSubdivisions);
     for (int i = 0; i < radialSubdivisions; i++) {
  -    md.AddVertices([top[i+1], top[i], bot[i], bot[i+1]]);
  +    md.AddVertices([top[i + 1], top[i], bot[i], bot[i + 1]]);
       // TODO: fix these
       md.AddAttributesVector2(aTextureCoordinates, [zero, zero, zero, zero]);
     }
  
positive.code: 
  MeshData createCylinderInternalWireframeFriendly(
      double radTop, double radBot, double height, int radialSubdivisions) {
    final double halfHeight = height / 2;
    List<VM.Vector3> top = [];
    List<VM.Vector3> bot = [];
    for (int i = 0; i < radialSubdivisions; i++) {
      double u = i / radialSubdivisions;
      top.add(new VM.Vector3(radTop * Math.sin(u * Math.PI * 2), halfHeight,
          radTop * Math.cos(u * Math.PI * 2)));
      bot.add(new VM.Vector3(radBot * Math.sin(u * Math.PI * 2), -halfHeight,
          radBot * Math.cos(u * Math.PI * 2)));
    }
    top.add(top[0]);
    bot.add(bot[0]);
  
    VM.Vector2 zero = new VM.Vector2(0.0, 0.0);
    MeshData md = new MeshData();
    md.name = "cylinder-wireframe-friendly";
    md.EnableAttribute(aTextureCoordinates);
    final VM.Vector3 centerTop = new VM.Vector3(0.0, halfHeight, 0.0);
    final VM.Vector3 centerBot = new VM.Vector3(0.0, -halfHeight, 0.0);
    md.AddFaces3(2 * radialSubdivisions);
    for (int i = 0; i < radialSubdivisions; i++) {
      md.AddVertices([centerTop, top[i], top[i + 1]]);
  
negative.code: // uv mapping is weird to help with debugging
  
  MeshData createCylinderInternal(
      double radTop, double radBot, double height, int radialSubdivisions) {
    MeshData md = new MeshData();
    md.name = "cylinder";
    md.EnableAttribute(aTextureCoordinates);
  