private void WritePalette(BinaryWriter writer) { Color[][] outPaletteEntries = null; int paletteWH = PS2PixelFormatHelper.GetPaletteDimension(PaletteFormat); if (PaletteColorCount == 256) { outPaletteEntries = new Color[PaletteCount][]; // Tile the palette for (int i = 0; i < PaletteCount; i++) { PS2PixelFormatHelper.TilePalette(Palettes[i], out outPaletteEntries[i]); } } else { outPaletteEntries = Palettes; } for (int i = 0; i < PaletteCount; i++) { PS2PixelFormatHelper.WritePixelData(PaletteFormat, writer, paletteWH, paletteWH, outPaletteEntries[i]); } }
/// <summary> /// Read the palette from the stream using given pixel format, untile it, and set the data as the palette member value. /// </summary> private void ReadPalette(BinaryReader reader) { int paletteWH = PS2PixelFormatHelper.GetPaletteDimension(RasterInfoStructNode.Tex0Register.TexturePixelFormat); PS2PixelFormatHelper.ReadPixelData(RasterInfoStructNode.Tex0Register.ClutPixelFormat, reader, paletteWH, paletteWH, out mPalette); if (paletteWH == 16) { PS2PixelFormatHelper.TilePalette(mPalette, out mPalette); } }
/// <summary> /// Make a copy of the palette, tile it, and write the palette to the stream using set pixel format. /// </summary> private void WritePalette(BinaryWriter writer) { int paletteWH = PS2PixelFormatHelper.GetPaletteDimension(RasterInfoStructNode.Tex0Register.TexturePixelFormat); Color[] outPalette; if (paletteWH == 16) { PS2PixelFormatHelper.TilePalette(mPalette, out outPalette); } else { outPalette = mPalette; } switch (RasterInfoStructNode.Tex0Register.ClutPixelFormat) { case PS2PixelFormat.PSMZ32: case PS2PixelFormat.PSMTC32: PS2PixelFormatHelper.WritePSMCT32(writer, paletteWH, paletteWH, outPalette); break; case PS2PixelFormat.PSMZ24: case PS2PixelFormat.PSMTC24: PS2PixelFormatHelper.WritePSMCT24(writer, paletteWH, paletteWH, outPalette); break; case PS2PixelFormat.PSMZ16: case PS2PixelFormat.PSMTC16: PS2PixelFormatHelper.WritePSMCT16(writer, paletteWH, paletteWH, outPalette); break; case PS2PixelFormat.PSMZ16S: case PS2PixelFormat.PSMTC16S: PS2PixelFormatHelper.WritePSMCT16S(writer, paletteWH, paletteWH, outPalette); break; default: throw new NotImplementedException(); } }