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.ilut;
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 = "ilut.dll";
37     else static if ( Derelict_OS_Mac )
38         enum libNames = "libILUT.dylib";
39     else static if( Derelict_OS_Posix )
40         enum libNames = "libILUT.so";
41     else
42         static assert( 0, "Need to implement ILUT libNames for this operating system." );
43 }
44 
45 enum : ILenum {
46     ILUT_VERSION_1_8_0 = 1,
47     ILUT_VERSION = 180,
48 
49     ILUT_OPENGL_BIT = 0x00000001,
50     ILUT_D3D_BIT = 0x00000002,
51     ILUT_ALL_ATTRIB_BITS = 0x000FFFFF,
52 
53     ILUT_INVALID_ENUM = 0x0501,
54     ILUT_OUT_OF_MEMORY = 0x0502,
55     ILUT_INVALID_VALUE = 0x0505,
56     ILUT_ILLEGAL_OPERATION = 0x0506,
57     ILUT_INVALID_PARAM = 0x0509,
58     ILUT_COULD_NOT_OPEN_FILE = 0x050A,
59     ILUT_STACK_OVERFLOW = 0x050E,
60     ILUT_STACK_UNDERFLOW = 0x050F,
61     ILUT_BAD_DIMENSIONS = 0x0511,
62     ILUT_NOT_SUPPORTED = 0x0550,
63 
64     ILUT_PALETTE_MODE = 0x0600,
65     ILUT_OPENGL_CONV = 0x0610,
66     ILUT_D3D_MIPLEVELS = 0x0620,
67     ILUT_MAXTEX_WIDTH = 0x0630,
68     ILUT_MAXTEX_HEIGHT = 0x0631,
69     ILUT_MAXTEX_DEPTH = 0x0632,
70     ILUT_GL_USE_S3TC = 0x0634,
71     ILUT_D3D_USE_DXTC = 0x0634,
72     ILUT_GL_GEN_S3TC = 0x0635,
73     ILUT_D3D_GEN_DXTC = 0x0635,
74     ILUT_S3TC_FORMAT = 0x0705,
75     ILUT_DXTC_FORMAT = 0x0705,
76     ILUT_D3D_POOL = 0x0706,
77     ILUT_D3D_ALPHA_KEY_COLOR = 0x0707,
78     ILUT_D3D_ALPHA_KEY_COLOUR = 0x0707,
79     ILUT_FORCE_INTEGER_FORMAT = 0x0636,
80 
81     ILUT_GL_AUTODETECT_TEXTURE_TARGET = 0x0807,
82 
83     ILUT_VERSION_NUM = IL_VERSION_NUM,
84     ILUT_VENDOR = IL_VENDOR,
85 
86     ILUT_OPENGL = 0,
87     ILUT_ALLEGRO = 1,
88     ILUT_WIN32 = 2,
89     ILUT_DIRECT3D8 = 3,
90     ILUT_DIRECT3D9 = 4,
91     ILUT_X11 = 5,
92     ILUT_DIRECT3D10 = 6,
93 }
94 
95 extern( System ) {
96     alias da_ilutDisable = ILboolean function( ILenum );
97     alias da_ilutEnable = ILboolean function( ILenum );
98     alias da_ilutGetBoolean = ILboolean function( ILenum );
99     alias da_ilutGetBooleanv = void function( ILenum, ILboolean* );
100     alias da_ilutGetInteger = ILint function( ILenum );
101     alias da_ilutGetIntegerv = void function( ILenum, ILint* );
102     alias da_ilutGetString = ILstring function( ILenum );
103     alias da_ilutInit = void function();
104     alias da_ilutIsDisabled = ILboolean function( ILenum );
105     alias da_ilutIsEnabled = ILboolean function( ILenum );
106     alias da_ilutPopAttrib = void function();
107     alias da_ilutPushAttrib = void function( ILuint );
108     alias da_ilutSetInteger = void function( ILenum, ILint );
109     alias da_ilutRenderer = ILboolean function( ILenum );
110     alias da_ilutGLBindTexImage = uint function();
111     alias da_ilutGLBindMipmaps = uint function();
112     alias da_ilutGLBuildMipmaps = ILboolean function();
113     alias da_ilutGLLoadImage = uint function( ILstring FileName );
114     alias da_ilutGLScreen = ILboolean function();
115     alias da_ilutGLScreenie = ILboolean function();
116     alias da_ilutGLSaveImage = ILboolean function( ILstring, uint );
117     alias da_ilutGLSetTex = ILboolean function( uint );
118     alias da_ilutGLTexImage = ILboolean function( uint );
119     alias da_ilutGLSubTex = ILboolean function( uint, ILuint, ILuint );
120 
121     version( Windows ) {
122         private import core.sys.windows.windows;
123         alias da_ilutConvertToHBitmap = HBITMAP function( HDC hDC );
124         alias da_ilutFreePaddedData = void function( ILubyte *Data );
125         alias da_ilutGetBmpInfo = void function( BITMAPINFO *Info );
126         alias da_ilutGetHPal = HPALETTE function();
127         alias da_ilutGetPaddedData = ILubyte* function();
128         alias da_ilutGetWinClipboard = ILboolean function();
129         alias da_ilutLoadResource = ILboolean function( HINSTANCE hInst, ILint ID,  ILstring ResourceType, ILenum Type );
130         alias da_ilutSetHBitmap = ILboolean function( HBITMAP Bitmap );
131         alias da_ilutSetHPal = ILboolean function( HPALETTE Pal );
132         alias da_ilutSetWinClipboard = ILboolean function();
133         alias da_ilutWinLoadImage = HBITMAP function(  ILstring FileName, HDC hDC );
134         alias da_ilutWinLoadUrl = ILboolean function(  ILstring Url );
135         alias da_ilutWinPrint = ILboolean function( ILuint XPos, ILuint YPos, ILuint Width, ILuint Height, HDC hDC );
136         alias da_ilutWinSaveImage = ILboolean function(  ILstring FileName, HBITMAP Bitmap );
137     }
138 
139     version( Linux ) {
140         // TODO
141     }
142 }
143 
144 __gshared {
145     da_ilutDisable ilutDisable;
146     da_ilutEnable ilutEnable;
147     da_ilutGetBoolean ilutGetBoolean;
148     da_ilutGetBooleanv ilutGetBooleanv;
149     da_ilutGetInteger ilutGetInteger;
150     da_ilutGetIntegerv ilutGetIntegerv;
151     da_ilutGetString ilutGetString;
152     da_ilutInit ilutInit;
153     da_ilutIsDisabled ilutIsDisabled;
154     da_ilutIsEnabled ilutIsEnabled;
155     da_ilutPopAttrib ilutPopAttrib;
156     da_ilutPushAttrib ilutPushAttrib;
157     da_ilutSetInteger ilutSetInteger;
158     da_ilutRenderer ilutRenderer;
159     da_ilutGLBindTexImage ilutGLBindTexImage;
160     da_ilutGLBindMipmaps ilutGLBindMipmaps;
161     da_ilutGLBuildMipmaps ilutGLBuildMipmaps;
162     da_ilutGLLoadImage ilutGLLoadImage;
163     da_ilutGLScreen ilutGLScreen;
164     da_ilutGLScreenie ilutGLScreenie;
165     da_ilutGLSaveImage ilutGLSaveImage;
166     da_ilutGLSetTex ilutGLSetTex;
167     da_ilutGLTexImage ilutGLTexImage;
168     da_ilutGLSubTex ilutGLSubTex;
169 
170     version( Windows ) {
171         da_ilutConvertToHBitmap ilutConvertToHBitmap;
172         da_ilutFreePaddedData ilutFreePaddedData;
173         da_ilutGetBmpInfo ilutGetBmpInfo;
174         da_ilutGetHPal ilutGetHPal;
175         da_ilutGetPaddedData ilutGetPaddedData;
176         da_ilutGetWinClipboard ilutGetWinClipboard;
177         da_ilutLoadResource ilutLoadResource;
178         da_ilutSetHBitmap ilutSetHBitmap;
179         da_ilutSetHPal ilutSetHPal;
180         da_ilutSetWinClipboard ilutSetWinClipboard;
181         da_ilutWinLoadImage ilutWinLoadImage;
182         da_ilutWinLoadUrl ilutWinLoadUrl;
183         da_ilutWinPrint ilutWinPrint;
184         da_ilutWinSaveImage ilutWinSaveImage;
185     }
186 }
187 
188 class DerelictILUTLoader : SharedLibLoader {
189     public this() {
190         super( libNames );
191     }
192 
193     protected override void loadSymbols() {
194         bindFunc( cast( void** )&ilutDisable, "ilutDisable" );
195         bindFunc( cast( void** )&ilutEnable, "ilutEnable" );
196         bindFunc( cast( void** )&ilutGetBoolean, "ilutGetBoolean" );
197         bindFunc( cast( void** )&ilutGetBooleanv, "ilutGetBooleanv" );
198         bindFunc( cast( void** )&ilutGetInteger, "ilutGetInteger" );
199         bindFunc( cast( void** )&ilutGetIntegerv, "ilutGetIntegerv" );
200         bindFunc( cast( void** )&ilutGetString, "ilutGetString" );
201         bindFunc( cast( void** )&ilutInit, "ilutInit" );
202         bindFunc( cast( void** )&ilutIsDisabled, "ilutIsDisabled" );
203         bindFunc( cast( void** )&ilutIsEnabled, "ilutIsEnabled" );
204         bindFunc( cast( void** )&ilutPopAttrib, "ilutPopAttrib" );
205         bindFunc( cast( void** )&ilutPushAttrib, "ilutPushAttrib" );
206         bindFunc( cast( void** )&ilutSetInteger, "ilutSetInteger" );
207         bindFunc( cast( void** )&ilutRenderer, "ilutRenderer" );
208 
209         // TODO should this be versioned?
210         bindFunc( cast( void** )&ilutGLBindTexImage, "ilutGLBindTexImage" );
211         bindFunc( cast( void** )&ilutGLBindMipmaps, "ilutGLBindMipmaps" );
212         bindFunc( cast( void** )&ilutGLBuildMipmaps, "ilutGLBuildMipmaps" );
213         bindFunc( cast( void** )&ilutGLLoadImage, "ilutGLLoadImage" );
214         bindFunc( cast( void** )&ilutGLScreen, "ilutGLScreen" );
215         bindFunc( cast( void** )&ilutGLScreenie, "ilutGLScreenie" );
216         bindFunc( cast( void** )&ilutGLSaveImage, "ilutGLSaveImage" );
217         bindFunc( cast( void** )&ilutGLSetTex, "ilutGLSetTex" );
218         bindFunc( cast( void** )&ilutGLTexImage, "ilutGLTexImage" );
219         bindFunc( cast( void** )&ilutGLSubTex, "ilutGLSubTex" );
220 
221         version( Windows )
222         {
223             // TODO what about all the dx functions?
224             bindFunc( cast( void** )&ilutConvertToHBitmap, "ilutConvertToHBitmap" );
225             bindFunc( cast( void** )&ilutFreePaddedData, "ilutFreePaddedData" );
226             bindFunc( cast( void** )&ilutGetBmpInfo, "ilutGetBmpInfo" );
227             bindFunc( cast( void** )&ilutGetHPal, "ilutGetHPal" );
228             bindFunc( cast( void** )&ilutGetPaddedData, "ilutGetPaddedData" );
229             bindFunc( cast( void** )&ilutGetWinClipboard, "ilutGetWinClipboard" );
230             bindFunc( cast( void** )&ilutLoadResource, "ilutLoadResource" );
231             bindFunc( cast( void** )&ilutSetHBitmap, "ilutSetHBitmap" );
232             bindFunc( cast( void** )&ilutSetHPal, "ilutSetHPal" );
233             bindFunc( cast( void** )&ilutSetWinClipboard, "ilutSetWinClipboard" );
234             bindFunc( cast( void** )&ilutWinLoadImage, "ilutWinLoadImage" );
235             bindFunc( cast( void** )&ilutWinLoadUrl, "ilutWinLoadUrl" );
236             bindFunc( cast( void** )&ilutWinPrint, "ilutWinPrint" );
237             bindFunc( cast( void** )&ilutWinSaveImage, "ilutWinSaveImage" );
238         }
239 
240         version( linux )
241         {
242            // TODO X11 stuff here? What about XSHM?
243         }
244     }
245 }
246 
247 __gshared DerelictILUTLoader DerelictILUT;
248 
249 shared static this() {
250     DerelictILUT = new DerelictILUTLoader();
251 }