private void ReadGameCubeData(BinaryReader binaryReader) { binaryReader.BaseStream.Position += 2; byte addressMode = binaryReader.ReadByte(); addressModeU = (TextureAddressMode)((addressMode & 0xF0) >> 4); addressModeV = (TextureAddressMode)(addressMode & 0x0F); filterMode = (TextureFilterMode)binaryReader.ReadByte(); gcnUnknown1 = Shared.Switch(binaryReader.ReadInt32()); gcnUnknown2 = Shared.Switch(binaryReader.ReadInt32()); gcnUnknown3 = Shared.Switch(binaryReader.ReadInt32()); gcnUnknown4 = Shared.Switch(binaryReader.ReadInt32()); textureName = ReadString(binaryReader); alphaName = ReadString(binaryReader); if (ReadFileMethods.treatStuffAsByteArray) { sectionData = binaryReader.ReadBytes((int)(sectionSize - (binaryReader.BaseStream.Position - startSectionPosition))); return; } rasterFormatFlags = (TextureRasterFormat)Shared.Switch(binaryReader.ReadInt32()); width = Shared.Switch(binaryReader.ReadInt16()); height = Shared.Switch(binaryReader.ReadInt16()); bitDepth = binaryReader.ReadByte(); mipMapCount = binaryReader.ReadByte(); type = binaryReader.ReadByte(); compression = binaryReader.ReadByte(); int palleteSize = ((rasterFormatFlags & TextureRasterFormat.RASTER_PAL4) != 0) ? 0x80 / 4 : ((rasterFormatFlags & TextureRasterFormat.RASTER_PAL8) != 0) ? 0x400 / 4 : 0; if (palleteSize != 0) { palette = new Color[palleteSize]; for (int i = 0; i < palleteSize; i++) { palette[i] = new Color(binaryReader.ReadInt32()); } } mipMaps = new MipMapEntry[mipMapCount]; for (int i = 0; i < mipMapCount; i++) { int dataSize = Shared.Switch(binaryReader.ReadInt32()); byte[] data = binaryReader.ReadBytes(dataSize); mipMaps[i] = new MipMapEntry(dataSize, data); } }
private void ReadNormalData(BinaryReader binaryReader, int endOfSectionPosition) { filterMode = (TextureFilterMode)binaryReader.ReadByte(); byte addressMode = binaryReader.ReadByte(); addressModeU = (TextureAddressMode)((addressMode & 0xF0) >> 4); addressModeV = (TextureAddressMode)(addressMode & 0x0F); binaryReader.BaseStream.Position += 2; textureName = ReadString(binaryReader); alphaName = ReadString(binaryReader); rasterFormatFlags = (TextureRasterFormat)binaryReader.ReadInt32(); hasAlpha = binaryReader.ReadInt32() != 0; width = binaryReader.ReadInt16(); height = binaryReader.ReadInt16(); bitDepth = binaryReader.ReadByte(); mipMapCount = binaryReader.ReadByte(); type = binaryReader.ReadByte(); compression = binaryReader.ReadByte(); if (platformType == 5) { totalMipMapDataSize = binaryReader.ReadInt32(); } int palleteSize = ((rasterFormatFlags & TextureRasterFormat.RASTER_PAL4) != 0) ? 0x80 / 4 : ((rasterFormatFlags & TextureRasterFormat.RASTER_PAL8) != 0) ? 0x400 / 4 : 0; if (palleteSize != 0) { palette = new Color[palleteSize]; for (int i = 0; i < palleteSize; i++) { palette[i] = new Color(binaryReader.ReadInt32()); } } int passedSize = 0; mipMaps = new MipMapEntry[mipMapCount]; for (int i = 0; i < mipMapCount; i++) { int dataSize = 0; if (platformType == 8) { dataSize = binaryReader.ReadInt32(); } else if (platformType == 5) { dataSize = BiggestPowerOfTwoUnder(totalMipMapDataSize - passedSize); } byte[] data = binaryReader.ReadBytes(dataSize); mipMaps[i] = new MipMapEntry(dataSize, data); passedSize += dataSize; } }