Esempio n. 1
0
        private static List <XboxBitmap> ParseImages(XboxBitmap xboxBitmap, Bitmap.Image image, byte[] imageData, int bitmapSize)
        {
            List <XboxBitmap> xboxBitmaps = new List <XboxBitmap>();

            switch (image.Type)
            {
            case BitmapType.Texture2D:
                xboxBitmap.Data = imageData;
                xboxBitmaps.Add(xboxBitmap);
                if ((image.XboxFlags.HasFlag(BitmapFlagsXbox.TiledTexture) && image.XboxFlags.HasFlag(BitmapFlagsXbox.Xbox360ByteOrder)))
                {
                    xboxBitmap.Data = BitmapDecoder.ConvertToLinearTexture(xboxBitmap.Data, xboxBitmap.VirtualWidth, xboxBitmap.VirtualHeight, xboxBitmap.Format);
                }
                break;

            case BitmapType.Texture3D:
            case BitmapType.Array:
                var count = xboxBitmap.Depth;
                var size  = bitmapSize / count;
                for (int i = 0; i < count; i++)
                {
                    byte[] data = new byte[size];
                    Array.Copy(imageData, i * size, data, 0, size);
                    XboxBitmap newXboxBitmap = xboxBitmap.ShallowCopy();

                    if ((image.XboxFlags.HasFlag(BitmapFlagsXbox.TiledTexture) && image.XboxFlags.HasFlag(BitmapFlagsXbox.Xbox360ByteOrder)))
                    {
                        data = BitmapDecoder.ConvertToLinearTexture(data, xboxBitmap.VirtualWidth, xboxBitmap.VirtualHeight, xboxBitmap.Format);
                    }

                    newXboxBitmap.Data = data;
                    xboxBitmaps.Add(newXboxBitmap);
                }
                break;

            case BitmapType.CubeMap:
                count = 6;
                size  = bitmapSize / count;
                for (int i = 0; i < count; i++)
                {
                    byte[] data = new byte[size];
                    Array.Copy(imageData, i * size, data, 0, size);
                    XboxBitmap newXboxBitmap = xboxBitmap.ShallowCopy();

                    if ((image.XboxFlags.HasFlag(BitmapFlagsXbox.TiledTexture) && image.XboxFlags.HasFlag(BitmapFlagsXbox.Xbox360ByteOrder)))
                    {
                        data = BitmapDecoder.ConvertToLinearTexture(data, xboxBitmap.VirtualWidth, xboxBitmap.VirtualHeight, xboxBitmap.Format);
                    }

                    newXboxBitmap.Data = data;
                    xboxBitmaps.Add(newXboxBitmap);
                }
                break;
            }
            return(xboxBitmaps);
        }