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 }