mirror of
https://github.com/love2d/megasource.git
synced 2026-08-17 11:11:35 +02:00
102 lines
2.2 KiB
C
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
|
|
|