コード例 #1
0
        internal static bool WriteTo(Texture2D cacheTexture, string cacheFile, bool compress)
        {
            String directory = Path.GetDirectoryName(cacheFile + ".none");
            if (File.Exists(directory))
            {
                File.Delete(directory);
            }
            Directory.CreateDirectory(directory);
            FileStream imgStream = new FileStream(cacheFile, FileMode.Create, FileAccess.Write);
            imgStream.Position = 0;
            //byte[] png = cacheTexture.EncodeToPNG();
            byte[] img = cacheTexture.bytes(0);
            SquishFlags compression = SquishFlags.kDxt5;
            TextureFormat format = TextureFormat.DXT5;

            bool hasAlpha = texHasAlpha(img);
            if(!hasAlpha)
            {
                compression = SquishFlags.kDxt1;
                format = TextureFormat.DXT1;
            }

            for (int i = 0; i < cacheTexture.mipmapCount; i++)
            {
                int width = Math.Max(1, cacheTexture.width >> i);
                int height = Math.Max(1, cacheTexture.height >> i);
                if (compress)
                {
                    if (i != 0)
                    {
                        img = cacheTexture.bytes(i);
                    }
                    int size = squish.GetStorageRequirements(width, height, compression);
                    if (DatabaseLoaderTexture_ATM.UseSquish)
                    {
                        squish.CompressImage(img, width, height, imageBuffer, compression | SquishFlags.kColourIterativeClusterFit | SquishFlags.kWeightColourByAlpha, DatabaseLoaderTexture_ATM.WaitOnDone);
                    }
                    else
                    {
                        TextureToolsDXT.GetDXT(cacheTexture, i, imageBuffer, format);
                    }
                    imgStream.Write(imageBuffer, 0, size);
                }
                else
                {
                    img = cacheTexture.bytes(i, hasAlpha);
                    imgStream.Write(img, 0, img.Length);
                }
                if(width == 1 || height == 1)
                {
                    break;
                }
            }
            imgStream.Close();
            return hasAlpha;
        }