public DXT5Block(EndianBinaryReader reader, DXTxBlockLayout blockLayout) { byte bits_5, bits_4, bits_3, bits_2, bits_1, bits_0; switch (blockLayout) { case DXTxBlockLayout.Normal: Alpha0 = reader.ReadByte(); Alpha1 = reader.ReadByte(); bits_5 = reader.ReadByte(); bits_4 = reader.ReadByte(); bits_3 = reader.ReadByte(); bits_2 = reader.ReadByte(); bits_1 = reader.ReadByte(); bits_0 = reader.ReadByte(); Bits = DXTC.ExtractBits((((ulong)bits_0 << 40) | ((ulong)bits_1 << 32) | ((ulong)bits_2 << 24) | ((ulong)bits_3 << 16) | ((ulong)bits_4 << 8) | (ulong)bits_5), 3); Color = new DXT1Block(reader, blockLayout); break; case DXTxBlockLayout.PSP: Color = new DXT1Block(reader, blockLayout); Alpha0 = reader.ReadByte(); Alpha1 = reader.ReadByte(); bits_5 = reader.ReadByte(); bits_4 = reader.ReadByte(); bits_3 = reader.ReadByte(); bits_2 = reader.ReadByte(); bits_1 = reader.ReadByte(); bits_0 = reader.ReadByte(); Bits = DXTC.ExtractBits((((ulong)bits_0 << 40) | ((ulong)bits_1 << 32) | ((ulong)bits_2 << 24) | ((ulong)bits_3 << 16) | ((ulong)bits_4 << 8) | (ulong)bits_5), 3); break; default: throw new Exception("Unknown block layout"); } }
public DXT1Block(EndianBinaryReader reader, DXTxBlockLayout blockLayout) { byte color0_hi, color0_lo, color1_hi, color1_lo, bits_3, bits_2, bits_1, bits_0; switch (blockLayout) { case DXTxBlockLayout.Normal: color0_hi = reader.ReadByte(); color0_lo = reader.ReadByte(); color1_hi = reader.ReadByte(); color1_lo = reader.ReadByte(); bits_3 = reader.ReadByte(); bits_2 = reader.ReadByte(); bits_1 = reader.ReadByte(); bits_0 = reader.ReadByte(); break; case DXTxBlockLayout.PSP: bits_3 = reader.ReadByte(); bits_2 = reader.ReadByte(); bits_1 = reader.ReadByte(); bits_0 = reader.ReadByte(); color0_hi = reader.ReadByte(); color0_lo = reader.ReadByte(); color1_hi = reader.ReadByte(); color1_lo = reader.ReadByte(); break; default: throw new Exception("Unknown block layout"); } Bits = DXTC.ExtractBits((((uint)bits_0 << 24) | ((uint)bits_1 << 16) | ((uint)bits_2 << 8) | (uint)bits_3), 2); Color0 = (ushort)(((ushort)color0_lo << 8) | (ushort)color0_hi); Color1 = (ushort)(((ushort)color1_lo << 8) | (ushort)color1_hi); }