ddsFloatReader.h

//
//-
// ==========================================================================
// Copyright 1995,2006,2008 Autodesk, Inc. All rights reserved.
//
// Use of this software is subject to the terms of the Autodesk
// license agreement provided at the time of installation or download,
// or which otherwise accompanies this software in either electronic
// or hard copy form.
// ==========================================================================
//+
//

#ifndef DDS_FLOAT_READER_H
#define DDS_FLOAT_READER_H

#define DEBUG_DDS( x) 
//#define DEBUG_DDS( x) x

#ifdef _WIN32
#pragma pack(1)
#endif

#ifndef _WIN32
typedef unsigned char BYTE;
typedef unsigned int DWORD;
typedef unsigned short WORD;
#endif

namespace dds_Float_Reader
{
// 
// Our DDS constants
//

#define DDS_MAGIC_NUMBER                0x20534444

#define DDS_CAPS_FLAG                   0x00000001
#define DDS_HEIGHT_FLAG                 0x00000002
#define DDS_WIDTH_FLAG                  0x00000004
#define DDS_PITCH_FLAG                  0x00000008
#define DDS_PIXEL_FORMAT_FLAG           0x00001000
#define DDS_MIPMAP_COUNT_FLAG           0x00020000
#define DDS_LINEARSIZE_FLAG             0x00080000
#define DDS_DEPTH_FLAG                  0x00800000
#define DDS_HAS_ALPHA_FLAG              0x00000001
#define DDS_FOURCC_FLAG                 0x00000004
#define DDS_RGB_FLAG                    0x00000040
#define DDS_PALETTEINDEXED8             0x00000020          
#define DDS_PALETTEINDEXED4TO8          0x00000010
#define DDS_PALETTEINDEXED4             0x00000008

#define DDSCAPS_COMPLEX_FLAG            0x00000008
#define DDSCAPS_TEXTURE_FLAG            0x00001000
#define DDSCAPS_MIPMAP_FLAG             0x00400000

#define DDSCAPS2_CUBEMAP_FLAG           0x00000200
#define DDSCAPS2_CUBEMAP_POSITIVEX_FLAG 0x00000400
#define DDSCAPS2_CUBEMAP_NEGATIVEX_FLAG 0x00000800
#define DDSCAPS2_CUBEMAP_POSITIVEY_FLAG 0x00001000
#define DDSCAPS2_CUBEMAP_NEGATIVEY_FLAG 0x00002000
#define DDSCAPS2_CUBEMAP_POSITIVEZ_FLAG 0x00004000
#define DDSCAPS2_CUBEMAP_NEGATIVEZ_FLAG 0x00008000

#define DDSCAPS2_VOLUME_FLAG            0x00200000

#define DDS_DXT1                        0x31545844
#define DDS_DXT2                        0x32545844
#define DDS_DXT3                        0x33545844
#define DDS_DXT4                        0x34545844
#define DDS_DXT5                        0x35545844


// Float and half float formats specified in FourCC
#define DDS_R16F                        111
#define DDS_G16R16F                     112
#define DDS_A16B16G16R16F               113
#define DDS_R32F                        114
#define DDS_G32R32F                     115
#define DDS_A32B32G32R32F               116

//
// This structure describes the format of the file's pixel data 
//
typedef struct DDS_FORMAT {
    DWORD       fSize;
    DWORD       fFlags;
    DWORD       fPixelFormat; //fFourCC;
    DWORD       fRGBBitCount;
    DWORD       fRedBitMask;
    DWORD       fGreenBitMask;
    DWORD       fBlueBitMask;
    DWORD       fAlphaBitMask;
} DDS_FORMAT;


//
// DDS capabilities structure
//
typedef struct DDSCAPS2 {
    DWORD       dwCaps;         // capabilities of surface wanted
    DWORD       dwCaps2;
    DWORD       dwCaps3;
    union
    {
        DWORD       dwCaps4;
        DWORD       dwVolumeDepth;
    };
} DDSCAPS2;


//
// The header for a DDS file
//
typedef struct DDS_HEADER {
    DWORD       fDDSMagicNumber;
    DWORD       fSize;
    DWORD       fFlags;
    DWORD       fHeight;
    DWORD       fWidth;
    union {
        DWORD       fUncompressedPitch;
        DWORD       fCompressedSize;
    };
    DWORD       fDepth;
    DWORD       fMipMapCount;
    DWORD       fReserved1[11];
    DDS_FORMAT  fFormat;            // Pixel format 
    DDSCAPS2    fCapabilities;
    DWORD       fReserved2;
} DDS_HEADER;

}

#ifdef _WIN32
#pragma pack()
#endif /*WIN32*/

#endif