annotate SDL3/SDL_main.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2 Simple DirectMedia Layer
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 This software is provided 'as-is', without any express or implied
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 warranty. In no event will the authors be held liable for any damages
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 arising from the use of this software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 Permission is granted to anyone to use this software for any purpose,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10 including commercial applications, and to alter it and redistribute it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 freely, subject to the following restrictions:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 1. The origin of this software must not be misrepresented; you must not
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 claim that you wrote the original software. If you use this software
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 in a product, an acknowledgment in the product documentation would be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 appreciated but is not required.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 2. Altered source versions must be plainly marked as such, and must not be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 misrepresented as being the original software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 3. This notice may not be removed or altered from any source distribution.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 * # CategoryMain
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 * Redefine main() if necessary so that it is called by SDL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 * In order to make this consistent on all platforms, the application's main()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 * should look like this:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 * ```c
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31 * #include <SDL3/SDL.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 * #include <SDL3/SDL_main.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 * int main(int argc, char *argv[])
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35 * {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 * }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 * ```
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 * SDL will take care of platform specific details on how it gets called.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 * This is also where an app can be configured to use the main callbacks, via
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 * the SDL_MAIN_USE_CALLBACKS macro.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 * SDL_main.h is a "single-header library," which is to say that including
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 * this header inserts code into your program, and you should only include it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 * once in most cases. SDL.h does not include this header automatically.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 * For more information, see:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 * https://wiki.libsdl.org/SDL3/README-main-functions
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 #ifndef SDL_main_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 #define SDL_main_h_
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 #include <SDL3/SDL_platform_defines.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 #include <SDL3/SDL_stdinc.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 #include <SDL3/SDL_error.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 #include <SDL3/SDL_events.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 * Inform SDL that the app is providing an entry point instead of SDL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 * SDL does not define this macro, but will check if it is defined when
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 * including `SDL_main.h`. If defined, SDL will expect the app to provide the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 * proper entry point for the platform, and all the other magic details
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 * needed, like manually calling SDL_SetMainReady.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 * Please see [README-main-functions](README-main-functions), (or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 * docs/README-main-functions.md in the source tree) for a more detailed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 * explanation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 * \since This macro is used by the headers since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 #define SDL_MAIN_HANDLED 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80 * Inform SDL to use the main callbacks instead of main.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 * SDL does not define this macro, but will check if it is defined when
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 * including `SDL_main.h`. If defined, SDL will expect the app to provide
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 * several functions: SDL_AppInit, SDL_AppEvent, SDL_AppIterate, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 * SDL_AppQuit. The app should not provide a `main` function in this case, and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 * doing so will likely cause the build to fail.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 * Please see [README-main-functions](README-main-functions), (or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 * docs/README-main-functions.md in the source tree) for a more detailed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 * explanation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92 * \since This macro is used by the headers since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 * \sa SDL_AppInit
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 * \sa SDL_AppEvent
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 * \sa SDL_AppIterate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 * \sa SDL_AppQuit
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 #define SDL_MAIN_USE_CALLBACKS 1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102 * Defined if the target platform offers a special mainline through SDL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 * This won't be defined otherwise. If defined, SDL's headers will redefine
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 * `main` to `SDL_main`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 * This macro is defined by `SDL_main.h`, which is not automatically included
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 * by `SDL.h`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 * Even if available, an app can define SDL_MAIN_HANDLED and provide their
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 * own, if they know what they're doing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 * This macro is used internally by SDL, and apps probably shouldn't rely on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 * it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 #define SDL_MAIN_AVAILABLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121 * Defined if the target platform _requires_ a special mainline through SDL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 * This won't be defined otherwise. If defined, SDL's headers will redefine
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 * `main` to `SDL_main`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126 * This macro is defined by `SDL_main.h`, which is not automatically included
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 * by `SDL.h`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 * Even if required, an app can define SDL_MAIN_HANDLED and provide their own,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130 * if they know what they're doing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 * This macro is used internally by SDL, and apps probably shouldn't rely on
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133 * it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 #define SDL_MAIN_NEEDED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 #if defined(__has_include)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142 #if __has_include("SDL_main_private.h") && __has_include("SDL_main_impl_private.h")
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143 #define SDL_PLATFORM_PRIVATE_MAIN
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 #ifndef SDL_MAIN_HANDLED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 #if defined(SDL_PLATFORM_PRIVATE_MAIN)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 /* Private platforms may have their own ideas about entry points. */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 #include "SDL_main_private.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 #elif defined(SDL_PLATFORM_WIN32)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 /* On Windows SDL provides WinMain(), which parses the command line and passes
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 the arguments to your main function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156 If you provide your own WinMain(), you may define SDL_MAIN_HANDLED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 #define SDL_MAIN_AVAILABLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160 #elif defined(SDL_PLATFORM_GDK)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 /* On GDK, SDL provides a main function that initializes the game runtime.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 If you prefer to write your own WinMain-function instead of having SDL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 provide one that calls your main() function,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 #define SDL_MAIN_HANDLED before #include'ing SDL_main.h
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 and call the SDL_RunApp function from your entry point.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 #define SDL_MAIN_NEEDED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 #elif defined(SDL_PLATFORM_IOS) || defined(SDL_PLATFORM_TVOS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 /* On iOS and tvOS SDL provides a main function that creates an application delegate and starts the application run loop.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 To use it, just #include <SDL3/SDL_main.h> in the source file that contains your main() function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 See src/video/uikit/SDL_uikitappdelegate.m for more details.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 #define SDL_MAIN_NEEDED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 #elif defined(SDL_PLATFORM_ANDROID)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 /* On Android SDL provides a Java class in SDLActivity.java that is the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 main activity entry point.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 See docs/README-android.md for more details on extending that class.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 #define SDL_MAIN_NEEDED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 /* As this is launched from Java, the real entry point (main() function)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 is outside of the the binary built from this code.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 This define makes sure that, unlike on other platforms, SDL_main.h
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 and SDL_main_impl.h export an `SDL_main()` function (to be called
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191 from Java), but don't implement a native `int main(int argc, char* argv[])`
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 or similar.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194 #define SDL_MAIN_EXPORTED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 #elif defined(SDL_PLATFORM_EMSCRIPTEN)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197 /* On Emscripten, SDL provides a main function that converts URL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 parameters that start with "SDL_" to environment variables, so
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 they can be used as SDL hints, etc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 This is 100% optional, so if you don't want this to happen, you may
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 define SDL_MAIN_HANDLED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 #define SDL_MAIN_AVAILABLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
206 #elif defined(SDL_PLATFORM_PSP)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
207 /* On PSP SDL provides a main function that sets the module info,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
208 activates the GPU and starts the thread required to be able to exit
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
209 the software.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
210
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
211 If you provide this yourself, you may define SDL_MAIN_HANDLED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
212 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
213 #define SDL_MAIN_AVAILABLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
214
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
215 #elif defined(SDL_PLATFORM_PS2)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
216 #define SDL_MAIN_AVAILABLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
217
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
218 #define SDL_PS2_SKIP_IOP_RESET() \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
219 void reset_IOP(); \
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
220 void reset_IOP() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
221
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
222 #elif defined(SDL_PLATFORM_3DS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
223 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
224 On N3DS, SDL provides a main function that sets up the screens
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
225 and storage.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
226
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
227 If you provide this yourself, you may define SDL_MAIN_HANDLED
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
228 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
229 #define SDL_MAIN_AVAILABLE
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
230
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
231 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
232 #endif /* SDL_MAIN_HANDLED */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
233
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
234
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
235 #ifdef SDL_WIKI_DOCUMENTATION_SECTION
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
236
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
237 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
238 * A macro to tag a main entry point function as exported.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
239 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
240 * Most platforms don't need this, and the macro will be defined to nothing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
241 * Some, like Android, keep the entry points in a shared library and need to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
242 * explicitly export the symbols.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
243 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
244 * External code rarely needs this, and if it needs something, it's almost
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
245 * always SDL_DECLSPEC instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
246 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
247 * \since This macro is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
248 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
249 * \sa SDL_DECLSPEC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
250 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
251 #define SDLMAIN_DECLSPEC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
252
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
253 #elif defined(SDL_MAIN_EXPORTED)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
254 /* We need to export SDL_main so it can be launched from external code,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
255 like SDLActivity.java on Android */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
256 #define SDLMAIN_DECLSPEC SDL_DECLSPEC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
257 #else
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
258 /* usually this is empty */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
259 #define SDLMAIN_DECLSPEC
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
260 #endif /* SDL_MAIN_EXPORTED */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
261
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
262 #if defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE) || defined(SDL_MAIN_USE_CALLBACKS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
263 #define main SDL_main
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
264 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
265
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
266 #include <SDL3/SDL_init.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
267 #include <SDL3/SDL_begin_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
268 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
269 extern "C" {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
270 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
271
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
272 /*
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
273 * You can (optionally!) define SDL_MAIN_USE_CALLBACKS before including
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
274 * SDL_main.h, and then your application will _not_ have a standard
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
275 * "main" entry point. Instead, it will operate as a collection of
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
276 * functions that are called as necessary by the system. On some
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
277 * platforms, this is just a layer where SDL drives your program
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
278 * instead of your program driving SDL, on other platforms this might
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
279 * hook into the OS to manage the lifecycle. Programs on most platforms
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
280 * can use whichever approach they prefer, but the decision boils down
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
281 * to:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
282 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
283 * - Using a standard "main" function: this works like it always has for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
284 * the past 50+ years in C programming, and your app is in control.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
285 * - Using the callback functions: this might clean up some code,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
286 * avoid some #ifdef blocks in your program for some platforms, be more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
287 * resource-friendly to the system, and possibly be the primary way to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
288 * access some future platforms (but none require this at the moment).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
289 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
290 * This is up to the app; both approaches are considered valid and supported
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
291 * ways to write SDL apps.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
292 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
293 * If using the callbacks, don't define a "main" function. Instead, implement
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
294 * the functions listed below in your program.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
295 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
296 #ifdef SDL_MAIN_USE_CALLBACKS
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
297
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
298 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
299 * App-implemented initial entry point for SDL_MAIN_USE_CALLBACKS apps.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
300 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
301 * Apps implement this function when using SDL_MAIN_USE_CALLBACKS. If using a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
302 * standard "main" function, you should not supply this.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
303 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
304 * This function is called by SDL once, at startup. The function should
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
305 * initialize whatever is necessary, possibly create windows and open audio
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
306 * devices, etc. The `argc` and `argv` parameters work like they would with a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
307 * standard "main" function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
308 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
309 * This function should not go into an infinite mainloop; it should do any
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
310 * one-time setup it requires and then return.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
311 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
312 * The app may optionally assign a pointer to `*appstate`. This pointer will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
313 * be provided on every future call to the other entry points, to allow
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
314 * application state to be preserved between functions without the app needing
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
315 * to use a global variable. If this isn't set, the pointer will be NULL in
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
316 * future entry points.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
317 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
318 * If this function returns SDL_APP_CONTINUE, the app will proceed to normal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
319 * operation, and will begin receiving repeated calls to SDL_AppIterate and
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
320 * SDL_AppEvent for the life of the program. If this function returns
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
321 * SDL_APP_FAILURE, SDL will call SDL_AppQuit and terminate the process with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
322 * an exit code that reports an error to the platform. If it returns
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
323 * SDL_APP_SUCCESS, SDL calls SDL_AppQuit and terminates with an exit code
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
324 * that reports success to the platform.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
325 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
326 * This function is called by SDL on the main thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
327 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
328 * \param appstate a place where the app can optionally store a pointer for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
329 * future use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
330 * \param argc the standard ANSI C main's argc; number of elements in `argv`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
331 * \param argv the standard ANSI C main's argv; array of command line
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
332 * arguments.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
333 * \returns SDL_APP_FAILURE to terminate with an error, SDL_APP_SUCCESS to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
334 * terminate with success, SDL_APP_CONTINUE to continue.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
335 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
336 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
337 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
338 * \sa SDL_AppIterate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
339 * \sa SDL_AppEvent
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
340 * \sa SDL_AppQuit
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
341 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
342 extern SDLMAIN_DECLSPEC SDL_AppResult SDLCALL SDL_AppInit(void **appstate, int argc, char *argv[]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
343
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
344 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
345 * App-implemented iteration entry point for SDL_MAIN_USE_CALLBACKS apps.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
346 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
347 * Apps implement this function when using SDL_MAIN_USE_CALLBACKS. If using a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
348 * standard "main" function, you should not supply this.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
349 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
350 * This function is called repeatedly by SDL after SDL_AppInit returns
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
351 * SDL_APP_CONTINUE. The function should operate as a single iteration the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
352 * program's primary loop; it should update whatever state it needs and draw a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
353 * new frame of video, usually.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
354 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
355 * On some platforms, this function will be called at the refresh rate of the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
356 * display (which might change during the life of your app!). There are no
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
357 * promises made about what frequency this function might run at. You should
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
358 * use SDL's timer functions if you need to see how much time has passed since
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
359 * the last iteration.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
360 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
361 * There is no need to process the SDL event queue during this function; SDL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
362 * will send events as they arrive in SDL_AppEvent, and in most cases the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
363 * event queue will be empty when this function runs anyhow.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
364 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
365 * This function should not go into an infinite mainloop; it should do one
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
366 * iteration of whatever the program does and return.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
367 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
368 * The `appstate` parameter is an optional pointer provided by the app during
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
369 * SDL_AppInit(). If the app never provided a pointer, this will be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
370 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
371 * If this function returns SDL_APP_CONTINUE, the app will continue normal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
372 * operation, receiving repeated calls to SDL_AppIterate and SDL_AppEvent for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
373 * the life of the program. If this function returns SDL_APP_FAILURE, SDL will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
374 * call SDL_AppQuit and terminate the process with an exit code that reports
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
375 * an error to the platform. If it returns SDL_APP_SUCCESS, SDL calls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
376 * SDL_AppQuit and terminates with an exit code that reports success to the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
377 * platform.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
378 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
379 * This function is called by SDL on the main thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
380 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
381 * \param appstate an optional pointer, provided by the app in SDL_AppInit.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
382 * \returns SDL_APP_FAILURE to terminate with an error, SDL_APP_SUCCESS to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
383 * terminate with success, SDL_APP_CONTINUE to continue.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
384 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
385 * \threadsafety This function may get called concurrently with SDL_AppEvent()
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
386 * for events not pushed on the main thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
387 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
388 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
389 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
390 * \sa SDL_AppInit
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
391 * \sa SDL_AppEvent
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
392 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
393 extern SDLMAIN_DECLSPEC SDL_AppResult SDLCALL SDL_AppIterate(void *appstate);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
394
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
395 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
396 * App-implemented event entry point for SDL_MAIN_USE_CALLBACKS apps.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
397 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
398 * Apps implement this function when using SDL_MAIN_USE_CALLBACKS. If using a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
399 * standard "main" function, you should not supply this.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
400 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
401 * This function is called as needed by SDL after SDL_AppInit returns
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
402 * SDL_APP_CONTINUE. It is called once for each new event.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
403 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
404 * There is (currently) no guarantee about what thread this will be called
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
405 * from; whatever thread pushes an event onto SDL's queue will trigger this
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
406 * function. SDL is responsible for pumping the event queue between each call
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
407 * to SDL_AppIterate, so in normal operation one should only get events in a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
408 * serial fashion, but be careful if you have a thread that explicitly calls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
409 * SDL_PushEvent. SDL itself will push events to the queue on the main thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
410 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
411 * Events sent to this function are not owned by the app; if you need to save
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
412 * the data, you should copy it.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
413 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
414 * This function should not go into an infinite mainloop; it should handle the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
415 * provided event appropriately and return.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
416 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
417 * The `appstate` parameter is an optional pointer provided by the app during
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
418 * SDL_AppInit(). If the app never provided a pointer, this will be NULL.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
419 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
420 * If this function returns SDL_APP_CONTINUE, the app will continue normal
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
421 * operation, receiving repeated calls to SDL_AppIterate and SDL_AppEvent for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
422 * the life of the program. If this function returns SDL_APP_FAILURE, SDL will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
423 * call SDL_AppQuit and terminate the process with an exit code that reports
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
424 * an error to the platform. If it returns SDL_APP_SUCCESS, SDL calls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
425 * SDL_AppQuit and terminates with an exit code that reports success to the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
426 * platform.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
427 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
428 * \param appstate an optional pointer, provided by the app in SDL_AppInit.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
429 * \param event the new event for the app to examine.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
430 * \returns SDL_APP_FAILURE to terminate with an error, SDL_APP_SUCCESS to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
431 * terminate with success, SDL_APP_CONTINUE to continue.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
432 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
433 * \threadsafety This function may get called concurrently with
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
434 * SDL_AppIterate() or SDL_AppQuit() for events not pushed from
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
435 * the main thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
436 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
437 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
438 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
439 * \sa SDL_AppInit
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
440 * \sa SDL_AppIterate
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
441 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
442 extern SDLMAIN_DECLSPEC SDL_AppResult SDLCALL SDL_AppEvent(void *appstate, SDL_Event *event);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
443
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
444 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
445 * App-implemented deinit entry point for SDL_MAIN_USE_CALLBACKS apps.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
446 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
447 * Apps implement this function when using SDL_MAIN_USE_CALLBACKS. If using a
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
448 * standard "main" function, you should not supply this.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
449 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
450 * This function is called once by SDL before terminating the program.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
451 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
452 * This function will be called in all cases, even if SDL_AppInit requests
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
453 * termination at startup.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
454 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
455 * This function should not go into an infinite mainloop; it should
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
456 * deinitialize any resources necessary, perform whatever shutdown activities,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
457 * and return.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
458 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
459 * You do not need to call SDL_Quit() in this function, as SDL will call it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
460 * after this function returns and before the process terminates, but it is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
461 * safe to do so.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
462 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
463 * The `appstate` parameter is an optional pointer provided by the app during
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
464 * SDL_AppInit(). If the app never provided a pointer, this will be NULL. This
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
465 * function call is the last time this pointer will be provided, so any
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
466 * resources to it should be cleaned up here.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
467 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
468 * This function is called by SDL on the main thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
469 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
470 * \param appstate an optional pointer, provided by the app in SDL_AppInit.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
471 * \param result the result code that terminated the app (success or failure).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
472 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
473 * \threadsafety SDL_AppEvent() may get called concurrently with this function
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
474 * if other threads that push events are still active.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
475 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
476 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
477 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
478 * \sa SDL_AppInit
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
479 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
480 extern SDLMAIN_DECLSPEC void SDLCALL SDL_AppQuit(void *appstate, SDL_AppResult result);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
481
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
482 #endif /* SDL_MAIN_USE_CALLBACKS */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
483
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
484
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
485 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
486 * The prototype for the application's main() function
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
487 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
488 * \param argc an ANSI-C style main function's argc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
489 * \param argv an ANSI-C style main function's argv.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
490 * \returns an ANSI-C main return code; generally 0 is considered successful
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
491 * program completion, and small non-zero values are considered
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
492 * errors.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
493 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
494 * \since This datatype is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
495 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
496 typedef int (SDLCALL *SDL_main_func)(int argc, char *argv[]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
497
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
498 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
499 * An app-supplied function for program entry.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
500 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
501 * Apps do not directly create this function; they should create a standard
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
502 * ANSI-C `main` function instead. If SDL needs to insert some startup code
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
503 * before `main` runs, or the platform doesn't actually _use_ a function
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
504 * called "main", SDL will do some macro magic to redefine `main` to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
505 * `SDL_main` and provide its own `main`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
506 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
507 * Apps should include `SDL_main.h` in the same file as their `main` function,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
508 * and they should not use that symbol for anything else in that file, as it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
509 * might get redefined.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
510 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
511 * This function is only provided by the app if it isn't using
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
512 * SDL_MAIN_USE_CALLBACKS.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
513 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
514 * Program startup is a surprisingly complex topic. Please see
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
515 * [README-main-functions](README-main-functions), (or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
516 * docs/README-main-functions.md in the source tree) for a more detailed
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
517 * explanation.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
518 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
519 * \param argc an ANSI-C style main function's argc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
520 * \param argv an ANSI-C style main function's argv.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
521 * \returns an ANSI-C main return code; generally 0 is considered successful
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
522 * program completion, and small non-zero values are considered
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
523 * errors.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
524 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
525 * \threadsafety This is the program entry point.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
526 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
527 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
528 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
529 extern SDLMAIN_DECLSPEC int SDLCALL SDL_main(int argc, char *argv[]);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
530
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
531 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
532 * Circumvent failure of SDL_Init() when not using SDL_main() as an entry
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
533 * point.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
534 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
535 * This function is defined in SDL_main.h, along with the preprocessor rule to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
536 * redefine main() as SDL_main(). Thus to ensure that your main() function
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
537 * will not be changed it is necessary to define SDL_MAIN_HANDLED before
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
538 * including SDL.h.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
539 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
540 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
541 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
542 * \sa SDL_Init
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
543 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
544 extern SDL_DECLSPEC void SDLCALL SDL_SetMainReady(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
545
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
546 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
547 * Initializes and launches an SDL application, by doing platform-specific
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
548 * initialization before calling your mainFunction and cleanups after it
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
549 * returns, if that is needed for a specific platform, otherwise it just calls
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
550 * mainFunction.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
551 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
552 * You can use this if you want to use your own main() implementation without
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
553 * using SDL_main (like when using SDL_MAIN_HANDLED). When using this, you do
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
554 * *not* need SDL_SetMainReady().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
555 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
556 * If `argv` is NULL, SDL will provide command line arguments, either by
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
557 * querying the OS for them if possible, or supplying a filler array if not.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
558 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
559 * \param argc the argc parameter from the application's main() function, or 0
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
560 * if the platform's main-equivalent has no argc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
561 * \param argv the argv parameter from the application's main() function, or
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
562 * NULL if the platform's main-equivalent has no argv.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
563 * \param mainFunction your SDL app's C-style main(). NOT the function you're
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
564 * calling this from! Its name doesn't matter; it doesn't
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
565 * literally have to be `main`.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
566 * \param reserved should be NULL (reserved for future use, will probably be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
567 * platform-specific then).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
568 * \returns the return value from mainFunction: 0 on success, otherwise
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
569 * failure; SDL_GetError() might have more information on the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
570 * failure.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
571 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
572 * \threadsafety Generally this is called once, near startup, from the
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
573 * process's initial thread.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
574 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
575 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
576 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
577 extern SDL_DECLSPEC int SDLCALL SDL_RunApp(int argc, char *argv[], SDL_main_func mainFunction, void *reserved);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
578
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
579 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
580 * An entry point for SDL's use in SDL_MAIN_USE_CALLBACKS.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
581 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
582 * Generally, you should not call this function directly. This only exists to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
583 * hand off work into SDL as soon as possible, where it has a lot more control
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
584 * and functionality available, and make the inline code in SDL_main.h as
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
585 * small as possible.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
586 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
587 * Not all platforms use this, it's actual use is hidden in a magic
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
588 * header-only library, and you should not call this directly unless you
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
589 * _really_ know what you're doing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
590 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
591 * \param argc standard Unix main argc.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
592 * \param argv standard Unix main argv.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
593 * \param appinit the application's SDL_AppInit function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
594 * \param appiter the application's SDL_AppIterate function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
595 * \param appevent the application's SDL_AppEvent function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
596 * \param appquit the application's SDL_AppQuit function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
597 * \returns standard Unix main return value.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
598 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
599 * \threadsafety It is not safe to call this anywhere except as the only
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
600 * function call in SDL_main.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
601 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
602 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
603 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
604 extern SDL_DECLSPEC int SDLCALL SDL_EnterAppMainCallbacks(int argc, char *argv[], SDL_AppInit_func appinit, SDL_AppIterate_func appiter, SDL_AppEvent_func appevent, SDL_AppQuit_func appquit);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
605
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
606
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
607 #if defined(SDL_PLATFORM_WINDOWS)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
608
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
609 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
610 * Register a win32 window class for SDL's use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
611 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
612 * This can be called to set the application window class at startup. It is
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
613 * safe to call this multiple times, as long as every call is eventually
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
614 * paired with a call to SDL_UnregisterApp, but a second registration attempt
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
615 * while a previous registration is still active will be ignored, other than
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
616 * to increment a counter.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
617 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
618 * Most applications do not need to, and should not, call this directly; SDL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
619 * will call it when initializing the video subsystem.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
620 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
621 * If `name` is NULL, SDL currently uses `(CS_BYTEALIGNCLIENT | CS_OWNDC)` for
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
622 * the style, regardless of what is specified here.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
623 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
624 * \param name the window class name, in UTF-8 encoding. If NULL, SDL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
625 * currently uses "SDL_app" but this isn't guaranteed.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
626 * \param style the value to use in WNDCLASSEX::style.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
627 * \param hInst the HINSTANCE to use in WNDCLASSEX::hInstance. If zero, SDL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
628 * will use `GetModuleHandle(NULL)` instead.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
629 * \returns true on success or false on failure; call SDL_GetError() for more
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
630 * information.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
631 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
632 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
633 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
634 extern SDL_DECLSPEC bool SDLCALL SDL_RegisterApp(const char *name, Uint32 style, void *hInst);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
635
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
636 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
637 * Deregister the win32 window class from an SDL_RegisterApp call.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
638 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
639 * This can be called to undo the effects of SDL_RegisterApp.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
640 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
641 * Most applications do not need to, and should not, call this directly; SDL
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
642 * will call it when deinitializing the video subsystem.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
643 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
644 * It is safe to call this multiple times, as long as every call is eventually
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
645 * paired with a prior call to SDL_RegisterApp. The window class will only be
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
646 * deregistered when the registration counter in SDL_RegisterApp decrements to
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
647 * zero through calls to this function.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
648 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
649 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
650 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
651 extern SDL_DECLSPEC void SDLCALL SDL_UnregisterApp(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
652
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
653 #endif /* defined(SDL_PLATFORM_WINDOWS) */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
654
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
655 /**
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
656 * Callback from the application to let the suspend continue.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
657 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
658 * This function is only needed for Xbox GDK support; all other platforms will
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
659 * do nothing and set an "unsupported" error message.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
660 *
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
661 * \since This function is available since SDL 3.2.0.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
662 */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
663 extern SDL_DECLSPEC void SDLCALL SDL_GDKSuspendComplete(void);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
664
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
665 #ifdef __cplusplus
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
666 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
667 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
668
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
669 #include <SDL3/SDL_close_code.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
670
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
671 #if !defined(SDL_MAIN_HANDLED) && !defined(SDL_MAIN_NOIMPL)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
672 /* include header-only SDL_main implementations */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
673 #if defined(SDL_MAIN_USE_CALLBACKS) || defined(SDL_MAIN_NEEDED) || defined(SDL_MAIN_AVAILABLE)
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
674 /* platforms which main (-equivalent) can be implemented in plain C */
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
675 #include <SDL3/SDL_main_impl.h>
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
676 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
677 #endif
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
678
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
679 #endif /* SDL_main_h_ */