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; }