blob: f88c21156bdd1cc27b1473e76035eafa83d2e9bd [file] [log] [blame]
/****************************************************************************
**
** 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 <QtCore/QDataStream>
#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