//-----------------------------------------------------------------------------

//

// ImageLib Utility Sources

// Copyright (C) 2000-2002 by Denton Woods

// Last modified: 06/23/2002 <--Y2K Compliant! =]

//

// Filename: IL/ilu.h

//

// Description: The main include file for ILU

//

//-----------------------------------------------------------------------------





#ifndef __ilu_h_

#ifndef __ILU_H__



#define __ilu_h_

#define __ILU_H__



#include <IL/il.h>



#ifdef __cplusplus

extern "C" {

#endif

/*

#ifdef _WIN32

	#if defined(_MSC_VER) || defined(__BORLANDC__)

		#ifndef IL_STATIC_LIB

			#pragma comment(lib, "DevIL_DLL.lib")

			#ifndef _IL_BUILD_LIBRARY

				#pragma comment(lib, "DevILU_DLL.lib")

			#endif

		#else

			#ifndef _IL_BUILD_LIBRARY

				#ifdef  IL_DEBUG

					#pragma comment(lib, "DevILU_DBG.lib")

				#else

					#pragma comment(lib, "DevILU.lib")

				#endif//IL_DEBUG

			#endif

		#endif

	#endif

#endif

*/





#define ILU_VERSION_1_6_7					1

#define ILU_VERSION							167





#define ILU_FILTER							0x2600

#define ILU_NEAREST							0x2601

#define ILU_LINEAR							0x2602

#define ILU_BILINEAR						0x2603

#define ILU_SCALE_BOX						0x2604

#define ILU_SCALE_TRIANGLE					0x2605

#define ILU_SCALE_BELL						0x2606

#define ILU_SCALE_BSPLINE					0x2607

#define ILU_SCALE_LANCZOS3					0x2608

#define ILU_SCALE_MITCHELL					0x2609





// Error types

#define ILU_INVALID_ENUM					0x0501

#define ILU_OUT_OF_MEMORY					0x0502

#define ILU_INTERNAL_ERROR					0x0504

#define ILU_INVALID_VALUE					0x0505

#define ILU_ILLEGAL_OPERATION				0x0506

#define ILU_INVALID_PARAM					0x0509





// Values

#define ILU_PLACEMENT						0x0700

#define ILU_LOWER_LEFT						0x0701

#define ILU_LOWER_RIGHT						0x0702

#define ILU_UPPER_LEFT						0x0703

#define ILU_UPPER_RIGHT						0x0704

#define ILU_CENTER							0x0705

#define ILU_CONVOLUTION_MATRIX				0x0710

#define ILU_VERSION_NUM						IL_VERSION_NUM

#define ILU_VENDOR							IL_VENDOR





// Filters

/*

#define ILU_FILTER_BLUR						0x0803

#define ILU_FILTER_GAUSSIAN_3x3				0x0804

#define ILU_FILTER_GAUSSIAN_5X5				0x0805

#define ILU_FILTER_EMBOSS1					0x0807

#define ILU_FILTER_EMBOSS2					0x0808

#define ILU_FILTER_LAPLACIAN1				0x080A

#define ILU_FILTER_LAPLACIAN2				0x080B

#define ILU_FILTER_LAPLACIAN3				0x080C

#define ILU_FILTER_LAPLACIAN4				0x080D

#define ILU_FILTER_SHARPEN1					0x080E

#define ILU_FILTER_SHARPEN2					0x080F

#define ILU_FILTER_SHARPEN3					0x0810

*/





typedef struct ILinfo

{

	ILuint	Id;					// the image's id

	ILubyte	*Data;				// the image's data

	ILuint	Width;				// the image's width

	ILuint	Height;				// the image's height

	ILuint	Depth;				// the image's depth

	ILubyte	Bpp;				// bytes per pixel (not bits) of the image

	ILuint	SizeOfData;			// the total size of the data (in bytes)

	ILenum	Format;				// image format (in IL enum style)

	ILenum	Type;				// image type (in IL enum style)

	ILenum	Origin;				// origin of the image

	ILubyte	*Palette;			// the image's palette

	ILenum	PalType;			// palette type

	ILuint	PalSize;			// palette size

	ILenum	CubeFlags;			// flags for what cube map sides are present

	ILuint	NumNext;			// number of images following

	ILuint	NumMips;			// number of mipmaps

	ILuint	NumLayers;			// number of layers

} ILinfo;





typedef struct ILpointf

{

	ILfloat x, y;

} ILpointf;



typedef struct ILpointi

{

	ILint x, y;

} ILpointi;





// ImageLib Utility Functions

ILAPI ILboolean			ILAPIENTRY iluAlienify(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluBlurAvg(ILuint Iter);

ILAPI ILboolean			ILAPIENTRY iluBlurGaussian(ILuint Iter);

ILAPI ILboolean			ILAPIENTRY iluBuildMipmaps(ILvoid);

ILAPI ILuint			ILAPIENTRY iluColoursUsed(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluCompareImage(ILuint Comp);

ILAPI ILboolean			ILAPIENTRY iluContrast(ILfloat Contrast);

ILAPI ILboolean			ILAPIENTRY iluCrop(ILuint XOff, ILuint YOff, ILuint ZOff, ILuint Width, ILuint Height, ILuint Depth);

ILAPI ILvoid			ILAPIENTRY iluDeleteImage(ILuint Id);

ILAPI ILboolean			ILAPIENTRY iluEdgeDetectE(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluEdgeDetectP(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluEdgeDetectS(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluEmboss(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluEnlargeCanvas(ILuint Width, ILuint Height, ILuint Depth);

ILAPI ILboolean			ILAPIENTRY iluEnlargeImage(ILfloat XDim, ILfloat YDim, ILfloat ZDim);

ILAPI ILboolean			ILAPIENTRY iluEqualize(ILvoid);

ILAPI const ILstring	ILAPIENTRY iluErrorString(ILenum Error);

ILAPI ILboolean			ILAPIENTRY iluFlipImage(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluGammaCorrect(ILfloat Gamma);

ILAPI ILuint			ILAPIENTRY iluGenImage(ILvoid);

ILAPI ILvoid			ILAPIENTRY iluGetImageInfo(ILinfo *Info);

ILAPI ILint				ILAPIENTRY iluGetInteger(ILenum Mode);

ILAPI ILvoid			ILAPIENTRY iluGetIntegerv(ILenum Mode, ILint *Param);

ILAPI const ILstring	ILAPIENTRY iluGetString(ILenum StringName);

ILAPI ILvoid			ILAPIENTRY iluImageParameter(ILenum PName, ILenum Param);

ILAPI ILvoid			ILAPIENTRY iluInit(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluInvertAlpha(ILvoid);

ILAPI ILuint			ILAPIENTRY iluLoadImage(const ILstring FileName);

ILAPI ILboolean			ILAPIENTRY iluMirror(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluNegative(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluNoisify(ILclampf Tolerance);

ILAPI ILboolean			ILAPIENTRY iluPixelize(ILuint PixSize);

ILAPI ILvoid			ILAPIENTRY iluRegionfv(ILpointf *Points, ILuint n);

ILAPI ILvoid			ILAPIENTRY iluRegioniv(ILpointi *Points, ILuint n);

ILAPI ILboolean			ILAPIENTRY iluReplaceColour(ILubyte Red, ILubyte Green, ILubyte Blue, ILfloat Tolerance);

ILAPI ILboolean			ILAPIENTRY iluRotate(ILfloat Angle);

ILAPI ILboolean			ILAPIENTRY iluRotate3D(ILfloat x, ILfloat y, ILfloat z, ILfloat Angle);

ILAPI ILboolean			ILAPIENTRY iluSaturate1f(ILfloat Saturation);

ILAPI ILboolean			ILAPIENTRY iluSaturate4f(ILfloat r, ILfloat g, ILfloat b, ILfloat Saturation);

ILAPI ILboolean			ILAPIENTRY iluScale(ILuint Width, ILuint Height, ILuint Depth);

ILAPI ILboolean			ILAPIENTRY iluScaleColours(ILfloat r, ILfloat g, ILfloat b);

ILAPI ILboolean			ILAPIENTRY iluSharpen(ILfloat Factor, ILuint Iter);

ILAPI ILboolean			ILAPIENTRY iluSwapColours(ILvoid);

ILAPI ILboolean			ILAPIENTRY iluWave(ILfloat Angle);



#define iluColorsUsed	iluColoursUsed

#define iluSwapColors	iluSwapColours

#define iluReplaceColor	iluReplaceColour

#define iluScaleColor	iluScaleColour



#ifdef __cplusplus

}

#endif



#endif // __ILU_H__

#endif // __ilu_h_

