/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Copyright (C) 2016 Ivan Komissarov. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the DDS plugin in the Qt ImageFormats module. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef DDSHEADER_H #define DDSHEADER_H #include #ifndef QT_NO_DATASTREAM QT_BEGIN_NAMESPACE enum Format { FormatUnknown = 0, FormatR8G8B8 = 20, FormatA8R8G8B8 = 21, FormatX8R8G8B8 = 22, FormatR5G6B5 = 23, FormatX1R5G5B5 = 24, FormatA1R5G5B5 = 25, FormatA4R4G4B4 = 26, FormatR3G3B2 = 27, FormatA8 = 28, FormatA8R3G3B2 = 29, FormatX4R4G4B4 = 30, FormatA2B10G10R10 = 31, FormatA8B8G8R8 = 32, FormatX8B8G8R8 = 33, FormatG16R16 = 34, FormatA2R10G10B10 = 35, FormatA16B16G16R16 = 36, FormatA8P8 = 40, FormatP8 = 41, FormatL8 = 50, FormatA8L8 = 51, FormatA4L4 = 52, FormatV8U8 = 60, FormatL6V5U5 = 61, FormatX8L8V8U8 = 62, FormatQ8W8V8U8 = 63, FormatV16U16 = 64, FormatA2W10V10U10 = 67, FormatUYVY = 0x59565955, // "UYVY" FormatR8G8B8G8 = 0x47424752, // "RGBG" FormatYUY2 = 0x32595559, // "YUY2" FormatG8R8G8B8 = 0x42475247, // "GRGB" FormatDXT1 = 0x31545844, // "DXT1" FormatDXT2 = 0x32545844, // "DXT2" FormatDXT3 = 0x33545844, // "DXT3" FormatDXT4 = 0x34545844, // "DXT4" FormatDXT5 = 0x35545844, // "DXT5" FormatRXGB = 0x42475852, // "RXGB" FormatATI2 = 0x32495441, // "ATI2" FormatD16Lockable = 70, FormatD32 = 71, FormatD15S1 = 73, FormatD24S8 = 75, FormatD24X8 = 77, FormatD24X4S4 = 79, FormatD16 = 80, FormatD32FLockable = 82, FormatD24FS8 = 83, FormatD32Lockable = 84, FormatS8Lockable = 85, FormatL16 = 81, FormatVertexData =100, FormatIndex16 =101, FormatIndex32 =102, FormatQ16W16V16U16 = 110, FormatMulti2ARGB8 = 0x3154454d, // "MET1" FormatR16F = 111, FormatG16R16F = 112, FormatA16B16G16R16F = 113, FormatR32F = 114, FormatG32R32F = 115, FormatA32B32G32R32F = 116, FormatCxV8U8 = 117, FormatA1 = 118, FormatA2B10G10R10_XR_BIAS = 119, FormatBinaryBuffer = 199, FormatP4, FormatA4P4, FormatLast = 0x7fffffff }; struct DDSPixelFormat { enum DDSPixelFormatFlags { FlagAlphaPixels = 0x00000001, FlagAlpha = 0x00000002, FlagFourCC = 0x00000004, FlagPaletteIndexed4 = 0x00000008, FlagPaletteIndexed8 = 0x00000020, FlagRGB = 0x00000040, FlagYUV = 0x00000200, FlagLuminance = 0x00020000, FlagNormal = 0x00080000, FlagRGBA = FlagAlphaPixels | FlagRGB, FlagLA = FlagAlphaPixels | FlagLuminance }; quint32 size; quint32 flags; quint32 fourCC; quint32 rgbBitCount; quint32 rBitMask; quint32 gBitMask; quint32 bBitMask; quint32 aBitMask; }; QDataStream &operator>>(QDataStream &s, DDSPixelFormat &pixelFormat); QDataStream &operator<<(QDataStream &s, const DDSPixelFormat &pixelFormat); struct DDSHeader { enum DDSFlags { FlagCaps = 0x000001, FlagHeight = 0x000002, FlagWidth = 0x000004, FlagPitch = 0x000008, FlagPixelFormat = 0x001000, FlagMipmapCount = 0x020000, FlagLinearSize = 0x080000, FlagDepth = 0x800000 }; enum DDSCapsFlags { CapsComplex = 0x000008, CapsTexture = 0x001000, CapsMipmap = 0x400000 }; enum DDSCaps2Flags { Caps2CubeMap = 0x0200, Caps2CubeMapPositiveX = 0x0400, Caps2CubeMapNegativeX = 0x0800, Caps2CubeMapPositiveY = 0x1000, Caps2CubeMapNegativeY = 0x2000, Caps2CubeMapPositiveZ = 0x4000, Caps2CubeMapNegativeZ = 0x8000, Caps2Volume = 0x200000 }; enum { ReservedCount = 11 }; quint32 magic; quint32 size; quint32 flags; quint32 height; quint32 width; quint32 pitchOrLinearSize; quint32 depth; quint32 mipMapCount; quint32 reserved1[ReservedCount]; DDSPixelFormat pixelFormat; quint32 caps; quint32 caps2; quint32 caps3; quint32 caps4; quint32 reserved2; }; QDataStream &operator>>(QDataStream &s, DDSHeader &header); QDataStream &operator<<(QDataStream &s, const DDSHeader &header); struct DDSHeaderDX10 { quint32 dxgiFormat; quint32 resourceDimension; quint32 miscFlag; quint32 arraySize; quint32 reserved; }; QDataStream &operator>>(QDataStream &s, DDSHeaderDX10 &header); QDataStream &operator<<(QDataStream &s, const DDSHeaderDX10 &header); QT_END_NAMESPACE #endif // QT_NO_DATASTREAM #endif // DDSHEADER_H