Exemplo n.º 1
0
        public void TestLuminance()
        {
            DdsTestCase[] testCases =
            {
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024,  1), "Luminance 1 mip"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024,  2), "Luminance 2 mip"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024,  5), "Luminance 5 mip"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024, 10), "Luminance 10 mip"),
                new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024, 15), "Luminance 15 mip"),

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

            RunDdsTestCase(testCases);
        }
Exemplo n.º 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);
        }
Exemplo n.º 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);
        }