Files
megasource/libs/DevIL-1.7.8/src-IL/src/il_ftx.c
T
2013-09-26 00:20:08 +02:00

102 lines
2.2 KiB
C

//-----------------------------------------------------------------------------
//
// ImageLib Sources
// Copyright (C) 2000-2009 by Denton Woods
// Last modified: 02/12/2009
//
// Filename: src-IL/src/il_ftx.c
//
// Description: Reads from a Heavy Metal: FAKK2 (.ftx) file.
//
//-----------------------------------------------------------------------------
#include "il_internal.h"
#ifndef IL_NO_FTX
ILboolean iLoadFtxInternal(void);
//! Reads a FTX file
ILboolean ilLoadFtx(ILconst_string FileName)
{
ILHANDLE FtxFile;
ILboolean bFtx = IL_FALSE;
FtxFile = iopenr(FileName);
if (FtxFile == NULL) {
ilSetError(IL_COULD_NOT_OPEN_FILE);
return bFtx;
}
bFtx = ilLoadFtxF(FtxFile);
icloser(FtxFile);
return bFtx;
}
//! Reads an already-opened FTX file
ILboolean ilLoadFtxF(ILHANDLE File)
{
ILuint FirstPos;
ILboolean bRet;
iSetInputFile(File);
FirstPos = itell();
bRet = iLoadFtxInternal();
iseek(FirstPos, IL_SEEK_SET);
return bRet;
}
//! Reads from a memory "lump" that contains a FTX
ILboolean ilLoadFtxL(const void *Lump, ILuint Size)
{
iSetInputLump(Lump, Size);
return iLoadFtxInternal();
}
// Internal function used to load the FTX.
ILboolean iLoadFtxInternal(void)
{
ILuint Width, Height, HasAlpha;
if (iCurImage == NULL) {
ilSetError(IL_ILLEGAL_OPERATION);
return IL_FALSE;
}
Width = GetLittleUInt();
Height = GetLittleUInt();
HasAlpha = GetLittleUInt(); // Kind of backwards from what I would think...
//@TODO: Right now, it appears that all images are in RGBA format. See if I can find specs otherwise
// or images that load incorrectly like this.
//if (HasAlpha == 0) { // RGBA format
if (!ilTexImage(Width, Height, 1, 4, IL_RGBA, IL_UNSIGNED_BYTE, NULL))
return IL_FALSE;
//}
//else if (HasAlpha == 1) { // RGB format
// if (!ilTexImage(Width, Height, 1, 3, IL_RGB, IL_UNSIGNED_BYTE, NULL))
// return IL_FALSE;
//}
//else { // Unknown format
// ilSetError(IL_INVALID_FILE_HEADER);
// return IL_FALSE;
//}
// The origin will always be in the upper left.
iCurImage->Origin = IL_ORIGIN_UPPER_LEFT;
// All we have to do for this format is read the raw, uncompressed data.
if (iread(iCurImage->Data, 1, iCurImage->SizeOfData) != iCurImage->SizeOfData)
return IL_FALSE;
return ilFixImage();
}
#endif//IL_NO_FTX