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