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 				`/opt/homebrew/lib/libSDL2.dylib`,
115 				`SDL2`,
116 				`/Library/Frameworks/SDL2.framework/SDL2`,
117 				`/System/Library/Frameworks/SDL2.framework/SDL2`,
118 			];
119 		}else version(Posix){
120 			return [
121 				`libSDL2.so`,
122 				`libSDL2-2.0.so`,
123 				`libSDL2-2.0.so.0`,
124 			];
125 		}else static assert(0, "BindBC-SDL does not have library search paths set up for this platform.");
126 	}();
127 }
128 
129 @nogc nothrow:
130 deprecated("Please use `SDL_GetVersion` instead")
131 	SDLSupport loadedSDLVersion(){ return loadedVersion; }
132 
133 mixin(bindbc.sdl.codegen.makeDynloadFns("", [
134 	__MODULE__,
135 	"sdl.assert_",
136 	"sdl.atomic",
137 	"sdl.audio",
138 	"sdl.bits",
139 	"sdl.blendmode",
140 	"sdl.clipboard",
141 	"sdl.cpuinfo",
142 	"sdl.endian",
143 	"sdl.error",
144 	"sdl.events",
145 	"sdl.filesystem",
146 	"sdl.gamecontroller",
147 	"sdl.gesture",
148 	"sdl.guid",
149 	"sdl.haptic",
150 	"sdl.hidapi",
151 	"sdl.hints",
152 	"sdl.joystick",
153 	"sdl.keyboard",
154 	"sdl.keycode",
155 	"sdl.loadso",
156 	"sdl.locale",
157 	"sdl.log",
158 	"sdl.messagebox",
159 	"sdl.misc",
160 	"sdl.mouse",
161 	"sdl.mutex",
162 	"sdl.pixels",
163 	"sdl.platform",
164 	"sdl.power",
165 	"sdl.rect",
166 	"sdl.render",
167 	"sdl.rwops",
168 	"sdl.scancode",
169 	"sdl.sensor",
170 	"sdl.shape",
171 	"sdl.stdinc",
172 	"sdl.surface",
173 	"sdl.system",
174 	"sdl.syswm",
175 	"sdl.thread",
176 	"sdl.timer",
177 	"sdl.touch",
178 	"sdl.version_",
179 	"sdl.video",
180 	"sdl.vulkan",
181 ]));