Beispiel #1
0
    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;
    }
Beispiel #2
0
    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();
        }
    }