public void Build(bool isMainThread = false) { Atlas.Register(tex); foreach (var tile in tiles3D.Values) { tile.InitData(sizeZ); } if (sizeZ > 0) { switch (geo) { case Geo3DType.CUBE: BuildCubeModel(); break; case Geo3DType.VCYLINDER: BuildVCylinderModel(); break; case Geo3DType.HCYLINDER: BuildHCylinderModel(); break; case Geo3DType.Default: BuildDefaultModel(); break; case Geo3DType.HALFVCYLINDER: BuildHalfVCylinderModel(); break; case Geo3DType.HALFHCYLINDER: BuildHalfHCylinderModel(); break; default: break; } } state = State.GeoCreated; foreach (var tile in tiles3D.Values) { tile.GenerateMesh(); } foreach (var tile in tiles3D.Values) { tile.ReleasePixelData(); } state = State.DataCreated; if (isMainThread) { SetMesh(); } else { Misc.RunInMainThread(() => SetMesh()); } }