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.ilu;
29 
30 private {
31     import derelict.util.loader;
32     import derelict.util.system;
33     import derelict.devil.il;
34 
35     static if(Derelict_OS_Windows)
36         enum libNames = "ilu.dll";
37     else static if (Derelict_OS_Mac)
38         enum libNames = "libILU.dylib";
39     else static if(Derelict_OS_Posix)
40         enum libNames = "libILU.so";
41     else
42         static assert(0, "Need to implement ILU libNames for this operating system.");
43 }
44 
45 enum : ILenum {
46     ILU_VERSION_1_8_0 = 1,
47     ILU_VERSION = 180,
48 
49     ILU_FILTER = 0x2600,
50     ILU_NEAREST = 0x2601,
51     ILU_LINEAR = 0x2602,
52     ILU_BILINEAR = 0x2603,
53     ILU_SCALE_BOX = 0x2604,
54     ILU_SCALE_TRIANGLE = 0x2605,
55     ILU_SCALE_BELL = 0x2606,
56     ILU_SCALE_BSPLINE = 0x2607,
57     ILU_SCALE_LANCZOS3 = 0x2608,
58     ILU_SCALE_MITCHELL = 0x2609,
59 
60     ILU_INVALID_ENUM = 0x0501,
61     ILU_OUT_OF_MEMORY = 0x0502,
62     ILU_INTERNAL_ERROR = 0x0504,
63     ILU_INVALID_VALUE = 0x0505,
64     ILU_ILLEGAL_OPERATION = 0x0506,
65     ILU_INVALID_PARAM = 0x0509,
66 
67     ILU_PLACEMENT = 0x0700,
68     ILU_LOWER_LEFT = 0x0701,
69     ILU_LOWER_RIGHT = 0x0702,
70     ILU_UPPER_LEFT = 0x0703,
71     ILU_UPPER_RIGHT = 0x0704,
72     ILU_CENTER = 0x0705,
73     ILU_CONVOLUTION_MATRIX = 0x0710,
74 
75     ILU_VERSION_NUM = IL_VERSION_NUM,
76     ILU_VENDOR = IL_VENDOR,
77 
78     ILU_ENGLISH = 0x800,
79     ILU_ARABIC = 0x801,
80     ILU_DUTCH = 0x802,
81     ILU_JAPANESE = 0x803,
82     ILU_SPANISH = 0x804,
83     ILU_GERMAN = 0x0805,
84     ILU_FRENCH = 0x0806,
85     ILU_ITALIAN = 0x0807,
86 }
87 
88 struct ILinfo {
89     ILuint  Id;
90     ILubyte* Data;
91     ILuint  Width;
92     ILuint  Height;
93     ILuint  Depth;
94     ILubyte Bpp;
95     ILuint  SizeOfData;
96     ILenum  Format;
97     ILenum  Type;
98     ILenum  Origin;
99     ILubyte* Palette;
100     ILenum  PalType;
101     ILuint  PalSize;
102     ILenum  CubeFlags;
103     ILuint  NumNext;
104     ILuint  NumMips;
105     ILuint  NumLayers;
106 }
107 
108 struct ILpointf {
109     ILfloat x, y;
110 }
111 
112 struct ILpointi {
113     ILint x, y;
114 }
115 
116 extern(System) @nogc nothrow {
117     alias da_iluAlienify = ILboolean function();
118     alias da_iluBlurAvg = ILboolean function(ILuint);
119     alias da_iluBlurGaussian = ILboolean function(ILuint);
120     alias da_iluBuildMipmaps = ILboolean function();
121     alias da_iluColoursUsed = ILuint function();
122     alias da_iluCompareImage = ILboolean function(ILuint);
123     alias da_iluContrast = ILboolean function(ILfloat);
124     alias da_iluCrop = ILboolean function(ILuint, ILuint, ILuint, ILuint, ILuint, ILuint);
125     alias da_iluDeleteImage = void function(ILuint);
126     alias da_iluEdgeDetectE = ILboolean function();
127     alias da_iluEdgeDetectP = ILboolean function();
128     alias da_iluEdgeDetectS = ILboolean function();
129     alias da_iluEmboss = ILboolean function();
130     alias da_iluEnlargeCanvas = ILboolean function(ILuint, ILuint, ILuint);
131     alias da_iluEnlargeImage = ILboolean function(ILfloat, ILfloat, ILfloat);
132     alias da_iluEqualize = ILboolean function();
133     alias da_iluEqualize2 = ILboolean function();
134     alias da_iluErrorString = ILconst_string function(ILenum);
135     alias da_iluConvolution = ILboolean function(ILint*, ILint, ILint);
136     alias da_iluFlipImage = ILboolean function();
137     alias da_iluGammaCorrect = ILboolean function(ILfloat);
138     alias da_iluGenImage = ILuint function();
139     alias da_iluGetImageInfo = void function(ILinfo*);
140     alias da_iluGetInteger = ILint function(ILenum);
141     alias da_iluGetIntegerv = void function(ILenum, ILint*);
142     alias da_iluGetString = ILstring function(ILenum);
143     alias da_iluImageParameter = void function(ILenum, ILenum);
144     alias da_iluInit = void function();
145     alias da_iluInvertAlpha = ILboolean function();
146     alias da_iluLoadImage = ILuint function(ILconst_string);
147     alias da_iluMirror = ILboolean function();
148     alias da_iluNegative = ILboolean function();
149     alias da_iluNoisify = ILboolean function(ILclampf);
150     alias da_iluPixelize = ILboolean function(ILuint);
151     alias da_iluRegionfv = void function(ILpointf*, ILuint);
152     alias da_iluRegioniv = void function(ILpointi*, ILuint);
153     alias da_iluReplaceColour = ILboolean function(ILubyte, ILubyte, ILubyte, ILfloat);
154     alias da_iluRotate = ILboolean function(ILfloat);
155     alias da_iluRotate3D = ILboolean function(ILfloat, ILfloat, ILfloat, ILfloat);
156     alias da_iluSaturate1f = ILboolean function(ILfloat);
157     alias da_iluSaturate4f = ILboolean function(ILfloat, ILfloat, ILfloat, ILfloat);
158     alias da_iluScale = ILboolean function(ILuint, ILuint, ILuint);
159     alias da_iluScaleAlpha = ILboolean function(ILfloat);
160     alias da_iluScaleColours = ILboolean function(ILfloat, ILfloat, ILfloat);
161     alias da_iluSepia = ILboolean function();
162     alias da_iluSetLanguage = ILboolean function(ILenum);
163     alias da_iluSharpen = ILboolean function(ILfloat, ILuint);
164     alias da_iluSwapColours = ILboolean function();
165     alias da_iluWave = ILboolean function(ILfloat);
166 }
167 
168 __gshared {
169     da_iluAlienify iluAlienify;
170     da_iluBlurAvg iluBlurAvg;
171     da_iluBlurGaussian iluBlurGaussian;
172     da_iluBuildMipmaps iluBuildMipmaps;
173     da_iluColoursUsed iluColoursUsed;
174     da_iluCompareImage iluCompareImage;
175     da_iluContrast iluContrast;
176     da_iluCrop iluCrop;
177     da_iluDeleteImage iluDeleteImage;
178     da_iluEdgeDetectE iluEdgeDetectE;
179     da_iluEdgeDetectP iluEdgeDetectP;
180     da_iluEdgeDetectS iluEdgeDetectS;
181     da_iluEmboss iluEmboss;
182     da_iluEnlargeCanvas iluEnlargeCanvas;
183     da_iluEnlargeImage iluEnlargeImage;
184     da_iluEqualize iluEqualize;
185     da_iluEqualize2 iluEqualize2;
186     da_iluErrorString iluErrorString;
187     da_iluConvolution iluConvolution;
188     da_iluFlipImage iluFlipImage;
189     da_iluGammaCorrect iluGammaCorrect;
190     da_iluGenImage iluGenImage;
191     da_iluGetImageInfo iluGetImageInfo;
192     da_iluGetInteger iluGetInteger;
193     da_iluGetIntegerv iluGetIntegerv;
194     da_iluGetString iluGetString;
195     da_iluImageParameter iluImageParameter;
196     da_iluInit iluInit;
197     da_iluInvertAlpha iluInvertAlpha;
198     da_iluLoadImage iluLoadImage;
199     da_iluMirror iluMirror;
200     da_iluNegative iluNegative;
201     da_iluNoisify iluNoisify;
202     da_iluPixelize iluPixelize;
203     da_iluRegionfv iluRegionfv;
204     da_iluRegioniv iluRegioniv;
205     da_iluReplaceColour iluReplaceColour;
206     da_iluRotate iluRotate;
207     da_iluRotate3D iluRotate3D;
208     da_iluSaturate1f iluSaturate1f;
209     da_iluSaturate4f iluSaturate4f;
210     da_iluScale iluScale;
211     da_iluScaleAlpha iluScaleAlpha;
212     da_iluScaleColours iluScaleColours;
213     da_iluSepia iluSepia;
214     da_iluSetLanguage iluSetLanguage;
215     da_iluSharpen iluSharpen;
216     da_iluSwapColours iluSwapColours;
217     da_iluWave iluWave;
218 
219     alias iluColoursUsed    iluColorsUsed;
220     alias iluSwapColours    iluSwapColors;
221     alias iluReplaceColour  iluReplaceColor;
222     alias iluScaleColours  iluScaleColors;
223 }
224 
225 class DerelictILULoader : SharedLibLoader
226 {
227     public this() {
228         super(libNames);
229     }
230 
231     protected override void loadSymbols() {
232         bindFunc(cast(void**)&iluAlienify, "iluAlienify");
233         bindFunc(cast(void**)&iluBlurAvg, "iluBlurAvg");
234         bindFunc(cast(void**)&iluBlurGaussian, "iluBlurGaussian");
235         bindFunc(cast(void**)&iluBuildMipmaps, "iluBuildMipmaps");
236         bindFunc(cast(void**)&iluColoursUsed, "iluColoursUsed");
237         bindFunc(cast(void**)&iluCompareImage, "iluCompareImage");
238         bindFunc(cast(void**)&iluContrast, "iluContrast");
239         bindFunc(cast(void**)&iluCrop, "iluCrop");
240         bindFunc(cast(void**)&iluDeleteImage, "iluDeleteImage");
241         bindFunc(cast(void**)&iluEdgeDetectE, "iluEdgeDetectE");
242         bindFunc(cast(void**)&iluEdgeDetectP, "iluEdgeDetectP");
243         bindFunc(cast(void**)&iluEdgeDetectS, "iluEdgeDetectS");
244         bindFunc(cast(void**)&iluEmboss, "iluEmboss");
245         bindFunc(cast(void**)&iluEnlargeCanvas, "iluEnlargeCanvas");
246         bindFunc(cast(void**)&iluEnlargeImage, "iluEnlargeImage");
247         bindFunc(cast(void**)&iluEqualize, "iluEqualize");
248         bindFunc(cast(void**)&iluEqualize2, "iluEqualize2");
249         bindFunc(cast(void**)&iluErrorString, "iluErrorString");
250         bindFunc(cast(void**)&iluConvolution, "iluConvolution");
251         bindFunc(cast(void**)&iluFlipImage, "iluFlipImage");
252         bindFunc(cast(void**)&iluGammaCorrect, "iluGammaCorrect");
253         bindFunc(cast(void**)&iluGenImage, "iluGenImage");
254         bindFunc(cast(void**)&iluGetImageInfo, "iluGetImageInfo");
255         bindFunc(cast(void**)&iluGetInteger, "iluGetInteger");
256         bindFunc(cast(void**)&iluGetIntegerv, "iluGetIntegerv");
257         bindFunc(cast(void**)&iluGetString, "iluGetString");
258         bindFunc(cast(void**)&iluImageParameter, "iluImageParameter");
259         bindFunc(cast(void**)&iluInit, "iluInit");
260         bindFunc(cast(void**)&iluInvertAlpha, "iluInvertAlpha");
261         bindFunc(cast(void**)&iluLoadImage, "iluLoadImage");
262         bindFunc(cast(void**)&iluMirror, "iluMirror");
263         bindFunc(cast(void**)&iluNegative, "iluNegative");
264         bindFunc(cast(void**)&iluNoisify, "iluNoisify");
265         bindFunc(cast(void**)&iluPixelize, "iluPixelize");
266         bindFunc(cast(void**)&iluRegionfv, "iluRegionfv");
267         bindFunc(cast(void**)&iluRegioniv, "iluRegioniv");
268         bindFunc(cast(void**)&iluReplaceColour, "iluReplaceColour");
269         bindFunc(cast(void**)&iluRotate, "iluRotate");
270         bindFunc(cast(void**)&iluRotate3D, "iluRotate3D");
271         bindFunc(cast(void**)&iluSaturate1f, "iluSaturate1f");
272         bindFunc(cast(void**)&iluSaturate4f, "iluSaturate4f");
273         bindFunc(cast(void**)&iluScale, "iluScale");
274         bindFunc(cast(void**)&iluScaleAlpha, "iluScaleAlpha");
275         bindFunc(cast(void**)&iluScaleColours, "iluScaleColours");
276         bindFunc(cast(void**)&iluSepia, "iluSepia");
277         bindFunc(cast(void**)&iluSetLanguage, "iluSetLanguage");
278         bindFunc(cast(void**)&iluSharpen, "iluSharpen");
279         bindFunc(cast(void**)&iluSwapColours, "iluSwapColours");
280         bindFunc(cast(void**)&iluWave, "iluWave");
281     }
282 }
283 
284 __gshared DerelictILULoader DerelictILU;
285 
286 shared static this() {
287     DerelictILU = new DerelictILULoader();
288 }