1 /+
2 +            Copyright 2022 – 2023 Aya Partridge
3 +          Copyright 2018 - 2022 Michael D. Parker
4 + Distributed under the Boost Software License, Version 1.0.
5 +     (See accompanying file LICENSE_1_0.txt or copy at
6 +           http://www.boost.org/LICENSE_1_0.txt)
7 +/
8 module sdl;
9 
10 import bindbc.sdl.config;
11 import bindbc.sdl.codegen;
12 
13 public import
14 	sdl.assert_,
15 	sdl.atomic,
16 	sdl.audio,
17 	sdl.bits,
18 	sdl.blendmode,
19 	sdl.clipboard,
20 	sdl.cpuinfo,
21 	sdl.endian,
22 	sdl.error,
23 	sdl.events,
24 	sdl.filesystem,
25 	sdl.gamecontroller,
26 	sdl.gesture,
27 	sdl.guid,
28 	sdl.hidapi,
29 	sdl.haptic,
30 	sdl.hints,
31 	sdl.joystick,
32 	sdl.keyboard,
33 	sdl.keycode,
34 	sdl.loadso,
35 	sdl.locale,
36 	sdl.log,
37 	sdl.messagebox,
38 	sdl.misc,
39 	sdl.mouse,
40 	sdl.mutex,
41 	sdl.pixels,
42 	sdl.platform,
43 	sdl.power,
44 	sdl.rect,
45 	sdl.render,
46 	sdl.rwops,
47 	sdl.scancode,
48 	sdl.sensor,
49 	sdl.shape,
50 	sdl.stdinc,
51 	sdl.surface,
52 	sdl.system,
53 	sdl.syswm,
54 	sdl.thread,
55 	sdl.timer,
56 	sdl.touch,
57 	sdl.version_,
58 	sdl.video,
59 	sdl.vulkan;
60 
61 enum: uint{
62 	SDL_INIT_TIMER           = 0x0000_0001U,
63 	SDL_INIT_AUDIO           = 0x0000_0010U,
64 	SDL_INIT_VIDEO           = 0x0000_0020U,
65 	SDL_INIT_JOYSTICK        = 0x0000_0200U,
66 	SDL_INIT_HAPTIC          = 0x0000_1000U,
67 	SDL_INIT_GAMECONTROLLER  = 0x0000_2000U,
68 	SDL_INIT_EVENTS          = 0x0000_4000U,
69 	SDL_INIT_NOPARACHUTE     = 0x0010_0000U,
70 }
71 static if(sdlSupport >= SDLSupport.v2_0_9){
72 	enum: uint{
73 		SDL_INIT_SENSOR      = 0x0000_8000U,
74 		SDL_INIT_EVERYTHING  =
75 			SDL_INIT_TIMER    | SDL_INIT_AUDIO  | SDL_INIT_VIDEO |
76 			SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER |
77 			SDL_INIT_EVENTS   | SDL_INIT_SENSOR,
78 	}
79 }else{
80 	enum: uint{
81 		SDL_INIT_EVERYTHING  =
82 			SDL_INIT_TIMER    | SDL_INIT_AUDIO  | SDL_INIT_VIDEO |
83 			SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER |
84 			SDL_INIT_EVENTS,
85 	}
86 }
87 
88 mixin(joinFnBinds((){
89 	string[][] ret;
90 	ret ~= makeFnBinds([
91 		[q{int}, q{SDL_Init}, q{uint flags}],
92 		[q{int}, q{SDL_InitSubSystem}, q{uint flags}],
93 		[q{void}, q{SDL_QuitSubSystem}, q{uint flags}],
94 		[q{uint}, q{SDL_WasInit}, q{uint flags}],
95 		[q{void}, q{SDL_Quit}, q{}],
96 	]);
97 	return ret;
98 }()));
99 
100 static if(!staticBinding):
101 import bindbc.loader;
102 
103 private{
104 	SharedLib lib;
105 	SDLSupport loadedVersion; //NOTE: get rid of these in 2.0.0
106 	enum libNamesCT = (){
107 		version(Windows){
108 			return [
109 				`SDL2.dll`,
110 			];
111 		}else version(OSX){
112 			return [
113 				`libSDL2.dylib`,
114 				`SDL2`,
115 				`/Library/Frameworks/SDL2.framework/SDL2`,
116 				`/System/Library/Frameworks/SDL2.framework/SDL2`,
117 			];
118 		}else version(Posix){
119 			return [
120 				`libSDL2.so`,
121 				`libSDL2-2.0.so`,
122 				`libSDL2-2.0.so.0`,
123 			];
124 		}else static assert(0, "BindBC-SDL does not have library search paths set up for this platform.");
125 	}();
126 }
127 
128 @nogc nothrow:
129 deprecated("Please use `SDL_GetVersion` instead")
130 	SDLSupport loadedSDLVersion(){ return loadedVersion; }
131 
132 mixin(bindbc.sdl.codegen.makeDynloadFns("", [
133 	__MODULE__,
134 	"sdl.assert_",
135 	"sdl.atomic",
136 	"sdl.audio",
137 	"sdl.bits",
138 	"sdl.blendmode",
139 	"sdl.clipboard",
140 	"sdl.cpuinfo",
141 	"sdl.endian",
142 	"sdl.error",
143 	"sdl.events",
144 	"sdl.filesystem",
145 	"sdl.gamecontroller",
146 	"sdl.gesture",
147 	"sdl.guid",
148 	"sdl.haptic",
149 	"sdl.hidapi",
150 	"sdl.hints",
151 	"sdl.joystick",
152 	"sdl.keyboard",
153 	"sdl.keycode",
154 	"sdl.loadso",
155 	"sdl.locale",
156 	"sdl.log",
157 	"sdl.messagebox",
158 	"sdl.misc",
159 	"sdl.mouse",
160 	"sdl.mutex",
161 	"sdl.pixels",
162 	"sdl.platform",
163 	"sdl.power",
164 	"sdl.rect",
165 	"sdl.render",
166 	"sdl.rwops",
167 	"sdl.scancode",
168 	"sdl.sensor",
169 	"sdl.shape",
170 	"sdl.stdinc",
171 	"sdl.surface",
172 	"sdl.system",
173 	"sdl.syswm",
174 	"sdl.thread",
175 	"sdl.timer",
176 	"sdl.touch",
177 	"sdl.version_",
178 	"sdl.video",
179 	"sdl.vulkan",
180 ]));