//on xbox 360 these texture formats must have dimensions that are multiples of these values. //if the bitmap dimensions are not multiples they are rounded up and cropped when displayed. private static int GetTileSize(KnownTextureFormat format) { switch (format) { case KnownTextureFormat.A8: case KnownTextureFormat.Y8: case KnownTextureFormat.AY8: case KnownTextureFormat.A8Y8: case KnownTextureFormat.A8R8G8B8: case KnownTextureFormat.X8R8G8B8: case KnownTextureFormat.A4R4G4B4: case KnownTextureFormat.R5G6B5: case KnownTextureFormat.U8V8: return(32); case KnownTextureFormat.DXT5a_mono: case KnownTextureFormat.DXT5a_alpha: case KnownTextureFormat.DXT1: case KnownTextureFormat.CTX1: case KnownTextureFormat.DXT5a: case KnownTextureFormat.DXT3a_alpha: case KnownTextureFormat.DXT3a_mono: case KnownTextureFormat.DXT3: case KnownTextureFormat.DXT5: case KnownTextureFormat.DXN: case KnownTextureFormat.DXN_mono_alpha: return(128); default: return(1); } }
//the size in bytes of each compressed block private static int GetLinearTexelPitch(KnownTextureFormat format) { switch (format) { case KnownTextureFormat.DXT5a_mono: case KnownTextureFormat.DXT5a_alpha: case KnownTextureFormat.DXT1: case KnownTextureFormat.CTX1: case KnownTextureFormat.DXT5a: case KnownTextureFormat.DXT3a_alpha: case KnownTextureFormat.DXT3a_mono: return(8); case KnownTextureFormat.DXT3: case KnownTextureFormat.DXT5: case KnownTextureFormat.DXN: case KnownTextureFormat.DXN_mono_alpha: return(16); case KnownTextureFormat.A8: case KnownTextureFormat.AY8: case KnownTextureFormat.P8: case KnownTextureFormat.P8_bump: case KnownTextureFormat.Y8: return(1); case KnownTextureFormat.A8R8G8B8: case KnownTextureFormat.X8R8G8B8: return(4); default: return(2); } }
//the size in bytes of each read/write unit //ie 32bit uses ints, DXT uses shorts etc. Used for endian swaps. private static int GetLinearUnitSize(KnownTextureFormat format) { switch (format) { case KnownTextureFormat.A8R8G8B8: case KnownTextureFormat.X8R8G8B8: return(4); case KnownTextureFormat.A8: case KnownTextureFormat.Y8: case KnownTextureFormat.AY8: case KnownTextureFormat.P8_bump: return(1); default: return(2); } }
//the width and height in pixels of each compressed block private static int GetLinearBlockSize(KnownTextureFormat format) { switch (format) { case KnownTextureFormat.DXT5a_mono: case KnownTextureFormat.DXT5a_alpha: case KnownTextureFormat.DXT1: case KnownTextureFormat.CTX1: case KnownTextureFormat.DXT5a: case KnownTextureFormat.DXT3a_alpha: case KnownTextureFormat.DXT3a_mono: case KnownTextureFormat.DXT3: case KnownTextureFormat.DXT5: case KnownTextureFormat.DXN: case KnownTextureFormat.DXN_mono_alpha: return(4); default: return(1); } }
//number of bits used to store each pixel private static int GetBpp(KnownTextureFormat format) { switch (format) { case KnownTextureFormat.A8R8G8B8: case KnownTextureFormat.X8R8G8B8: case KnownTextureFormat.ARGBFP32: case KnownTextureFormat.RGBFP32: return(32); case KnownTextureFormat.A8: case KnownTextureFormat.Y8: case KnownTextureFormat.AY8: case KnownTextureFormat.P8_bump: return(8); case KnownTextureFormat.CTX1: case KnownTextureFormat.DXT1: case KnownTextureFormat.DXT3a_alpha: case KnownTextureFormat.DXT3a_mono: case KnownTextureFormat.DXT5a: case KnownTextureFormat.DXT5a_alpha: case KnownTextureFormat.DXT5a_mono: case KnownTextureFormat.BC4_unorm: return(4); case KnownTextureFormat.DXT3: case KnownTextureFormat.DXT5: case KnownTextureFormat.DXN: case KnownTextureFormat.DXN_mono_alpha: case KnownTextureFormat.BC7_unorm: return(8); default: return(16); } }