Пример #1
0
 public DDSPixelFormat(DDSPixelFormatFlags Flags, DDSPixelFormatFourCC FourCC, uint RGBBitCount, uint BitMaskRed, uint BitMaskGreen, uint BitMaskBlue, uint BitMaskRGBAlpha)
 {
     this.Size            = 0x20;
     this.Flags           = Flags;
     this.FourCC          = FourCC;
     this.RGBBitCount     = RGBBitCount;
     this.BitMaskRed      = BitMaskRed;
     this.BitMaskGreen    = BitMaskGreen;
     this.BitMaskBlue     = BitMaskBlue;
     this.BitMaskRGBAlpha = BitMaskRGBAlpha;
 }
Пример #2
0
 public DDSPixelFormat(DDSPixelFormatFlags Flags, DDSPixelFormatFourCC FourCC, uint RGBBitCount, uint BitMaskRed, uint BitMaskGreen, uint BitMaskBlue, uint BitMaskRGBAlpha)
 {
     this.Size = 0x20;
     this.Flags = Flags;
     this.FourCC = FourCC;
     this.RGBBitCount = RGBBitCount;
     this.BitMaskRed = BitMaskRed;
     this.BitMaskGreen = BitMaskGreen;
     this.BitMaskBlue = BitMaskBlue;
     this.BitMaskRGBAlpha = BitMaskRGBAlpha;
 }
Пример #3
0
        /// <summary>
        /// Read the DDS Pixel Format Header
        /// </summary>
        /// <param name="reader"></param>
        /// <returns>Valid header</returns>
        public override bool Read(EndianReader reader)
        {
            reader.Format = EndianFormat.LittleEndian;
            var size = reader.ReadInt32();

            if (size != Size)
            {
                return(false);
            }
            else
            {
                Flags       = (DDSPixelFormatFlags)reader.ReadInt32();
                FourCC      = reader.ReadUInt32();
                RGBBitCount = reader.ReadInt32();
                RBitMask    = reader.ReadUInt32();
                GBitMask    = reader.ReadUInt32();
                BBitMask    = reader.ReadUInt32();
                ABitMask    = reader.ReadUInt32();
                return(true);
            }
        }
Пример #4
0
        public void SetTextureFormat(BitmapFormat format, BitmapFlags flags)
        {
            if (flags.HasFlag(BitmapFlags.Compressed))
            {
                Flags |= DDSPixelFormatFlags.Compressed;
                switch (format)
                {
                case BitmapFormat.Dxt5:
                    Flags |= DDSPixelFormatFlags.FourCC;
                    FourCC = 0x35545844;
                    break;

                case BitmapFormat.Dxt3:
                    Flags |= DDSPixelFormatFlags.FourCC;
                    FourCC = 0x33545844;
                    break;

                case BitmapFormat.Dxt1:
                    Flags |= DDSPixelFormatFlags.FourCC;
                    FourCC = 0x31545844;
                    break;

                case BitmapFormat.Dxn:
                    Flags |= DDSPixelFormatFlags.FourCC;
                    FourCC = 0x32495441;
                    break;

                default:
                    throw new Exception($"Unsupported bitmap format {format}");
                }
            }
            else
            {
                Flags      |= DDSPixelFormatFlags.RGB;
                RGBBitCount = BitmapFormatUtils.GetBitsPerPixel(format);

                switch (format)
                {
                case BitmapFormat.A8:
                case BitmapFormat.AY8:
                    ABitMask = 0xFF;
                    Flags   |= DDSPixelFormatFlags.Alpha;
                    break;

                case BitmapFormat.Y8:
                    RBitMask = 0xFF;
                    Flags   |= DDSPixelFormatFlags.Luminance;
                    break;

                case BitmapFormat.A8Y8:
                    Flags   |= DDSPixelFormatFlags.RGB;
                    RBitMask = 0x00FF; ABitMask = 0xFF00;
                    break;

                case BitmapFormat.R5G6B5:
                    Flags   |= DDSPixelFormatFlags.RGB;
                    RBitMask = 0xF800; GBitMask = 0x07E0; BBitMask = 0x001F;
                    break;

                case BitmapFormat.A1R5G5B5:
                    Flags   |= DDSPixelFormatFlags.RGB;
                    RBitMask = 0x7C00; GBitMask = 0x03E0; BBitMask = 0x001F; ABitMask = 0x8000;
                    break;

                case BitmapFormat.A4R4G4B4:
                    Flags   |= DDSPixelFormatFlags.RGB;
                    RBitMask = 0xF000; GBitMask = 0x0F00; BBitMask = 0x00F0; ABitMask = 0x000F;
                    break;

                case BitmapFormat.A4R4G4B4Font:
                    Flags   |= DDSPixelFormatFlags.RGB;
                    RBitMask = 0xF000; GBitMask = 0x0F00; BBitMask = 0x00F0; ABitMask = 0x000F;
                    break;

                case BitmapFormat.A8R8G8B8:
                    Flags   |= DDSPixelFormatFlags.RGB;
                    RBitMask = 0x00FF0000; GBitMask = 0x0000FF00; BBitMask = 0x000000FF; ABitMask = 0xFF000000;
                    break;

                case BitmapFormat.X8R8G8B8:
                    Flags   |= DDSPixelFormatFlags.RGB;
                    RBitMask = 0x00FF0000; GBitMask = 0x0000FF00; BBitMask = 0x000000FF;
                    break;

                case BitmapFormat.V8U8:
                    RBitMask = 0xFF00; GBitMask = 0x00FF;
                    Flags   |= DDSPixelFormatFlags.BumpDUDV;
                    break;

                case BitmapFormat.A32B32G32R32F:
                    Flags |= DDSPixelFormatFlags.FourCC;
                    FourCC = 0x74;
                    break;

                case BitmapFormat.A16B16G16R16F:
                    Flags |= DDSPixelFormatFlags.FourCC;
                    FourCC = 0x71;
                    break;

                default:
                    throw new Exception($"Unsupported bitmap format {format}");
                }
            }
        }