public static MemorySaved ( int originalWidth, int originalHeight, TextureFormat originalFormat, bool originalMipmaps, GameDatabase Texture ) : int | ||
originalWidth | int | |
originalHeight | int | |
originalFormat | TextureFormat | |
originalMipmaps | bool | |
Texture | GameDatabase | |
return | int |
public static int MemorySaved(int originalWidth, int originalHeight, TextureFormat originalFormat, bool originalMipmaps, GameDatabase.TextureInfo Texture)
{
int width = Texture.texture.width;
int height = Texture.texture.height;
TextureFormat format = Texture.texture.format;
bool mipmaps = Texture.texture.mipmapCount == 1 ? false : true;
ActiveTextureManagement.DBGLog("Texture: " + Texture.name);
ActiveTextureManagement.DBGLog("is normalmap: " + Texture.isNormalMap);
Texture2D tex = Texture.texture;
ActiveTextureManagement.DBGLog("originalWidth: " + originalWidth);
ActiveTextureManagement.DBGLog("originalHeight: " + originalHeight);
ActiveTextureManagement.DBGLog("originalFormat: " + originalFormat);
ActiveTextureManagement.DBGLog("originalMipmaps: " + originalMipmaps);
ActiveTextureManagement.DBGLog("width: " + width);
ActiveTextureManagement.DBGLog("height: " + height);
ActiveTextureManagement.DBGLog("format: " + format);
ActiveTextureManagement.DBGLog("mipmaps: " + mipmaps);
bool readable = true;
try { tex.GetPixel(0, 0); }
catch { readable = false; };
ActiveTextureManagement.DBGLog("readable: " + readable);
if (readable != Texture.isReadable)
{ ActiveTextureManagement.DBGLog("Readbility does not match!"); }
int oldSize = 0;
int newSize = 0;
switch (originalFormat)
{
case TextureFormat.ARGB32:
case TextureFormat.RGBA32:
case TextureFormat.BGRA32:
oldSize = 4 * (originalWidth * originalHeight);
break;
case TextureFormat.RGB24:
oldSize = 3 * (originalWidth * originalHeight);
break;
case TextureFormat.Alpha8:
oldSize = originalWidth * originalHeight;
break;
case TextureFormat.DXT1:
oldSize = (originalWidth * originalHeight) / 2;
break;
case TextureFormat.DXT5:
oldSize = originalWidth * originalHeight;
break;
}
switch (format)
{
case TextureFormat.ARGB32:
case TextureFormat.RGBA32:
case TextureFormat.BGRA32:
newSize = 4 * (width * height);
break;
case TextureFormat.RGB24:
newSize = 3 * (width * height);
break;
case TextureFormat.Alpha8:
newSize = width * height;
break;
case TextureFormat.DXT1:
newSize = (width * height) / 2;
break;
case TextureFormat.DXT5:
newSize = width * height;
break;
}
if (originalMipmaps)
{
oldSize += (int)(oldSize * .33f);
}
if (mipmaps)
{
newSize += (int)(newSize * .33f);
}
return (oldSize - newSize);
}
private void updateMemoryCount(int originalWidth, int originalHeight, TextureFormat originalFormat, bool originalMipmaps, GameDatabase.TextureInfo Texture, String folder) { int saved = CacheController.MemorySaved(originalWidth, originalHeight, originalFormat, originalMipmaps, Texture); memorySaved += saved; if (!folderBytesSaved.ContainsKey(folder)) { folderBytesSaved.Add(folder, 0); } long folderSaved = folderBytesSaved[folder] + saved; folderBytesSaved[folder] = folderSaved; Log("Saved " + saved + "B"); Log("Accumulated Saved " + memorySaved + "B"); }