mirror of
https://github.com/love2d/megasource.git
synced 2026-08-18 03:34:25 +02:00
Add DevIL 1.7.8.
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
//-----------------------------------------------------------------------------
|
||||
//
|
||||
// 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
|
||||
|
||||
Reference in New Issue
Block a user