1 /*
2 
3 Boost Software License - Version 1.0 - August 17th, 2003
4 
5 Permission is hereby granted, free of charge, to any person or organization
6 obtaining a copy of the software and accompanying documentation covered by
7 this license (the "Software") to use, reproduce, display, distribute,
8 execute, and transmit the Software, and to prepare derivative works of the
9 Software, and to permit third-parties to whom the Software is furnished to
10 do so, all subject to the following:
11 
12 The copyright notices in the Software and this entire statement, including
13 the above license grant, this restriction and the following disclaimer,
14 must be included in all copies of the Software, in whole or in part, and
15 all derivative works of the Software, unless such copies or derivative
16 works are solely in the form of machine-executable object code generated by
17 a source language processor.
18 
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21 FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
22 SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
23 FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
24 ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25 DEALINGS IN THE SOFTWARE.
26 
27 */
28 module derelict.devil.il;
29 
30 private {
31     import derelict.util.loader;
32     import derelict.util.system;
33 
34     static if(Derelict_OS_Windows)
35         enum libNames = "devil.dll";
36     else static if (Derelict_OS_Mac)
37         enum libNames = "libIL.dylib";
38     else static if(Derelict_OS_Posix)
39         enum libNames = "libIL.so";
40     else
41         static assert(0, "Need to implement DevIL libNames for this operating system.");
42 }
43 
44 alias ILenum = uint;
45 alias ILboolean = ubyte;
46 alias ILbitfield = uint;
47 alias ILbyte = byte;
48 alias ILshort = short;
49 alias ILint = int;
50 alias ILsizei = size_t;
51 alias ILubyte = ubyte;
52 alias ILushort = ushort;
53 alias ILuint = uint;
54 alias ILfloat = float;
55 alias ILclampf = float;
56 alias ILdouble = double;
57 alias ILclampd = double;
58 alias ILint64 = long;
59 alias ILuint64 = ulong;
60 
61 version(DerelictIL_Unicode) {
62     alias ILchar = wchar;
63     alias ILstring = wchar*;
64     alias ILconst_string = const(wchar)*;
65 }
66 else {
67     alias ILchar = char;
68     alias ILstring = char*;
69     alias ILconst_string = const(char)*;
70 }
71 
72 enum : ILboolean {
73     IL_FALSE=0,
74     IL_TRUE=1,
75 }
76 
77 enum : ILenum {
78     IL_COLOUR_INDEX = 0x1900,
79     IL_COLOR_INDEX = 0x1900,
80     IL_RGB = 0x1907,
81     IL_RGBA = 0x1908,
82     IL_BGR = 0x80E0,
83     IL_BGRA = 0x80E1,
84     IL_LUMINANCE = 0x1909,
85     IL_LUMINANCE_ALPHA = 0x190A,
86 
87     IL_BYTE = 0x1400,
88     IL_UNSIGNED_BYTE = 0x1401,
89     IL_SHORT = 0x1402,
90     IL_UNSIGNED_SHORT = 0x1403,
91     IL_INT = 0x1404,
92     IL_UNSIGNED_INT = 0x1405,
93     IL_FLOAT = 0x1406,
94     IL_DOUBLE = 0x140A,
95     IL_HALF  =  0x140B,
96 
97     IL_MAX_BYTE  =  byte.max,
98     IL_MAX_UNSIGNED_BYTE  =  ubyte.max,
99     IL_MAX_SHORT  =  short.max,
100     IL_MAX_UNSIGNED_SHORT  =  ushort.max,
101     IL_MAX_INT  =  int.max,
102     IL_MAX_UNSIGNED_INT  =  uint.max,
103 
104     IL_VENDOR = 0x1F00,
105     IL_LOAD_EXT = 0x1F01,
106     IL_SAVE_EXT = 0x1F02,
107 
108     IL_VERSION_1_8_0 = 1,
109     IL_VERSION = 180,
110 
111     IL_ORIGIN_BIT = 0x00000001,
112     IL_FILE_BIT = 0x00000002,
113     IL_PAL_BIT = 0x00000004,
114     IL_FORMAT_BIT = 0x00000008,
115     IL_TYPE_BIT = 0x00000010,
116     IL_COMPRESS_BIT = 0x00000020,
117     IL_LOADFAIL_BIT = 0x00000040,
118     IL_FORMAT_SPECIFIC_BIT = 0x00000080,
119     IL_ALL_ATTRIB_BITS = 0x000FFFFF,
120 
121     IL_PAL_NONE = 0x0400,
122     IL_PAL_RGB24 = 0x0401,
123     IL_PAL_RGB32 = 0x0402,
124     IL_PAL_RGBA32 = 0x0403,
125     IL_PAL_BGR24 = 0x0404,
126     IL_PAL_BGR32 = 0x0405,
127     IL_PAL_BGRA32 = 0x0406,
128 
129     IL_TYPE_UNKNOWN = 0x0000,
130     IL_BMP = 0x0420,
131     IL_CUT = 0x0421,
132     IL_DOOM = 0x0422,
133     IL_DOOM_FLAT = 0x0423,
134     IL_ICO = 0x0424,
135     IL_JPG = 0x0425,
136     IL_JFIF = 0x0425,
137     IL_ILBM = 0x0426,
138     IL_PCD = 0x0427,
139     IL_PCX = 0x0428,
140     IL_PIC = 0x0429,
141     IL_PNG = 0x042A,
142     IL_PNM = 0x042B,
143     IL_SGI = 0x042C,
144     IL_TGA = 0x042D,
145     IL_TIF = 0x042E,
146     IL_CHEAD = 0x042F,
147     IL_RAW = 0x0430,
148     IL_MDL = 0x0431,
149     IL_WAL = 0x0432,
150     IL_LIF = 0x0434,
151     IL_MNG = 0x0435,
152     IL_JNG = 0x0435,
153     IL_GIF = 0x0436,
154     IL_DDS = 0x0437,
155     IL_DCX = 0x0438,
156     IL_PSD = 0x0439,
157     IL_EXIF = 0x043A,
158     IL_PSP = 0x043B,
159     IL_PIX = 0x043C,
160     IL_PXR = 0x043D,
161     IL_XPM = 0x043E,
162     IL_HDR = 0x043F,
163     IL_ICNS = 0x0440,
164     IL_JP2 = 0x0441,
165     IL_EXR = 0x0442,
166     IL_WDP = 0x0443,
167     IL_VTF = 0x0444,
168     IL_WBMP = 0x0445,
169     IL_SUN = 0x0446,
170     IL_IFF = 0x0447,
171     IL_TPL = 0x0448,
172     IL_FITS = 0x0449,
173     IL_DICOM = 0x044A,
174     IL_IWI = 0x044B,
175     IL_BLP = 0x044C,
176     IL_FTX = 0x044D,
177     IL_ROT = 0x44E,
178     IL_TEXTURE = 0x44F,
179     IL_DPX = 0x450,
180     IL_UTX = 0x451,
181     IL_MP3 = 0x0452,
182     IL_KTX = 0x0453,
183 
184     IL_JASC_PAL = 0x0475,
185 
186     IL_NO_ERROR = 0x0000,
187     IL_INVALID_ENUM = 0x0501,
188     IL_OUT_OF_MEMORY = 0x0502,
189     IL_FORMAT_NOT_SUPPORTED = 0x0503,
190     IL_INTERNAL_ERROR = 0x0504,
191     IL_INVALID_VALUE = 0x0505,
192     IL_ILLEGAL_OPERATION = 0x0506,
193     IL_ILLEGAL_FILE_VALUE = 0x0507,
194     IL_INVALID_FILE_HEADER = 0x0508,
195     IL_INVALID_PARAM = 0x0509,
196     IL_COULD_NOT_OPEN_FILE = 0x050A,
197     IL_INVALID_EXTENSION = 0x050B,
198     IL_FILE_ALREADY_EXISTS = 0x050C,
199     IL_OUT_FORMAT_SAME = 0x050D,
200     IL_STACK_OVERFLOW = 0x050E,
201     IL_STACK_UNDERFLOW = 0x050F,
202     IL_INVALID_CONVERSION = 0x0510,
203     IL_BAD_DIMENSIONS = 0x0511,
204     IL_FILE_READ_ERROR = 0x0512,
205     IL_FILE_WRITE_ERROR = 0x0512,
206 
207     IL_LIB_GIF_ERROR = 0x05E1,
208     IL_LIB_JPEG_ERROR = 0x05E2,
209     IL_LIB_PNG_ERROR = 0x05E3,
210     IL_LIB_TIFF_ERROR = 0x05E4,
211     IL_LIB_MNG_ERROR = 0x05E5,
212     IL_LIB_JP2_ERROR = 0x05E6,
213     IL_UNKNOWN_ERROR = 0x05FF,
214 
215     IL_ORIGIN_SET = 0x0600,
216     IL_ORIGIN_LOWER_LEFT = 0x0601,
217     IL_ORIGIN_UPPER_LEFT = 0x0602,
218     IL_ORIGIN_MODE = 0x0603,
219 
220     IL_FORMAT_SET = 0x0610,
221     IL_FORMAT_MODE = 0x0611,
222     IL_TYPE_SET = 0x0612,
223     IL_TYPE_MODE = 0x0613,
224 
225     IL_FILE_OVERWRITE = 0x0620,
226     IL_FILE_MODE = 0x0621,
227 
228     IL_CONV_PAL = 0x0630,
229 
230     IL_DEFAULT_ON_FAIL = 0x0632,
231 
232     IL_USE_KEY_COLOUR = 0x0635,
233     IL_USE_KEY_COLOR = 0x0635,
234     IL_BLIT_BLEND = 0x0636,
235 
236     IL_SAVE_INTERLACED = 0x0639,
237     IL_INTERLACE_MODE = 0x063A,
238 
239     IL_QUANTIZATION_MODE = 0x0640,
240     IL_WU_QUANT = 0x0641,
241     IL_NEU_QUANT = 0x0642,
242     IL_NEU_QUANT_SAMPLE = 0x0643,
243     IL_MAX_QUANT_INDEXS = 0x0644,
244     IL_MAX_QUANT_INDICES = 0x0644,
245 
246     IL_FASTEST = 0x0660,
247     IL_LESS_MEM = 0x0661,
248     IL_DONT_CARE = 0x0662,
249     IL_MEM_SPEED_HINT = 0x0665,
250     IL_USE_COMPRESSION = 0x0666,
251     IL_NO_COMPRESSION = 0x0667,
252     IL_COMPRESSION_HINT = 0x0668,
253 
254     IL_NVIDIA_COMPRESS = 0x0670,
255     IL_SQUISH_COMPRESS = 0x0671,
256 
257     IL_SUB_NEXT = 0x0680,
258     IL_SUB_MIPMAP = 0x0681,
259     IL_SUB_LAYER = 0x0682,
260 
261     IL_COMPRESS_MODE = 0x0700,
262     IL_COMPRESS_NONE = 0x0701,
263     IL_COMPRESS_RLE = 0x0702,
264     IL_COMPRESS_LZO = 0x0703,
265     IL_COMPRESS_ZLIB = 0x0704,
266 
267     IL_TGA_CREATE_STAMP = 0x0710,
268     IL_JPG_QUALITY = 0x0711,
269     IL_PNG_INTERLACE = 0x0712,
270     IL_TGA_RLE = 0x0713,
271     IL_BMP_RLE = 0x0714,
272     IL_SGI_RLE = 0x0715,
273     IL_TGA_ID_STRING = 0x0717,
274     IL_TGA_AUTHNAME_STRING = 0x0718,
275     IL_TGA_AUTHCOMMENT_STRING = 0x0719,
276     IL_PNG_AUTHNAME_STRING = 0x071A,
277     IL_PNG_TITLE_STRING = 0x071B,
278     IL_PNG_DESCRIPTION_STRING = 0x071C,
279     IL_TIF_DESCRIPTION_STRING = 0x071D,
280     IL_TIF_HOSTCOMPUTER_STRING = 0x071E,
281     IL_TIF_DOCUMENTNAME_STRING = 0x071F,
282     IL_TIF_AUTHNAME_STRING = 0x0720,
283     IL_JPG_SAVE_FORMAT = 0x0721,
284     IL_CHEAD_HEADER_STRING = 0x0722,
285     IL_PCD_PICNUM = 0x0723,
286     IL_PNG_ALPHA_INDEX = 0x0724,
287     IL_JPG_PROGRESSIVE = 0x0725,
288     IL_VTF_COMP = 0x0726,
289 
290     IL_DXTC_FORMAT = 0x0705,
291     IL_DXT1 = 0x0706,
292     IL_DXT2 = 0x0707,
293     IL_DXT3 = 0x0708,
294     IL_DXT4 = 0x0709,
295     IL_DXT5 = 0x070A,
296     IL_DXT_NO_COMP = 0x070B,
297     IL_KEEP_DXTC_DATA = 0x070C,
298     IL_DXTC_DATA_FORMAT = 0x070D,
299     IL_3DC = 0x070E,
300     IL_RXGB = 0x070F,
301     IL_ATI1N = 0x0710,
302     IL_DXT1A = 0x0711,
303 
304     IL_CUBEMAP_POSITIVEX = 0x00000400,
305     IL_CUBEMAP_NEGATIVEX = 0x00000800,
306     IL_CUBEMAP_POSITIVEY = 0x00001000,
307     IL_CUBEMAP_NEGATIVEY = 0x00002000,
308     IL_CUBEMAP_POSITIVEZ = 0x00004000,
309     IL_CUBEMAP_NEGATIVEZ = 0x00008000,
310     IL_SPHEREMAP = 0x00010000,
311 
312     IL_VERSION_NUM = 0x0DE2,
313     IL_IMAGE_WIDTH = 0x0DE4,
314     IL_IMAGE_HEIGHT = 0x0DE5,
315     IL_IMAGE_DEPTH = 0x0DE6,
316     IL_IMAGE_SIZE_OF_DATA = 0x0DE7,
317     IL_IMAGE_BPP = 0x0DE8,
318     IL_IMAGE_BYTES_PER_PIXEL = 0x0DE8,
319     IL_IMAGE_BITS_PER_PIXEL = 0x0DE9,
320     IL_IMAGE_FORMAT = 0x0DEA,
321     IL_IMAGE_TYPE = 0x0DEB,
322     IL_PALETTE_TYPE = 0x0DEC,
323     IL_PALETTE_SIZE = 0x0DED,
324     IL_PALETTE_BPP = 0x0DEE,
325     IL_PALETTE_NUM_COLS = 0x0DEF,
326     IL_PALETTE_BASE_TYPE = 0x0DF0,
327     IL_NUM_FACES = 0x0DE1,
328     IL_NUM_IMAGES = 0x0DF1,
329     IL_NUM_MIPMAPS = 0x0DF2,
330     IL_NUM_LAYERS = 0x0DF3,
331     IL_ACTIVE_IMAGE = 0x0DF4,
332     IL_ACTIVE_MIPMAP = 0x0DF5,
333     IL_ACTIVE_LAYER = 0x0DF6,
334     IL_ACTIVE_FACE = 0x0E00,
335     IL_CUR_IMAGE = 0x0DF7,
336     IL_IMAGE_DURATION = 0x0DF8,
337     IL_IMAGE_PLANESIZE = 0x0DF9,
338     IL_IMAGE_BPC = 0x0DFA,
339     IL_IMAGE_OFFX = 0x0DFB,
340     IL_IMAGE_OFFY = 0x0DFC,
341     IL_IMAGE_CUBEFLAGS = 0x0DFD,
342     IL_IMAGE_ORIGIN = 0x0DFE,
343     IL_IMAGE_CHANNELS = 0x0DFF,
344 }
345 
346 enum : ILint {
347     IL_SEEK_SET = 0,
348     IL_SEEK_CUR = 1,
349     IL_SEEK_END = 2,
350     IL_EOF = 1,
351 }
352 
353 alias ILHANDLE = void*;
354 
355 // Callbacks
356 extern(System) nothrow {
357     alias fCloseRProc = void function(ILHANDLE);
358     alias fEofProc = ILboolean function(ILHANDLE);
359     alias fGetcProc = ILint function(ILHANDLE);
360     alias fOpenRProc = ILHANDLE function(ILconst_string);
361     alias fReadProc = ILint function(void*,ILuint,ILuint,ILHANDLE);
362     alias fSeekRProc = ILint function(ILHANDLE,ILint,ILint);
363     alias fTellRProc = ILint function(ILHANDLE);
364 
365     alias fCloseWProc = void function(ILHANDLE);
366     alias fOpenWProc = ILHANDLE function(ILconst_string);
367     alias fPutcProc = ILint function(ILubyte,ILHANDLE);
368     alias fSeekWProc = ILint function(ILHANDLE,ILint,ILint);
369     alias fTellWProc = ILint function(ILHANDLE);
370     alias fWriteProc = ILint function(const(void)*,ILuint,ILuint,ILHANDLE);
371 
372     alias mAlloc = void* function(const(ILsizei));
373     alias mFree = void function(const(void)*);
374 
375     alias IL_LOADPROC = ILenum function(ILconst_string);
376     alias IL_SAVEPROC = ILenum function(ILconst_string);
377 }
378 
379 // API
380 extern(System) @nogc nothrow {
381     alias da_ilActiveFace = ILboolean function(ILuint);
382     alias da_ilActiveImage = ILboolean function(ILuint);
383     alias da_ilActiveLayer = ILboolean function(ILuint);
384     alias da_ilActiveMipmap = ILboolean function(ILuint);
385     alias da_ilApplyPal = ILboolean function(ILconst_string);
386     alias da_ilApplyProfile = ILboolean function(ILstring,ILstring);
387     alias da_ilBindImage = void function(ILuint);
388     alias da_ilBlit = ILboolean function(ILuint,ILint,ILint,ILint,ILuint,ILuint,ILuint,ILuint,ILuint,ILuint);
389     alias da_ilClampNTSC = ILboolean function();
390     alias da_ilClearColour = void function(ILclampf,ILclampf,ILclampf,ILclampf);
391     alias da_ilClearImage = ILboolean function();
392     alias da_ilCloneCurImage = ILuint function();
393     alias da_ilCompressDXT = ILubyte* function(ILubyte*,ILuint,ILuint,ILuint,ILenum,ILuint*);
394     alias da_ilCompressFunc = ILboolean function(ILenum);
395     alias da_ilConvertImage = ILboolean function(ILenum,ILenum);
396     alias da_ilConvertPal = ILboolean function(ILenum);
397     alias da_ilCopyImage = ILboolean function(ILuint);
398     alias da_ilCopyPixels = ILuint function(ILuint,ILuint,ILuint,ILuint,ILuint,ILuint,ILenum,ILenum,void*);
399     alias da_ilCreateSubImage = ILuint function(ILenum,ILuint);
400     alias da_ilDefaultImage = ILboolean function();
401     alias da_ilDeleteImage = void function(ILuint);
402     alias da_ilDeleteImages = void function(ILsizei,in ILuint*);
403     alias da_ilDetermineType = ILenum function(ILconst_string);
404     alias da_ilDetermineTypeF = ILenum function(ILHANDLE);
405     alias da_ilDetermineTypeL = ILenum function(const(void)*,ILuint);
406     alias da_ilDisable = ILboolean function(ILenum);
407     alias da_ilDxtcDataToImage = ILboolean function();
408     alias da_ilDxtcDataToSurface = ILboolean function();
409     alias da_ilEnable = ILboolean function(ILenum);
410     //alias da_ilFlipSurfaceDxtcData = void function();
411     alias da_ilFormatFunc = ILboolean function(ILenum);
412     alias da_ilGenImages = void function(ILsizei,ILuint*);
413     alias da_ilGenImage = ILuint function();
414     alias da_ilGetAlpha = ILubyte* function(ILenum);
415     alias da_ilGetBoolean = ILboolean function(ILenum);
416     alias da_ilGetBooleanv = void function(ILenum,ILboolean*);
417     alias da_ilGetData = ILubyte* function();
418     alias da_ilGetDXTCData = ILuint function(void*,ILuint,ILenum);
419     alias da_ilGetError = ILenum function();
420     alias da_ilGetInteger = ILint function(ILenum);
421     alias da_ilGetIntegerv = void function(ILenum,ILint*);
422     alias da_ilGetLumpPos = ILuint function();
423     alias da_ilGetPalette = ILubyte* function();
424     alias da_ilGetString = ILstring function(ILenum);
425     alias da_ilHint = void function(ILenum,ILenum);
426     alias da_ilInit = void function();
427     alias da_ilImageToDxtcData = ILboolean function(ILenum);
428     alias da_ilIsDisabled = ILboolean function(ILenum);
429     alias da_ilIsEnabled = ILboolean function(ILenum);
430     alias da_ilIsImage = ILboolean function(ILuint);
431     alias da_ilIsValid = ILboolean function(ILenum,ILstring);
432     alias da_ilIsValidF = ILboolean function(ILenum,ILHANDLE);
433     alias da_ilIsValidL = ILboolean function(ILenum,void*,ILuint);
434     alias da_ilKeyColour = void function(ILclampf,ILclampf,ILclampf,ILclampf);
435     alias da_ilLoad = ILboolean function(ILenum,ILconst_string);
436     alias da_ilLoadF = ILboolean function(ILenum,ILHANDLE);
437     alias da_ilLoadImage = ILboolean function(ILconst_string);
438     alias da_ilLoadL = ILboolean function(ILenum,in void*,ILuint);
439     alias da_ilLoadPal = ILboolean function(ILconst_string);
440     alias da_ilModAlpha = void function(ILdouble);
441     alias da_ilOriginFunc = ILboolean function(ILenum);
442     alias da_ilOverlayImage = ILboolean function(ILuint,ILint,ILint,ILint);
443     alias da_ilPopAttrib = void function();
444     alias da_ilPushAttrib = void function(ILuint);
445     alias da_ilRegisterFormat = void function(ILenum);
446     alias da_ilRegisterLoad = ILboolean function(ILconst_string,IL_LOADPROC);
447     alias da_ilRegisterMipNum = ILboolean function(ILuint);
448     alias da_ilRegisterNumImages = ILboolean function(ILuint);
449     alias da_ilRegisterOrigin = void function(ILenum);
450     alias da_ilRegisterPal = void function(void*,ILuint,ILenum);
451     alias da_ilRegisterSave = ILboolean function(ILconst_string,IL_SAVEPROC);
452     alias da_ilRegisterType = void function(ILenum);
453     alias da_ilRemoveLoad = ILboolean function(ILconst_string);
454     alias da_ilRemoveSave = ILboolean function(ILconst_string);
455     alias da_ilResetRead = void function();
456     alias da_ilResetWrite = void function();
457     alias da_ilSave = ILboolean function(ILenum,ILconst_string);
458     alias da_ilSaveF = ILuint function(ILenum,ILHANDLE);
459     alias da_ilSaveImage = ILboolean function(ILconst_string);
460     alias da_ilSaveL = ILuint function(ILenum,void*,ILuint);
461     alias da_ilSavePal = ILboolean function(ILconst_string);
462     alias da_ilSetAlpha = ILboolean function(ILdouble);
463     alias da_ilSetData = ILboolean function(void*);
464     alias da_ilSetDuration = ILboolean function(ILuint);
465     alias da_ilSetInteger = void function(ILenum,ILint);
466     alias da_ilSetMemory = void function(mAlloc,mFree);
467     alias da_ilSetPixels = void function(ILint,ILint,ILint,ILuint,ILuint,ILuint,ILenum,ILenum,void*);
468     alias da_ilSetRead = void function(fOpenRProc,fCloseRProc,fEofProc,fGetcProc,fReadProc,fSeekRProc,fTellRProc);
469     alias da_ilSetString = void function(ILenum,in char*);
470     alias da_ilSetWrite = void function(fOpenWProc,fCloseWProc,fPutcProc,fSeekWProc,fTellWProc,fWriteProc);
471     alias da_ilShutDown = void function();
472     alias da_ilSurfaceToDxtcData = ILboolean function(ILenum);
473     alias da_ilTexImage = ILboolean function(ILuint,ILuint,ILuint,ILubyte,ILenum,ILenum,void*);
474     alias da_ilTexImageDxtc = ILboolean function(ILint,ILuint,ILuint,ILubyte,ILenum,ILenum,void*);
475     alias da_ilTypeFromExt = ILenum function(ILconst_string);
476     alias da_ilTypeFunc = ILboolean function(ILenum);
477     alias da_ilLoadData = ILboolean function(ILconst_string,ILuint,ILuint,ILuint,ILubyte);
478     alias da_ilLoadDataF = ILboolean function(ILHANDLE,ILuint,ILuint,ILuint,ILubyte);
479     alias da_ilLoadDataL = ILboolean function(void*,ILuint,ILuint,ILuint,ILuint,ILubyte);
480     alias da_ilSaveData = ILboolean function(ILconst_string);
481 }
482 
483 __gshared {
484     da_ilActiveFace ilActiveFace;
485     da_ilActiveImage ilActiveImage;
486     da_ilActiveLayer ilActiveLayer;
487     da_ilActiveMipmap ilActiveMipmap;
488     da_ilApplyPal ilApplyPal;
489     da_ilApplyProfile ilApplyProfile;
490     da_ilBindImage ilBindImage;
491     da_ilBlit ilBlit;
492     da_ilClampNTSC ilClampNTSC;
493     da_ilClearColour ilClearColour;
494     da_ilClearImage ilClearImage;
495     da_ilCloneCurImage ilCloneCurImage;
496     da_ilCompressDXT ilCompressDXT;
497     da_ilCompressFunc ilCompressFunc;
498     da_ilConvertImage ilConvertImage;
499     da_ilConvertPal ilConvertPal;
500     da_ilCopyImage ilCopyImage;
501     da_ilCopyPixels ilCopyPixels;
502     da_ilCreateSubImage ilCreateSubImage;
503     da_ilDefaultImage ilDefaultImage;
504     da_ilDeleteImage ilDeleteImage;
505     da_ilDeleteImages ilDeleteImages;
506     da_ilDetermineType ilDetermineType;
507     da_ilDetermineTypeF ilDetermineTypeF;
508     da_ilDetermineTypeL ilDetermineTypeL;
509     da_ilDisable ilDisable;
510     da_ilDxtcDataToImage ilDxtcDataToImage;
511     da_ilDxtcDataToSurface ilDxtcDataToSurface;
512     da_ilEnable ilEnable;
513     //da_ilFlipSurfaceDxtcData ilFlipSurfaceDxtcData;
514     da_ilFormatFunc ilFormatFunc;
515     da_ilGenImages ilGenImages;
516     da_ilGenImage ilGenImage;
517     da_ilGetAlpha ilGetAlpha;
518     da_ilGetBoolean ilGetBoolean;
519     da_ilGetBooleanv ilGetBooleanv;
520     da_ilGetData ilGetData;
521     da_ilGetDXTCData ilGetDXTCData;
522     da_ilGetError ilGetError;
523     da_ilGetInteger ilGetInteger;
524     da_ilGetIntegerv ilGetIntegerv;
525     da_ilGetLumpPos ilGetLumpPos;
526     da_ilGetPalette ilGetPalette;
527     da_ilGetString ilGetString;
528     da_ilHint ilHint;
529     da_ilInit ilInit;
530     da_ilImageToDxtcData ilImageToDxtcData;
531     da_ilIsDisabled ilIsDisabled;
532     da_ilIsEnabled ilIsEnabled;
533     da_ilIsImage ilIsImage;
534     da_ilIsValid ilIsValid;
535     da_ilIsValidF ilIsValidF;
536     da_ilIsValidL ilIsValidL;
537     da_ilKeyColour ilKeyColour;
538     da_ilLoad ilLoad;
539     da_ilLoadF ilLoadF;
540     da_ilLoadImage ilLoadImage;
541     da_ilLoadL ilLoadL;
542     da_ilLoadPal ilLoadPal;
543     da_ilModAlpha ilModAlpha;
544     da_ilOriginFunc ilOriginFunc;
545     da_ilOverlayImage ilOverlayImage;
546     da_ilPopAttrib ilPopAttrib;
547     da_ilPushAttrib ilPushAttrib;
548     da_ilRegisterFormat ilRegisterFormat;
549     da_ilRegisterLoad ilRegisterLoad;
550     da_ilRegisterMipNum ilRegisterMipNum;
551     da_ilRegisterNumImages ilRegisterNumImages;
552     da_ilRegisterOrigin ilRegisterOrigin;
553     da_ilRegisterPal ilRegisterPal;
554     da_ilRegisterSave ilRegisterSave;
555     da_ilRegisterType ilRegisterType;
556     da_ilRemoveLoad ilRemoveLoad;
557     da_ilRemoveSave ilRemoveSave;
558     da_ilResetRead ilResetRead;
559     da_ilResetWrite ilResetWrite;
560     da_ilSave ilSave;
561     da_ilSaveF ilSaveF;
562     da_ilSaveImage ilSaveImage;
563     da_ilSaveL ilSaveL;
564     da_ilSavePal ilSavePal;
565     da_ilSetAlpha ilSetAlpha;
566     da_ilSetData ilSetData;
567     da_ilSetDuration ilSetDuration;
568     da_ilSetInteger ilSetInteger;
569     da_ilSetMemory ilSetMemory;
570     da_ilSetPixels ilSetPixels;
571     da_ilSetRead ilSetRead;
572     da_ilSetString ilSetString;
573     da_ilSetWrite ilSetWrite;
574     da_ilShutDown ilShutDown;
575     da_ilSurfaceToDxtcData ilSurfaceToDxtcData;
576     da_ilTexImage ilTexImage;
577     da_ilTexImageDxtc ilTexImageDxtc;
578     da_ilTypeFromExt ilTypeFromExt;
579     da_ilTypeFunc ilTypeFunc;
580     da_ilLoadData ilLoadData;
581     da_ilLoadDataF ilLoadDataF;
582     da_ilLoadDataL ilLoadDataL;
583     da_ilSaveData ilSaveData;
584 
585     alias ilClearColor = ilClearColour;
586     alias ilKeyColor = ilKeyColour;
587 }
588 
589 class DerelictILLoader : SharedLibLoader {
590     public this() {
591         super(libNames);
592     }
593 
594     protected override void loadSymbols() {
595         bindFunc(cast(void**)&ilActiveFace, "ilActiveFace");
596         bindFunc(cast(void**)&ilActiveImage, "ilActiveImage");
597         bindFunc(cast(void**)&ilActiveLayer, "ilActiveLayer");
598         bindFunc(cast(void**)&ilActiveMipmap, "ilActiveMipmap");
599         bindFunc(cast(void**)&ilApplyPal, "ilApplyPal");
600         bindFunc(cast(void**)&ilApplyProfile, "ilApplyProfile");
601         bindFunc(cast(void**)&ilBindImage, "ilBindImage");
602         bindFunc(cast(void**)&ilBlit, "ilBlit");
603         bindFunc(cast(void**)&ilClampNTSC, "ilClampNTSC");
604         bindFunc(cast(void**)&ilClearColour, "ilClearColour");
605         bindFunc(cast(void**)&ilClearImage, "ilClearImage");
606         bindFunc(cast(void**)&ilCloneCurImage, "ilCloneCurImage");
607         bindFunc(cast(void**)&ilCompressDXT, "ilCompressDXT");
608         bindFunc(cast(void**)&ilCompressFunc, "ilCompressFunc");
609         bindFunc(cast(void**)&ilConvertImage, "ilConvertImage");
610         bindFunc(cast(void**)&ilConvertPal, "ilConvertPal");
611         bindFunc(cast(void**)&ilCopyImage, "ilCopyImage");
612         bindFunc(cast(void**)&ilCopyPixels, "ilCopyPixels");
613         bindFunc(cast(void**)&ilCreateSubImage, "ilCreateSubImage");
614         bindFunc(cast(void**)&ilDefaultImage, "ilDefaultImage");
615         bindFunc(cast(void**)&ilDeleteImage, "ilDeleteImage");
616         bindFunc(cast(void**)&ilDeleteImages, "ilDeleteImages");
617         bindFunc(cast(void**)&ilDetermineType, "ilDetermineType");
618         bindFunc(cast(void**)&ilDetermineTypeF, "ilDetermineTypeF");
619         bindFunc(cast(void**)&ilDetermineTypeL, "ilDetermineTypeL");
620         bindFunc(cast(void**)&ilDisable, "ilDisable");
621         bindFunc(cast(void**)&ilDxtcDataToImage, "ilDxtcDataToImage");
622         bindFunc(cast(void**)&ilDxtcDataToSurface, "ilDxtcDataToSurface");
623         bindFunc(cast(void**)&ilEnable, "ilEnable");
624         //bindFunc(cast(void**)&ilFlipSurfaceDxtcData, "ilFlipSurfaceDxtcData");
625         bindFunc(cast(void**)&ilFormatFunc, "ilFormatFunc");
626         bindFunc(cast(void**)&ilGenImages, "ilGenImages");
627         bindFunc(cast(void**)&ilGenImage, "ilGenImage");
628         bindFunc(cast(void**)&ilGetAlpha, "ilGetAlpha");
629         bindFunc(cast(void**)&ilGetBoolean, "ilGetBoolean");
630         bindFunc(cast(void**)&ilGetBooleanv, "ilGetBooleanv");
631         bindFunc(cast(void**)&ilGetData, "ilGetData");
632         bindFunc(cast(void**)&ilGetDXTCData, "ilGetDXTCData");
633         bindFunc(cast(void**)&ilGetError, "ilGetError");
634         bindFunc(cast(void**)&ilGetInteger, "ilGetInteger");
635         bindFunc(cast(void**)&ilGetIntegerv, "ilGetIntegerv");
636         bindFunc(cast(void**)&ilGetLumpPos, "ilGetLumpPos");
637         bindFunc(cast(void**)&ilGetPalette, "ilGetPalette");
638         bindFunc(cast(void**)&ilGetString, "ilGetString");
639         bindFunc(cast(void**)&ilHint, "ilHint");
640         bindFunc(cast(void**)&ilInit, "ilInit");
641         bindFunc(cast(void**)&ilImageToDxtcData, "ilImageToDxtcData");
642         bindFunc(cast(void**)&ilIsDisabled, "ilIsDisabled");
643         bindFunc(cast(void**)&ilIsEnabled, "ilIsEnabled");
644         bindFunc(cast(void**)&ilIsImage, "ilIsImage");
645         bindFunc(cast(void**)&ilIsValid, "ilIsValid");
646         bindFunc(cast(void**)&ilIsValidF, "ilIsValidF");
647         bindFunc(cast(void**)&ilIsValidL, "ilIsValidL");
648         bindFunc(cast(void**)&ilKeyColour, "ilKeyColour");
649         bindFunc(cast(void**)&ilLoad, "ilLoad");
650         bindFunc(cast(void**)&ilLoadF, "ilLoadF");
651         bindFunc(cast(void**)&ilLoadImage, "ilLoadImage");
652         bindFunc(cast(void**)&ilLoadL, "ilLoadL");
653         bindFunc(cast(void**)&ilLoadPal, "ilLoadPal");
654         bindFunc(cast(void**)&ilModAlpha, "ilModAlpha");
655         bindFunc(cast(void**)&ilOriginFunc, "ilOriginFunc");
656         bindFunc(cast(void**)&ilOverlayImage, "ilOverlayImage");
657         bindFunc(cast(void**)&ilPopAttrib, "ilPopAttrib");
658         bindFunc(cast(void**)&ilPushAttrib, "ilPushAttrib");
659         bindFunc(cast(void**)&ilRegisterFormat, "ilRegisterFormat");
660         bindFunc(cast(void**)&ilRegisterLoad, "ilRegisterLoad");
661         bindFunc(cast(void**)&ilRegisterMipNum, "ilRegisterMipNum");
662         bindFunc(cast(void**)&ilRegisterNumImages, "ilRegisterNumImages");
663         bindFunc(cast(void**)&ilRegisterOrigin, "ilRegisterOrigin");
664         bindFunc(cast(void**)&ilRegisterPal, "ilRegisterPal");
665         bindFunc(cast(void**)&ilRegisterSave, "ilRegisterSave");
666         bindFunc(cast(void**)&ilRegisterType, "ilRegisterType");
667         bindFunc(cast(void**)&ilRemoveLoad, "ilRemoveLoad");
668         bindFunc(cast(void**)&ilRemoveSave, "ilRemoveSave");
669         bindFunc(cast(void**)&ilResetRead, "ilResetRead");
670         bindFunc(cast(void**)&ilResetWrite, "ilResetWrite");
671         bindFunc(cast(void**)&ilSave, "ilSave");
672         bindFunc(cast(void**)&ilSaveF, "ilSaveF");
673         bindFunc(cast(void**)&ilSaveImage, "ilSaveImage");
674         bindFunc(cast(void**)&ilSaveL, "ilSaveL");
675         bindFunc(cast(void**)&ilSavePal, "ilSavePal");
676         bindFunc(cast(void**)&ilSetAlpha, "ilSetAlpha");
677         bindFunc(cast(void**)&ilSetData, "ilSetData");
678         bindFunc(cast(void**)&ilSetDuration, "ilSetDuration");
679         bindFunc(cast(void**)&ilSetInteger, "ilSetInteger");
680         bindFunc(cast(void**)&ilSetMemory, "ilSetMemory");
681         bindFunc(cast(void**)&ilSetPixels, "ilSetPixels");
682         bindFunc(cast(void**)&ilSetRead, "ilSetRead");
683         bindFunc(cast(void**)&ilSetString, "ilSetString");
684         bindFunc(cast(void**)&ilSetWrite, "ilSetWrite");
685         bindFunc(cast(void**)&ilShutDown, "ilShutDown");
686         bindFunc(cast(void**)&ilSurfaceToDxtcData, "ilSurfaceToDxtcData");
687         bindFunc(cast(void**)&ilTexImage, "ilTexImage");
688         bindFunc(cast(void**)&ilTexImageDxtc, "ilTexImageDxtc");
689         bindFunc(cast(void**)&ilTypeFromExt, "ilTypeFromExt");
690         bindFunc(cast(void**)&ilTypeFunc, "ilTypeFunc");
691         bindFunc(cast(void**)&ilLoadData, "ilLoadData");
692         bindFunc(cast(void**)&ilLoadDataF, "ilLoadDataF");
693         bindFunc(cast(void**)&ilLoadDataL, "ilLoadDataL");
694         bindFunc(cast(void**)&ilSaveData, "ilSaveData");
695     }
696 }
697 
698 __gshared DerelictILLoader DerelictIL;
699 
700 shared static this() {
701     DerelictIL = new DerelictILLoader();
702 }