diff --git a/FtexTool.Test/RoundtipTest.cs b/FtexTool.Test/RoundtipTest.cs index 4fea0ae..0f9e356 100644 --- a/FtexTool.Test/RoundtipTest.cs +++ b/FtexTool.Test/RoundtipTest.cs @@ -54,17 +54,19 @@ public override string ToString() public class DdsOptions { - public DdsOptions(DdsPixelFormat pixelFormat, short width, short height, short mipMapCount) + public DdsOptions(DdsPixelFormat pixelFormat, short width, short height, short depth, short mipMapCount) { PixelFormat = pixelFormat; Width = width; Height = height; + Depth = depth; MipMapCount = mipMapCount; } public DdsPixelFormat PixelFormat { get; } public short Width { get; } public short Height { get; } + public short Depth { get; } public short MipMapCount { get; } } @@ -83,28 +85,35 @@ private static DdsFile GenerateDds(DdsOptions options) ddsFile.Header = new DdsFileHeader { Size = DdsFileHeader.DefaultHeaderSize, - Flags = DdsFileHeaderFlags.Texture | DdsFileHeaderFlags.MipMap, + Flags = DdsFileHeaderFlags.Texture, Width = options.Width, Height = options.Height, - Depth = 1, - MipMapCount = options.MipMapCount, - Caps = DdsSurfaceFlags.Texture | DdsSurfaceFlags.MipMap, + Caps = DdsSurfaceFlags.Texture, PixelFormat = options.PixelFormat }; - if (ddsFile.Header.PixelFormat.Equals(DdsPixelFormat.DdsPfA8R8G8B8())) + if (options.MipMapCount > 1) + { + ddsFile.Header.Flags |= DdsFileHeaderFlags.MipMap; + ddsFile.Header.Caps |= DdsSurfaceFlags.MipMap; + ddsFile.Header.MipMapCount = options.MipMapCount; + } + + if (options.Depth > 0) { ddsFile.Header.Flags |= DdsFileHeaderFlags.Volume; + ddsFile.Header.Depth = options.Depth; } const int minimumWidth = 4; const int minimumHeight = 4; int mipMapHeight = ddsFile.Header.Height; int mipMapWidth = ddsFile.Header.Width; + int mipMapDepth = options.Depth > 0 ? options.Depth : 1; int mipMapBufferSize = 0; - for (int i = 0; i < ddsFile.Header.MipMapCount; i++) + for (int i = 0; i < options.MipMapCount; i++) { - int mipMapSize = DdsPixelFormat.CalculateImageSize(ddsFile.Header.PixelFormat, mipMapWidth, mipMapHeight); + int mipMapSize = DdsPixelFormat.CalculateImageSize(ddsFile.Header.PixelFormat, mipMapWidth, mipMapHeight, mipMapDepth); mipMapBufferSize += mipMapSize; mipMapWidth = Math.Max(mipMapWidth / 2, minimumWidth); mipMapHeight = Math.Max(mipMapHeight / 2, minimumHeight); @@ -185,72 +194,72 @@ public static IEnumerable AllUsedCombinations { get { - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 8, 8, 2), "A8R8G8B8 8x8 (2 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 16, 16, 1), "A8R8G8B8 16x16 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 128, 128, 1), "A8R8G8B8 128x128 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 256, 2, 1), "A8R8G8B8 256x2 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 512, 512, 1), "Luminance 512x512 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 128, 64, 6), "dxt1 128x64 (6 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 128, 128, 6), "dxt1 128x128 (6 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 128, 256, 7), "dxt1 128x256 (7 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 128, 512, 8), "dxt1 128x512 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 64, 7), "dxt1 256x64 (7 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 128, 7), "dxt1 256x128 (7 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 256, 1), "dxt1 256x256 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 256, 7), "dxt1 256x256 (7 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 512, 8), "dxt1 256x512 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 1024, 9), "dxt1 256x1024 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 128, 1), "dxt1 512x128 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 128, 8), "dxt1 512x128 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 256, 8), "dxt1 512x256 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 512, 8), "dxt1 512x512 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 1024, 9), "dxt1 512x1024 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 2048, 10), "dxt1 512x2048 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 256, 9), "dxt1 1024x256 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 512, 9), "dxt1 1024x512 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 1), "dxt1 1024x1024 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 9), "dxt1 1024x1024 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 2048, 10), "dxt1 1024x2048 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 512, 1), "dxt1 2048x512 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 512, 10), "dxt1 2048x512 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 1024, 1), "dxt1 2048x1024 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 1024, 10), "dxt1 2048x1024 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 2048, 10), "dxt1 2048x2048 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 4096, 2048, 11), "dxt1 4096x2048 (11 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 4096, 4096, 11), "dxt1 4096x4096 (11 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 8192, 8192, 12), "dxt1 8192x8192 (12 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 32, 32, 4), "dxt5 32x32 (4 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 64, 64, 1), "dxt5 64x64 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 64, 64, 5), "dxt5 64x64 (5 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 64, 256, 7), "dxt5 64x256 (7 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 64, 7), "dxt5 256x64 (7 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 128, 7), "dxt5 256x128 (7 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 256, 1), "dxt5 256x256 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 256, 7), "dxt5 256x256 (7 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 512, 8), "dxt5 256x512 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 1024, 1), "dxt5 256x1024 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 1024, 9), "dxt5 256x1024 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 64, 8), "dxt5 512x64 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 128, 8), "dxt5 512x128 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 256, 8), "dxt5 512x256 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 512, 8), "dxt5 512x512 (8 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 1024, 9), "dxt5 512x1024 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 2048, 10), "dxt5 512x2048 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 256, 9), "dxt5 1024x256 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 512, 9), "dxt5 1024x512 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1), "dxt5 1024x1024 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 9), "dxt5 1024x1024 (9 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 2048, 10), "dxt5 1024x2048 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 4096, 11), "dxt5 1024x4096 (11 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 256, 10), "dxt5 2048x256 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 512, 1), "dxt5 2048x512 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 512, 10), "dxt5 2048x512 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 1024, 1), "dxt5 2048x1024 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 1024, 10), "dxt5 2048x1024 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 2048, 1), "dxt5 2048x2048 (1 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 2048, 10), "dxt5 2048x2048 (10 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 4096, 2048, 11), "dxt5 4096x2048 (11 mip)") }; - yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 4096, 4096, 11), "dxt5 4096x4096 (11 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 8, 8, 8, 2), "A8R8G8B8 8x8x8 (2 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 16, 16, 16, 1), "A8R8G8B8 16x16x16 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 128, 128, 128, 1), "A8R8G8B8 128x128x128 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 256, 2, 256, 1), "A8R8G8B8 256x2x1 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 512, 512, 1, 1), "Luminance 512x512 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 128, 64, 1, 6), "dxt1 128x64 (6 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 128, 128, 1, 6), "dxt1 128x128 (6 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 128, 256, 1, 7), "dxt1 128x256 (7 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 128, 512, 1, 8), "dxt1 128x512 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 64, 1, 7), "dxt1 256x64 (7 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 128, 1, 7), "dxt1 256x128 (7 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 256, 1, 1), "dxt1 256x256 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 256, 1, 7), "dxt1 256x256 (7 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 512, 1, 8), "dxt1 256x512 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 1024, 1, 9), "dxt1 256x1024 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 128, 1, 1), "dxt1 512x128 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 128, 1, 8), "dxt1 512x128 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 256, 1, 8), "dxt1 512x256 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 512, 1, 8), "dxt1 512x512 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 1024, 1, 9), "dxt1 512x1024 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 2048, 1, 10), "dxt1 512x2048 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 256, 1, 9), "dxt1 1024x256 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 512, 1, 9), "dxt1 1024x512 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 1, 1), "dxt1 1024x1024 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 1, 9), "dxt1 1024x1024 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 2048, 1, 10), "dxt1 1024x2048 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 512, 1, 1), "dxt1 2048x512 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 512, 1, 10), "dxt1 2048x512 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 1024, 1, 1), "dxt1 2048x1024 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 1024, 1, 10), "dxt1 2048x1024 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 2048, 1, 10), "dxt1 2048x2048 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 4096, 2048, 1, 11), "dxt1 4096x2048 (11 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 4096, 4096, 1, 11), "dxt1 4096x4096 (11 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 8192, 8192, 1, 12), "dxt1 8192x8192 (12 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 32, 32, 1, 4), "dxt5 32x32 (4 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 64, 64, 1, 1), "dxt5 64x64 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 64, 64, 1, 5), "dxt5 64x64 (5 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 64, 256, 1, 7), "dxt5 64x256 (7 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 64, 1, 7), "dxt5 256x64 (7 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 128, 1, 7), "dxt5 256x128 (7 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 256, 1, 1), "dxt5 256x256 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 256, 1, 7), "dxt5 256x256 (7 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 512, 1, 8), "dxt5 256x512 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 1024, 1, 1), "dxt5 256x1024 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 1024, 1, 9), "dxt5 256x1024 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 64, 1, 8), "dxt5 512x64 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 128, 1, 8), "dxt5 512x128 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 256, 1, 8), "dxt5 512x256 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 512, 1, 8), "dxt5 512x512 (8 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 1024, 1, 9), "dxt5 512x1024 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 2048, 1, 10), "dxt5 512x2048 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 256, 1, 9), "dxt5 1024x256 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 512, 1, 9), "dxt5 1024x512 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1, 1), "dxt5 1024x1024 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1, 9), "dxt5 1024x1024 (9 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 2048, 1, 10), "dxt5 1024x2048 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 4096, 1, 11), "dxt5 1024x4096 (11 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 256, 1, 10), "dxt5 2048x256 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 512, 1, 1), "dxt5 2048x512 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 512, 1, 10), "dxt5 2048x512 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 1024, 1, 1), "dxt5 2048x1024 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 1024, 1, 10), "dxt5 2048x1024 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 2048, 1, 1), "dxt5 2048x2048 (1 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 2048, 1, 10), "dxt5 2048x2048 (10 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 4096, 2048, 1, 11), "dxt5 4096x2048 (11 mip)") }; + yield return new object[] { new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 4096, 4096, 1, 11), "dxt5 4096x4096 (11 mip)") }; } } @@ -258,26 +267,26 @@ public static IEnumerable AllUsedCombinations 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"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 1, 1), "dxt1 1 mip"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 1, 2), "dxt1 2 mip"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 1, 5), "dxt1 5 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 1, 10), "dxt1 10 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 1, 15), "dxt1 15 mip" ), + + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1, 1, 1, 1), "dxt1 1x1"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2, 2, 1, 2), "dxt1 2x2"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 4, 4, 1, 3), "dxt1 4x4"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 8, 8, 1, 4), "dxt1 8x8"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 16, 16, 1, 5), "dxt1 16x16"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 32, 32, 1, 6), "dxt1 32x32"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 64, 64, 1, 7), "dxt1 64x63"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 128, 128, 1, 8), "dxt1 128x128"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 256, 256, 1, 9), "dxt1 256x256"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 512, 512, 1, 10), "dxt1 512x512"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 1024, 1024, 1, 11), "dxt1 1024x1024"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 2048, 2048, 1, 12), "dxt1 2048x2048"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 4096, 4096, 1, 13), "dxt1 4096x4096"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt1(), 8192, 8192, 1, 14), "dxt1 8192x8192"), }; RunDdsTestCase(testCases); @@ -287,26 +296,26 @@ public void TestDxt1() public void TestDxt5() { DdsTestCase[] testCases = { - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1), "dxt5 1 mip"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 2), "dxt5 2 mip" ), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 5), "dxt5 5 mip" ), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 10), "dxt5 10 mip" ), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 15), "dxt5 15 mip" ), - - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1, 1, 1), "dxt1 1x1"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2, 2, 2), "dxt1 2x2"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 4, 4, 3), "dxt1 4x4"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 8, 8, 4), "dxt1 8x8"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 16, 16, 5), "dxt1 16x16"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 32, 32, 6), "dxt1 32x32"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 64, 64, 7), "dxt1 64x63"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 128, 128, 8), "dxt1 128x128"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 256, 9), "dxt1 256x256"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 512, 10), "dxt1 512x512"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 11), "dxt1 1024x1024"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 2048, 12), "dxt1 2048x2048"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 4096, 4096, 13), "dxt1 4096x4096"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 8192, 8192, 14), "dxt1 8192x8192"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1, 1), "dxt5 1 mip"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1, 2), "dxt5 2 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1, 5), "dxt5 5 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1, 10), "dxt5 10 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1, 15), "dxt5 15 mip" ), + + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1, 1, 1, 1), "dxt1 1x1"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2, 2, 1, 2), "dxt1 2x2"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 4, 4, 1, 3), "dxt1 4x4"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 8, 8, 1, 4), "dxt1 8x8"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 16, 16, 1, 5), "dxt1 16x16"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 32, 32, 1, 6), "dxt1 32x32"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 64, 64, 1, 7), "dxt1 64x63"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 128, 128, 1, 8), "dxt1 128x128"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 256, 256, 1, 9), "dxt1 256x256"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 512, 512, 1, 10), "dxt1 512x512"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 1024, 1024, 1, 11), "dxt1 1024x1024"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 2048, 2048, 1, 12), "dxt1 2048x2048"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 4096, 4096, 1, 13), "dxt1 4096x4096"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfDxt5(), 8192, 8192, 1, 14), "dxt1 8192x8192"), }; RunDdsTestCase(testCases); @@ -316,26 +325,26 @@ public void TestDxt5() public void TestPfA8R8G8B8() { DdsTestCase[] testCases = { - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 1), "A8R8G8B8 1 mip"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 2), "A8R8G8B8 2 mip" ), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 5), "A8R8G8B8 5 mip" ), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 10), "A8R8G8B8 10 mip" ), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 15), "A8R8G8B8 15 mip" ), - - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1, 1, 1), "A8R8G8B8 1x1"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 2, 2, 2), "A8R8G8B8 2x2"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 4, 4, 3), "A8R8G8B8 4x4"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 8, 8, 4), "A8R8G8B8 8x8"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 16, 16, 5), "A8R8G8B8 16x16"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 32, 32, 6), "A8R8G8B8 32x32"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 64, 64, 7), "A8R8G8B8 64x63"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 128, 128, 8), "A8R8G8B8 128x128"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 256, 256, 9), "A8R8G8B8 256x256"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 512, 512, 10), "A8R8G8B8 512x512"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 11), "A8R8G8B8 1024x1024"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 2048, 2048, 12), "A8R8G8B8 2048x2048"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 4096, 4096, 13), "A8R8G8B8 4096x4096"), - new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 8192, 8192, 14), "A8R8G8B8 8192x8192") + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 1, 1), "A8R8G8B8 1 mip"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 1, 2), "A8R8G8B8 2 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 1, 5), "A8R8G8B8 5 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 1, 10), "A8R8G8B8 10 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 1, 15), "A8R8G8B8 15 mip" ), + + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1, 1, 1, 1), "A8R8G8B8 1x1"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 2, 2, 1, 2), "A8R8G8B8 2x2"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 4, 4, 1, 3), "A8R8G8B8 4x4"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 8, 8, 1, 4), "A8R8G8B8 8x8"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 16, 16, 1, 5), "A8R8G8B8 16x16"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 32, 32, 1, 6), "A8R8G8B8 32x32"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 64, 64, 1, 7), "A8R8G8B8 64x63"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 128, 128, 1, 8), "A8R8G8B8 128x128"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 256, 256, 1, 9), "A8R8G8B8 256x256"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 512, 512, 1, 10), "A8R8G8B8 512x512"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 1024, 1024, 1, 11), "A8R8G8B8 1024x1024"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 2048, 2048, 1, 12), "A8R8G8B8 2048x2048"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 4096, 4096, 1, 13), "A8R8G8B8 4096x4096"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsPfA8R8G8B8(), 8192, 8192, 1, 14), "A8R8G8B8 8192x8192") }; RunDdsTestCase(testCases); @@ -345,26 +354,26 @@ public void TestPfA8R8G8B8() 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") + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024, 1, 1), "Luminance 1 mip"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024, 1, 2), "Luminance 2 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024, 1, 5), "Luminance 5 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024, 1, 10), "Luminance 10 mip" ), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024, 1, 15), "Luminance 15 mip" ), + + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1, 1, 1, 1), "Luminance 1x1"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 2, 2, 1, 2), "Luminance 2x2"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 4, 4, 1, 3), "Luminance 4x4"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 8, 8, 1, 4), "Luminance 8x8"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 16, 16, 1, 5), "Luminance 16x16"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 32, 32, 1, 6), "Luminance 32x32"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 64, 64, 1, 7), "Luminance 64x63"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 128, 128, 1, 8), "Luminance 128x128"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 256, 256, 1, 9), "Luminance 256x256"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 512, 512, 1, 10), "Luminance 512x512"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 1024, 1024, 1, 11), "Luminance 1024x1024"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 2048, 2048, 1, 12), "Luminance 2048x2048"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 4096, 4096, 1, 13), "Luminance 4096x4096"), + new DdsTestCase(new DdsOptions(DdsPixelFormat.DdsLuminance(), 8192, 8192, 1, 14), "Luminance 8192x8192") }; RunDdsTestCase(testCases); diff --git a/FtexTool/Dds/DdsFile.cs b/FtexTool/Dds/DdsFile.cs index 4ee60e7..c5445fd 100644 --- a/FtexTool/Dds/DdsFile.cs +++ b/FtexTool/Dds/DdsFile.cs @@ -16,7 +16,6 @@ public static DdsFile Read(Stream inputStream) BinaryReader reader = new BinaryReader(inputStream, Encoding.Default, true); reader.Assert(MagicNumber); result.Header = DdsFileHeader.Read(inputStream); - if (result.Header.IsDx10()) { result.HeaderDx10 = DdsFileHeaderDx10.Read(inputStream); diff --git a/FtexTool/Dds/DdsPixelFormat.cs b/FtexTool/Dds/DdsPixelFormat.cs index 1ef7d9d..3413478 100644 --- a/FtexTool/Dds/DdsPixelFormat.cs +++ b/FtexTool/Dds/DdsPixelFormat.cs @@ -34,7 +34,7 @@ private void Read(Stream inputStream) { BinaryReader reader = new BinaryReader(inputStream, Encoding.Default, true); Size = reader.ReadInt32(); - Flags = (DdsPixelFormatFlag) reader.ReadUInt32(); + Flags = (DdsPixelFormatFlag)reader.ReadUInt32(); FourCc = reader.ReadInt32(); RgbBitCount = reader.ReadInt32(); RBitMask = reader.ReadUInt32(); @@ -189,10 +189,10 @@ public static DdsPixelFormat DdsLuminance() return pixelFormat; } - public static int CalculateImageSize(DdsPixelFormat pixelFormat, int width, int height) + public static int CalculateImageSize(DdsPixelFormat pixelFormat, int width, int height, int depth) { if (pixelFormat.RgbBitCount > 0) - return (int)((long)width * height * pixelFormat.RgbBitCount / 8); + return (int)((long)width * height * depth * pixelFormat.RgbBitCount / 8); if (pixelFormat.Equals(DdsPfDxt1())) return width * height / 2; // ((width*height*32)/8)/8; if (pixelFormat.Equals(DdsPfDxt3())) @@ -230,7 +230,7 @@ public override bool Equals(object obj) if (ReferenceEquals(null, obj)) return false; if (ReferenceEquals(this, obj)) return true; if (obj.GetType() != GetType()) return false; - return Equals((DdsPixelFormat) obj); + return Equals((DdsPixelFormat)obj); } public override int GetHashCode() @@ -238,13 +238,13 @@ public override int GetHashCode() unchecked { var hashCode = Size; - hashCode = (hashCode*397) ^ (int) Flags; - hashCode = (hashCode*397) ^ FourCc; - hashCode = (hashCode*397) ^ RgbBitCount; - hashCode = (hashCode*397) ^ (int) RBitMask; - hashCode = (hashCode*397) ^ (int) GBitMask; - hashCode = (hashCode*397) ^ (int) BBitMask; - hashCode = (hashCode*397) ^ (int) ABitMask; + hashCode = (hashCode * 397) ^ (int)Flags; + hashCode = (hashCode * 397) ^ FourCc; + hashCode = (hashCode * 397) ^ RgbBitCount; + hashCode = (hashCode * 397) ^ (int)RBitMask; + hashCode = (hashCode * 397) ^ (int)GBitMask; + hashCode = (hashCode * 397) ^ (int)BBitMask; + hashCode = (hashCode * 397) ^ (int)ABitMask; return hashCode; } } diff --git a/FtexTool/FtexDdsConverter.cs b/FtexTool/FtexDdsConverter.cs index f074ea9..17615cc 100644 --- a/FtexTool/FtexDdsConverter.cs +++ b/FtexTool/FtexDdsConverter.cs @@ -18,20 +18,30 @@ public static DdsFile ConvertToDds(FtexFile file) Header = new DdsFileHeader { Size = DdsFileHeader.DefaultHeaderSize, - Flags = DdsFileHeaderFlags.Texture | DdsFileHeaderFlags.MipMap, + Flags = DdsFileHeaderFlags.Texture, Height = file.Height, Width = file.Width, Depth = file.Depth, - MipMapCount = file.MipMapCount, - Caps = DdsSurfaceFlags.Texture | DdsSurfaceFlags.MipMap + Caps = DdsSurfaceFlags.Texture } }; + if (file.MipMapCount > 1) + { + result.Header.Flags |= DdsFileHeaderFlags.MipMap; + result.Header.Caps |= DdsSurfaceFlags.MipMap; + result.Header.MipMapCount = file.MipMapCount; + } + + if (file.Depth > 0) + { + result.Header.Flags |= DdsFileHeaderFlags.Volume; + } + switch (file.PixelFormatType) { case 0: result.Header.PixelFormat = DdsPixelFormat.DdsPfA8R8G8B8(); - result.Header.Flags = result.Header.Flags | DdsFileHeaderFlags.Volume; break; case 1: result.Header.PixelFormat = DdsPixelFormat.DdsLuminance(); @@ -77,7 +87,7 @@ public static FtexFile ConvertToFtex(DdsFile file, FtexTextureType textureType, result.AddMipMapInfos(mipMaps); result.AddFtexsFiles(ftexsFiles); result.FtexsFileCount = Convert.ToByte(ftexsFiles.Count); - result.AdditionalFtexsFileCount = Convert.ToByte(ftexsFiles.Count - 1); + result.AdditionalFtexsFileCount = ftexsFiles.Count > 0 ? Convert.ToByte(ftexsFiles.Count - 1) : (byte) 0; result.UnknownFlags = 273; // TODO: Add an argument to set this value. result.TextureType = textureType; return result; @@ -223,12 +233,13 @@ private static List GetMipMapData(DdsFile file) List mipMapDatas = new List(); byte[] data = file.Data; int dataOffset = 0; - var width = file.Header.Width; - var height = file.Header.Height; + int width = file.Header.Width; + int height = file.Header.Height; + int depth = file.Header.Flags.HasFlag(DdsFileHeaderFlags.Volume) ? file.Header.Depth : 1; int mipMapsCount = file.Header.Flags.HasFlag(DdsFileHeaderFlags.MipMap) ? file.Header.MipMapCount : 1; for (int i = 0; i < mipMapsCount; i++) { - int size = DdsPixelFormat.CalculateImageSize(file.Header.PixelFormat, width, height); + int size = DdsPixelFormat.CalculateImageSize(file.Header.PixelFormat, width, height, depth); var buffer = new byte[size]; Array.Copy(data, dataOffset, buffer, 0, size); mipMapDatas.Add(buffer); diff --git a/FtexTool/Properties/AssemblyInfo.cs b/FtexTool/Properties/AssemblyInfo.cs index 93515ca..680cb23 100644 --- a/FtexTool/Properties/AssemblyInfo.cs +++ b/FtexTool/Properties/AssemblyInfo.cs @@ -11,5 +11,5 @@ [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("d87a6cb1-0454-4123-8fc6-23f50523de89")] -[assembly: AssemblyVersion("0.3.2.0")] -[assembly: AssemblyFileVersion("0.3.2.0")] +[assembly: AssemblyVersion("0.3.3.0")] +[assembly: AssemblyFileVersion("0.3.3.0")]