Ejemplo n.º 1
0
        public override void OnRebuild(VoidPtr address, int length, bool force)
        {
            int offset = OffsetToData();

            if (!SharesData)
            {
                Memory.Move(address + offset, WorkingUncompressed.Address + offset, (uint)length - (uint)offset);
            }

            switch (Version)
            {
            case 1:
                *(TEX0v1 *)address = new TEX0v1(Width, Height, Format, LevelOfDetail, offset);
                break;

            case 2:
                *(TEX0v2 *)address = new TEX0v2(Width, Height, Format, LevelOfDetail, offset);
                break;

            case 3:
                *(TEX0v3 *)address = new TEX0v3(Width, Height, Format, LevelOfDetail, offset);
                _userEntries.Write(address + TEX0v3.Size);
                break;
            }
        }
Ejemplo n.º 2
0
        public virtual FileMap EncodeTEX0Texture(Bitmap src, int mipLevels)
        {
            int w = src.Width, h = src.Height;
            int bw = BlockWidth, bh = BlockHeight;

            PixelFormat fmt = src.IsIndexed() ? src.PixelFormat : PixelFormat.Format32bppArgb;

            FileMap fileView = FileMap.FromTempFile(GetFileSize(w, h, mipLevels) + 0x40);

            try
            {
                //Build TEX header
                TEX0v1 *header = (TEX0v1 *)fileView.Address;
                *       header = new TEX0v1(w, h, RawFormat, mipLevels);

                int sStep = bw * Image.GetPixelFormatSize(fmt) / 8;
                int dStep = bw * bh * BitsPerPixel / 8;

                using (DIB dib = DIB.FromBitmap(src, bw, bh, fmt))
                    for (int i = 1; i <= mipLevels; i++)
                    {
                        EncodeLevel(header->PixelData, dib, src, dStep, sStep, i);
                    }

                return(fileView);
            }
            catch (Exception x)
            {
                MessageBox.Show(x.ToString());
                fileView.Dispose();
                return(null);
            }
        }
Ejemplo n.º 3
0
        public unsafe static void WriteTEX0(this Stream outputStream, TEX0v1 header)
        {
            TEX0v1 *headerPtr = &header;

            using (var inputStream = new UnmanagedMemoryStream((byte *)headerPtr, sizeof(TEX0v1))) {
                inputStream.CopyTo(outputStream);
            }
        }
Ejemplo n.º 4
0
 private static TEX0Node NullTEX0Node()
 {
     if (_nullTEX0Node == null)
     {
         TEX0v1 NullTEX0Header = new TEX0v1(0, 0, WiiPixelFormat.CMPR, 1);
         _nullTEX0Node = new TEX0Node();
         _nullTEX0Node.Initialize(null, &NullTEX0Header, sizeof(TEX0v1));
     }
     return(_nullTEX0Node);
 }
Ejemplo n.º 5
0
        public static byte[] WTEToTEX0(Stream inputStream)
        {
            WTE oldHeader = inputStream.ReadWTE();

            if (oldHeader.tag != "WTE\0")
            {
                throw new Exception("The input file does not appear to be a WTE file.");
            }

            TEX0v1 newHeader = new TEX0v1(oldHeader.width, oldHeader.height, WiiPixelFormat.RGB5A3, 1);

            using (var outputStream = new MemoryStream()) {
                outputStream.WriteTEX0(newHeader);
                inputStream.CopyTo(outputStream);
                return(outputStream.ToArray());
            }
        }
Ejemplo n.º 6
0
        public static byte[] TEX0ToWTE(Stream inputStream)
        {
            TEX0v1 oldHeader = inputStream.ReadTEX0();

            if (oldHeader._header._tag != "TEX0")
            {
                throw new Exception("The input file does not appear to be a TEX0 file.");
            }
            if (oldHeader.PixelFormat != WiiPixelFormat.RGB5A3)
            {
                throw new Exception("The format of the TEX0 file is not RGB5A3.");
            }

            WTE newHeader = new WTE(oldHeader._width, oldHeader._height);

            using (var outputStream = new MemoryStream()) {
                outputStream.WriteWTE(newHeader);
                inputStream.CopyTo(outputStream);
                return(outputStream.ToArray());
            }
        }
Ejemplo n.º 7
0
        public override void OnRebuild(VoidPtr address, int length, bool force)
        {
            int offset = 0x40 + (_version == 3 ? _userEntries.GetSize() : 0);

            Memory.Move(address + offset, WorkingUncompressed.Address + offset, (uint)length - (uint)offset);
            switch (Version)
            {
            case 1:
                *(TEX0v1 *)address = new TEX0v1(_width, _height, Format, _lod);
                break;

            case 2:
                *(TEX0v2 *)address = new TEX0v2(_width, _height, Format, _lod);
                break;

            case 3:
                TEX0v3 *v3 = (TEX0v3 *)address;
                *       v3 = new TEX0v3(_width, _height, Format, _lod);
                _userEntries.Write(address + 0x40);
                v3->_headerLen = offset;
                break;
            }
        }