void CreateCacheImage() { MegaCacheOBJ mod = (MegaCacheOBJ)target; if (mod.cacheimage) { mod.DestroyImage(); } MegaCacheImage img = CreateInstance <MegaCacheImage>(); img.maxv = 0; img.maxsm = 0; for (int i = 0; i < mod.meshes.Count; i++) { if (mod.meshes[i].vertexCount > img.maxv) { img.maxv = mod.meshes[i].vertexCount; } int sub = mod.meshes[i].subMeshCount; if (sub > img.maxsm) { img.maxsm = sub; } } img.smfc = new int[img.maxsm]; for (int i = 0; i < mod.meshes.Count; i++) { for (int s = 0; s < mod.meshes[i].subMeshCount; s++) { int len = mod.meshes[i].GetTriangles(s).Length; if (len > img.smfc[s]) { img.smfc[s] = len; } } } for (int i = 0; i < mod.meshes.Count; i++) { Mesh ms = mod.meshes[i]; MegaCacheImageFrame frame = MegaCacheImage.CreateImageFrame(ms); img.frames.Add(frame); } img.CalcMemory(); mod.cacheimage = img; }
public void CreateImageFromCacheFile() { if (br == null) { OpenCache(cachefile); } if (br != null) { if (cacheimage) { DestroyImage(); } MegaCacheImage img = (MegaCacheImage)ScriptableObject.CreateInstance <MegaCacheImage>(); img.maxv = maxv; img.maxsm = maxsm; img.smfc = new int[maxsm]; for (int i = 0; i < maxsm; i++) { img.smfc[i] = subs[i].max; } Mesh mesh = new Mesh(); for (int i = 0; i < framecount; i++) { MakeMeshFromFrame(i, mesh); MegaCacheImageFrame frame = MegaCacheImage.CreateImageFrame(mesh); img.frames.Add(frame); } cacheimage = img; ChangeSource(MegaCacheData.Image); if (Application.isEditor) { DestroyImmediate(mesh); } else { Destroy(mesh); } mesh = null; GC.Collect(); } }