Exemple #1
0
        private static DdsFile GenerateDds(DdsOptions options)
        {
            DdsFile ddsFile = new DdsFile();

            ddsFile.Header = new DdsFileHeader
            {
                Size        = DdsFileHeader.DefaultHeaderSize,
                Flags       = DdsFileHeaderFlags.Texture,
                Width       = options.Width,
                Height      = options.Height,
                Depth       = options.Depth,
                MipMapCount = options.MipMapCount,
                Caps        = DdsSurfaceFlags.Texture,
                PixelFormat = options.PixelFormat
            };

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

            int mipMapCount = ddsFile.Header.MipMapCount;

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

            const int minimumWidth     = 4;
            const int minimumHeight    = 4;
            int       mipMapHeight     = ddsFile.Header.Height;
            int       mipMapWidth      = ddsFile.Header.Width;
            int       mipMapDepth      = ddsFile.Header.Depth == 0 ? 1 : ddsFile.Header.Depth;
            int       mipMapBufferSize = 0;

            for (int i = 0; i < mipMapCount; i++)
            {
                int mipMapSize = DdsPixelFormat.CalculateImageSize(ddsFile.Header.PixelFormat, mipMapWidth, mipMapHeight, mipMapDepth);
                mipMapBufferSize += mipMapSize;
                mipMapWidth       = Math.Max(mipMapWidth / 2, minimumWidth);
                mipMapHeight      = Math.Max(mipMapHeight / 2, minimumHeight);
            }

            ddsFile.Data = new byte[mipMapBufferSize];
            for (int i = 0; i < mipMapBufferSize; i++)
            {
                ddsFile.Data[i] = (byte)(i % 0xFF);
            }


            return(ddsFile);
        }
Exemple #2
0
 public DdsTestCase(DdsOptions options, string description)
 {
     Options     = options;
     Description = description;
 }