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.sdl2.image;
29
30 import derelict.sdl2.config,
31 derelict.sdl2.internal.sdl_types;
32
33 static if(staticSDL)
34 import derelict.sdl2.internal.sdl_static : SDL_GetError, SDL_SetError;
35 else
36 import derelict.sdl2.internal.sdl_dynamic : SDL_GetError, SDL_SetError;
37
38 alias IMG_SetError = SDL_SetError;
39 alias IMG_GetError = SDL_GetError;
40
41 enum : Uint8 {
42 SDL_IMAGE_MAJOR_VERSION = 2,
43 SDL_IMAGE_MINOR_VERSION = 0,
44 SDL_IMAGE_PATCHLEVEL = 0,
45 }
46
47 @nogc nothrow void SDL_IMAGE_VERSION(SDL_version* X) {
48 X.major = SDL_IMAGE_MAJOR_VERSION;
49 X.minor = SDL_IMAGE_MINOR_VERSION;
50 X.patch = SDL_IMAGE_PATCHLEVEL;
51 }
52
53 enum {
54 IMG_INIT_JPG = 0x00000001,
55 IMG_INIT_PNG = 0x00000002,
56 IMG_INIT_TIF = 0x00000004,
57 IMG_INIT_WEBP = 0x00000008,
58 }
59
60 static if(staticImage) {
61 extern(C) @nogc nothrow {
62 int IMG_Init(int);
63 int IMG_Quit();
64 const(SDL_version)* IMG_Linked_Version();
65 SDL_Surface* IMG_LoadTyped_RW(SDL_RWops*,int,const(char)*);
66 SDL_Surface* IMG_Load(const(char)*);
67 SDL_Surface* IMG_Load_RW(SDL_RWops*,int);
68 SDL_Texture* IMG_LoadTexture(SDL_Renderer*,const(char)*);
69 SDL_Texture* IMG_LoadTexture_RW(SDL_Renderer*,SDL_RWops*,int);
70 SDL_Texture* IMG_LoadTextureTyped_RW(SDL_Renderer*,SDL_RWops*,int,const(char)*);
71 int IMG_isICO(SDL_RWops*);
72 int IMG_isCUR(SDL_RWops*);
73 int IMG_isBMP(SDL_RWops*);
74 int IMG_isGIF(SDL_RWops*);
75 int IMG_isJPG(SDL_RWops*);
76 int IMG_isLBM(SDL_RWops*);
77 int IMG_isPCX(SDL_RWops*);
78 int IMG_isPNG(SDL_RWops*);
79 int IMG_isPNM(SDL_RWops*);
80 int IMG_isTIF(SDL_RWops*);
81 int IMG_isXCF(SDL_RWops*);
82 int IMG_isXPM(SDL_RWops*);
83 int IMG_isXV(SDL_RWops*);
84 int IMG_isWEBP(SDL_RWops*);
85 SDL_Surface* IMG_LoadICO_RW(SDL_RWops*);
86 SDL_Surface* IMG_LoadCUR_RW(SDL_RWops*);
87 SDL_Surface* IMG_LoadBMP_RW(SDL_RWops*);
88 SDL_Surface* IMG_LoadGIF_RW(SDL_RWops*);
89 SDL_Surface* IMG_LoadJPG_RW(SDL_RWops*);
90 SDL_Surface* IMG_LoadLBM_RW(SDL_RWops*);
91 SDL_Surface* IMG_LoadPCX_RW(SDL_RWops*);
92 SDL_Surface* IMG_LoadPNG_RW(SDL_RWops*);
93 SDL_Surface* IMG_LoadPNM_RW(SDL_RWops*);
94 SDL_Surface* IMG_LoadTGA_RW(SDL_RWops*);
95 SDL_Surface* IMG_LoadTIF_RW(SDL_RWops*);
96 SDL_Surface* IMG_LoadXCF_RW(SDL_RWops*);
97 SDL_Surface* IMG_LoadXPM_RW(SDL_RWops*);
98 SDL_Surface* IMG_LoadXV_RW(SDL_RWops*);
99 SDL_Surface* IMG_LoadWEBP_RW(SDL_RWops*);
100 SDL_Surface* IMG_ReadXPMFromArray(char**);
101 int IMG_SavePNG(SDL_Surface*,const(char)*);
102 int IMG_SavePNG_RW(SDL_Surface*,SDL_RWops*,int);
103 }
104 }
105 else {
106 import derelict.util.loader,
107 derelict.util.exception,
108 derelict.util.system;
109
110 extern(C) @nogc nothrow {
111 alias da_IMG_Init = int function(int);
112 alias da_IMG_Quit = int function();
113 alias da_IMG_Linked_Version = const(SDL_version)* function();
114 alias da_IMG_LoadTyped_RW = SDL_Surface* function(SDL_RWops*,int,const(char)*);
115 alias da_IMG_Load = SDL_Surface* function(const(char)*);
116 alias da_IMG_Load_RW = SDL_Surface* function(SDL_RWops*,int);
117
118 alias da_IMG_LoadTexture = SDL_Texture* function(SDL_Renderer*,const(char)*);
119 alias da_IMG_LoadTexture_RW = SDL_Texture* function(SDL_Renderer*,SDL_RWops*,int);
120 alias da_IMG_LoadTextureTyped_RW = SDL_Texture* function(SDL_Renderer*,SDL_RWops*,int,const(char)*);
121
122 alias da_IMG_isICO = int function(SDL_RWops*);
123 alias da_IMG_isCUR = int function(SDL_RWops*);
124 alias da_IMG_isBMP = int function(SDL_RWops*);
125 alias da_IMG_isGIF = int function(SDL_RWops*);
126 alias da_IMG_isJPG = int function(SDL_RWops*);
127 alias da_IMG_isLBM = int function(SDL_RWops*);
128 alias da_IMG_isPCX = int function(SDL_RWops*);
129 alias da_IMG_isPNG = int function(SDL_RWops*);
130 alias da_IMG_isPNM = int function(SDL_RWops*);
131 alias da_IMG_isTIF = int function(SDL_RWops*);
132 alias da_IMG_isXCF = int function(SDL_RWops*);
133 alias da_IMG_isXPM = int function(SDL_RWops*);
134 alias da_IMG_isXV = int function(SDL_RWops*);
135 alias da_IMG_isWEBP = int function(SDL_RWops*);
136
137 alias da_IMG_LoadICO_RW = SDL_Surface* function(SDL_RWops*);
138 alias da_IMG_LoadCUR_RW = SDL_Surface* function(SDL_RWops*);
139 alias da_IMG_LoadBMP_RW = SDL_Surface* function(SDL_RWops*);
140 alias da_IMG_LoadGIF_RW = SDL_Surface* function(SDL_RWops*);
141 alias da_IMG_LoadJPG_RW = SDL_Surface* function(SDL_RWops*);
142 alias da_IMG_LoadLBM_RW = SDL_Surface* function(SDL_RWops*);
143 alias da_IMG_LoadPCX_RW = SDL_Surface* function(SDL_RWops*);
144 alias da_IMG_LoadPNG_RW = SDL_Surface* function(SDL_RWops*);
145 alias da_IMG_LoadPNM_RW = SDL_Surface* function(SDL_RWops*);
146 alias da_IMG_LoadTGA_RW = SDL_Surface* function(SDL_RWops*);
147 alias da_IMG_LoadTIF_RW = SDL_Surface* function(SDL_RWops*);
148 alias da_IMG_LoadXCF_RW = SDL_Surface* function(SDL_RWops*);
149 alias da_IMG_LoadXPM_RW = SDL_Surface* function(SDL_RWops*);
150 alias da_IMG_LoadXV_RW = SDL_Surface* function(SDL_RWops*);
151 alias da_IMG_LoadWEBP_RW = SDL_Surface* function(SDL_RWops*);
152
153 alias da_IMG_ReadXPMFromArray = SDL_Surface* function(char**);
154
155 alias da_IMG_SavePNG = int function(SDL_Surface*,const(char)*);
156 alias da_IMG_SavePNG_RW = int function(SDL_Surface*,SDL_RWops*,int);
157 }
158
159 __gshared {
160 da_IMG_Init IMG_Init;
161 da_IMG_Quit IMG_Quit;
162 da_IMG_Linked_Version IMG_Linked_Version;
163 da_IMG_LoadTyped_RW IMG_LoadTyped_RW;
164 da_IMG_Load IMG_Load;
165 da_IMG_Load_RW IMG_Load_RW;
166 da_IMG_LoadTexture IMG_LoadTexture;
167 da_IMG_LoadTexture_RW IMG_LoadTexture_RW;
168 da_IMG_LoadTextureTyped_RW IMG_LoadTextureTyped_RW;
169 da_IMG_isICO IMG_isICO;
170 da_IMG_isCUR IMG_isCUR;
171 da_IMG_isBMP IMG_isBMP;
172 da_IMG_isGIF IMG_isGIF;
173 da_IMG_isJPG IMG_isJPG;
174 da_IMG_isLBM IMG_isLBM;
175 da_IMG_isPCX IMG_isPCX;
176 da_IMG_isPNG IMG_isPNG;
177 da_IMG_isPNM IMG_isPNM;
178 da_IMG_isTIF IMG_isTIF;
179 da_IMG_isXCF IMG_isXCF;
180 da_IMG_isXPM IMG_isXPM;
181 da_IMG_isXV IMG_isXV;
182 da_IMG_isWEBP IMG_isWEBP;
183 da_IMG_LoadICO_RW IMG_LoadICO_RW;
184 da_IMG_LoadCUR_RW IMG_LoadCUR_RW;
185 da_IMG_LoadBMP_RW IMG_LoadBMP_RW;
186 da_IMG_LoadGIF_RW IMG_LoadGIF_RW;
187 da_IMG_LoadJPG_RW IMG_LoadJPG_RW;
188 da_IMG_LoadLBM_RW IMG_LoadLBM_RW;
189 da_IMG_LoadPCX_RW IMG_LoadPCX_RW;
190 da_IMG_LoadPNG_RW IMG_LoadPNG_RW;
191 da_IMG_LoadPNM_RW IMG_LoadPNM_RW;
192 da_IMG_LoadTGA_RW IMG_LoadTGA_RW;
193 da_IMG_LoadTIF_RW IMG_LoadTIF_RW;
194 da_IMG_LoadXCF_RW IMG_LoadXCF_RW;
195 da_IMG_LoadXPM_RW IMG_LoadXPM_RW;
196 da_IMG_LoadXV_RW IMG_LoadXV_RW;
197 da_IMG_LoadWEBP_RW IMG_LoadWEBP_RW;
198 da_IMG_ReadXPMFromArray IMG_ReadXPMFromArray;
199 da_IMG_SavePNG IMG_SavePNG;
200 da_IMG_SavePNG_RW IMG_SavePNG_RW;
201 }
202
203 class DerelictSDL2ImageLoader : SharedLibLoader {
204 this()
205 {
206 super(libNames);
207 }
208
209 protected override void loadSymbols()
210 {
211 bindFunc(cast(void**)&IMG_Init,"IMG_Init");
212 bindFunc(cast(void**)&IMG_Quit,"IMG_Quit");
213 bindFunc(cast(void**)&IMG_Linked_Version,"IMG_Linked_Version");
214 bindFunc(cast(void**)&IMG_LoadTyped_RW,"IMG_LoadTyped_RW");
215 bindFunc(cast(void**)&IMG_Load,"IMG_Load");
216 bindFunc(cast(void**)&IMG_Load_RW,"IMG_Load_RW");
217 bindFunc(cast(void**)&IMG_LoadTexture,"IMG_LoadTexture");
218 bindFunc(cast(void**)&IMG_LoadTexture_RW,"IMG_LoadTexture_RW");
219 bindFunc(cast(void**)&IMG_LoadTextureTyped_RW,"IMG_LoadTextureTyped_RW");
220 bindFunc(cast(void**)&IMG_isICO,"IMG_isICO");
221 bindFunc(cast(void**)&IMG_isCUR,"IMG_isCUR");
222 bindFunc(cast(void**)&IMG_isBMP,"IMG_isBMP");
223 bindFunc(cast(void**)&IMG_isGIF,"IMG_isGIF");
224 bindFunc(cast(void**)&IMG_isJPG,"IMG_isJPG");
225 bindFunc(cast(void**)&IMG_isLBM,"IMG_isLBM");
226 bindFunc(cast(void**)&IMG_isPCX,"IMG_isPCX");
227 bindFunc(cast(void**)&IMG_isPNG,"IMG_isPNG");
228 bindFunc(cast(void**)&IMG_isPNM,"IMG_isPNM");
229 bindFunc(cast(void**)&IMG_isTIF,"IMG_isTIF");
230 bindFunc(cast(void**)&IMG_isXCF,"IMG_isXCF");
231 bindFunc(cast(void**)&IMG_isXPM,"IMG_isXPM");
232 bindFunc(cast(void**)&IMG_isXV,"IMG_isXV");
233 bindFunc(cast(void**)&IMG_isWEBP,"IMG_isWEBP");
234 bindFunc(cast(void**)&IMG_LoadICO_RW,"IMG_LoadICO_RW");
235 bindFunc(cast(void**)&IMG_LoadCUR_RW,"IMG_LoadCUR_RW");
236 bindFunc(cast(void**)&IMG_LoadBMP_RW,"IMG_LoadBMP_RW");
237 bindFunc(cast(void**)&IMG_LoadGIF_RW,"IMG_LoadGIF_RW");
238 bindFunc(cast(void**)&IMG_LoadJPG_RW,"IMG_LoadJPG_RW");
239 bindFunc(cast(void**)&IMG_LoadLBM_RW,"IMG_LoadLBM_RW");
240 bindFunc(cast(void**)&IMG_LoadPCX_RW,"IMG_LoadPCX_RW");
241 bindFunc(cast(void**)&IMG_LoadPNG_RW,"IMG_LoadPNG_RW");
242 bindFunc(cast(void**)&IMG_LoadPNM_RW,"IMG_LoadPNM_RW");
243 bindFunc(cast(void**)&IMG_LoadTGA_RW,"IMG_LoadTGA_RW");
244 bindFunc(cast(void**)&IMG_LoadTIF_RW,"IMG_LoadTIF_RW");
245 bindFunc(cast(void**)&IMG_LoadXCF_RW,"IMG_LoadXCF_RW");
246 bindFunc(cast(void**)&IMG_LoadXPM_RW,"IMG_LoadXPM_RW");
247 bindFunc(cast(void**)&IMG_LoadXV_RW,"IMG_LoadXV_RW");
248 bindFunc(cast(void**)&IMG_isXV,"IMG_isXV");
249 bindFunc(cast(void**)&IMG_LoadWEBP_RW,"IMG_LoadWEBP_RW");
250 bindFunc(cast(void**)&IMG_SavePNG,"IMG_SavePNG");
251 bindFunc(cast(void**)&IMG_SavePNG_RW,"IMG_SavePNG_RW");
252 }
253 }
254
255 __gshared DerelictSDL2ImageLoader DerelictSDL2Image;
256
257 shared static this()
258 {
259 DerelictSDL2Image = new DerelictSDL2ImageLoader();
260 }
261
262 private:
263 static if(Derelict_OS_Windows)
264 enum libNames = "SDL2_image.dll";
265 else static if(Derelict_OS_Mac)
266 enum libNames = "/usr/local/lib/libSDL2_image.dylib,../Frameworks/SDL2_image.framework/SDL2_image,/Library/Frameworks/SDL2_image.framework/SDL2_image,/System/Library/Frameworks/SDL2_image.framework/SDL2_image";
267 else static if(Derelict_OS_Posix)
268 enum libNames = "libSDL2_image.so,libSDL2_image-2.0.so,libSDL2_image-2.0.so.0,/usr/local/lib/libSDL2_image.so,/usr/local/lib/libSDL2_image-2.0.so,/usr/local/lib/libSDL2_image-2.0.so.0";
269 else
270 static assert(0,"Need to implement SDL2_image libNames for this operating system.");
271 }