Example #1
0
        public void TestDxt1()
        {
            DdsTestCase[] testCases =
            {
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024,  1), "dxt1 1 mip"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024,  2), "dxt1 2 mip"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024,  5), "dxt1 5 mip"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 10), "dxt1 10 mip"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 15), "dxt1 15 mip"),

                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),    1,    1,  1), "dxt1 1x1"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),    2,    2,  2), "dxt1 2x2"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),    4,    4,  3), "dxt1 4x4"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),    8,    8,  4), "dxt1 8x8"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),   16,   16,  5), "dxt1 16x16"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),   32,   32,  6), "dxt1 32x32"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),   64,   64,  7), "dxt1 64x63"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),  128,  128,  8), "dxt1 128x128"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),  256,  256,  9), "dxt1 256x256"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(),  512,  512, 10), "dxt1 512x512"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 11), "dxt1 1024x1024"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 2048, 12), "dxt1 2048x2048"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 4096, 4096, 13), "dxt1 4096x4096"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 8192, 8192, 14), "dxt1 8192x8192"),
            };

            RunDdsTestCase(testCases);
        }
Example #2
0
        public static DdsFile ConvertToDds(FtexFile file)
        {
            DdsFile result = new DdsFile
            {
                Header = new DdsFileHeader
                {
                    Size        = DdsFileHeader.DefaultHeaderSize,
                    Flags       = DdsFileHeaderFlags.Texture,
                    Height      = file.Height,
                    Width       = file.Width,
                    Depth       = file.Depth,
                    MipMapCount = file.MipMapCount,
                    Caps        = DdsSurfaceFlags.Texture
                }
            };

            if (result.Header.Depth == 1)
            {
                result.Header.Depth = 0;
            }
            else if (result.Header.Depth > 1)
            {
                result.Header.Flags |= DdsFileHeaderFlags.Volume;
            }

            if (result.Header.MipMapCount == 1)
            {
                result.Header.MipMapCount = 0;
            }
            else if (result.Header.MipMapCount > 1)
            {
                result.Header.Flags |= DdsFileHeaderFlags.MipMap;
                result.Header.Caps  |= DdsSurfaceFlags.MipMap;
            }

            switch (file.PixelFormatType)
            {
            case 0:
                result.Header.PixelFormat = DdsPixelFormat.DdsPfA8R8G8B8();
                break;

            case 1:
                result.Header.PixelFormat = DdsPixelFormat.DdsLuminance();
                break;

            case 2:
                result.Header.PixelFormat = DdsPixelFormat.DdsPfDxt1();
                break;

            case 4:
                result.Header.PixelFormat = DdsPixelFormat.DdsPfDxt5();
                break;

            default:
                throw new ArgumentException($"Unknown PixelFormatType {file.PixelFormatType}");
            }

            result.Data = file.Data;
            return(result);
        }
Example #3
0
        public static FtexFile ConvertToFtex(DdsFile file, FtexTextureType textureType, FtexUnknownFlags flags, int?ftexsFileCount)
        {
            FtexFile result = new FtexFile();

            if (file.Header.PixelFormat.Equals(DdsPixelFormat.DdsPfA8R8G8B8()))
            {
                result.PixelFormatType = 0;
            }
            else if (file.Header.PixelFormat.Equals(DdsPixelFormat.DdsLuminance()))
            {
                result.PixelFormatType = 1;
            }
            else if (file.Header.PixelFormat.Equals(DdsPixelFormat.DdsPfDxt1()))
            {
                result.PixelFormatType = 2;
            }
            else if (file.Header.PixelFormat.Equals(DdsPixelFormat.DdsPfDxt3()) ||
                     file.Header.PixelFormat.Equals(DdsPixelFormat.DdsPfDxt5()))
            {
                result.PixelFormatType = 4;
            }
            else
            {
                throw new ArgumentException($"Unknown PixelFormatType {file.Header.PixelFormat}");
            }

            result.Height = Convert.ToInt16(file.Header.Height);
            result.Width  = Convert.ToInt16(file.Header.Width);
            result.Depth  = Convert.ToInt16(file.Header.Depth == 0 ? 1 : file.Header.Depth);

            var mipMapData = GetMipMapData(file);
            var mipMaps    = GetMipMapInfos(mipMapData, ftexsFileCount);
            var ftexsFiles = GetFtexsFiles(mipMaps, mipMapData);

            result.MipMapCount = Convert.ToByte(mipMaps.Count);
            result.NrtFlag     = 2;
            result.AddMipMapInfos(mipMaps);
            result.AddFtexsFiles(ftexsFiles);
            result.FtexsFileCount = ftexsFileCount == 0
                ? (byte)0
                : Convert.ToByte(ftexsFiles.Count);
            result.AdditionalFtexsFileCount = ftexsFileCount == 0
                ? (byte)0
                : Convert.ToByte(ftexsFiles.Count - 1);
            result.UnknownFlags = flags;
            result.TextureType  = textureType;
            return(result);
        }