mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-12-21 04:35:23 +08:00
Unify all the SDL_*RunApp() functions into just SDL_RunApp()
makes the SDL_main code shorter Also added a generic SDL_RunApp() implementation for platforms that don't really need it. Some platforms (that use SDL_main but haven't been ported yet) are still missing, but are added in the following commits.
This commit is contained in:
committed by
Sam Lantinga
parent
1de559248e
commit
7bfc41db3c
@@ -43,11 +43,13 @@
|
||||
/* On WinRT, SDL provides a main function that initializes CoreApplication,
|
||||
creating an instance of IFrameworkView in the process.
|
||||
|
||||
Please note that #include'ing SDL_main.h is not enough to get a main()
|
||||
function working. In non-XAML apps, the file,
|
||||
src/main/winrt/SDL_WinRT_main_NonXAML.cpp, or a copy of it, must be compiled
|
||||
into the app itself. In XAML apps, the function, SDL_WinRTRunApp must be
|
||||
called, with a pointer to the Direct3D-hosted XAML control passed in.
|
||||
Ideally, #include'ing SDL_main.h is enough to get a main() function working.
|
||||
However, that requires the source file your main() is in to be compiled
|
||||
as C++ *and* with the /ZW compiler flag. If that's not feasible, add an
|
||||
otherwise empty .cpp file that only contains `#include <SDL3/SDL_main.h>`
|
||||
and build that with /ZW (still include SDL_main.h in your other file with main()!).
|
||||
In XAML apps, instead the function SDL_RunApp() must be called with a pointer
|
||||
to the Direct3D-hosted XAML control passed in as the "reserved" argument.
|
||||
*/
|
||||
#define SDL_MAIN_NEEDED
|
||||
|
||||
@@ -57,7 +59,7 @@
|
||||
If you prefer to write your own WinMain-function instead of having SDL
|
||||
provide one that calls your main() function,
|
||||
#define SDL_MAIN_HANDLED before #include'ing SDL_main.h
|
||||
and call the SDL_GDKRunApp function from your entry point.
|
||||
and call the SDL_RunApp function from your entry point.
|
||||
*/
|
||||
#define SDL_MAIN_NEEDED
|
||||
|
||||
@@ -161,6 +163,31 @@ extern SDLMAIN_DECLSPEC int SDL_main(int argc, char *argv[]);
|
||||
*/
|
||||
extern DECLSPEC void SDLCALL SDL_SetMainReady(void);
|
||||
|
||||
/**
|
||||
* Initializes and launches an SDL application, by doing platform-specific
|
||||
* initialization before calling your mainFunction and cleanups after it returns,
|
||||
* if that is needed for a specific platform, otherwise it just calls mainFunction.
|
||||
* You can use this if you want to use your own main() implementation
|
||||
* without using SDL_main (like when using SDL_MAIN_HANDLED).
|
||||
* When using this, you do *not* need SDL_SetMainReady().
|
||||
*
|
||||
* \param argc The argc parameter from the application's main() function,
|
||||
* or 0 if the platform's main-equivalent has no argc
|
||||
* \param argv The argv parameter from the application's main() function,
|
||||
* or NULL if the platform's main-equivalent has no argv
|
||||
* \param mainFunction Your SDL app's C-style main(), an SDL_main_func.
|
||||
* NOT the function you're calling this from!
|
||||
* Its name doesn't matter, but its signature must be
|
||||
* like int my_main(int argc, char* argv[])
|
||||
* \param reserved should be NULL (reserved for future use, will probably
|
||||
* be platform-specific then)
|
||||
* \return the return value from mainFunction: 0 on success, -1 on failure;
|
||||
* SDL_GetError() might have more information on the failure
|
||||
*
|
||||
* \since This function is available since SDL 3.0.0.
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL SDL_RunApp(int argc, char* argv[], SDL_main_func mainFunction, void * reserved);
|
||||
|
||||
#if defined(__WIN32__) || defined(__GDK__)
|
||||
|
||||
/**
|
||||
@@ -207,93 +234,35 @@ extern DECLSPEC void SDLCALL SDL_UnregisterApp(void);
|
||||
|
||||
#endif /* defined(__WIN32__) || defined(__GDK__) */
|
||||
|
||||
#ifdef __WIN32__
|
||||
|
||||
/**
|
||||
* Initialize and launch an SDL/Win32 (classic WinAPI) application.
|
||||
*
|
||||
* \param mainFunction the SDL app's C-style main(), an SDL_main_func
|
||||
* \param reserved reserved for future use; should be NULL
|
||||
* \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve
|
||||
* more information on the failure.
|
||||
*
|
||||
* \since This function is available since SDL 3.0.0.
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL SDL_Win32RunApp(SDL_main_func mainFunction, void * reserved);
|
||||
|
||||
#endif /* __WIN32__ */
|
||||
|
||||
#ifdef __WINRT__
|
||||
|
||||
/**
|
||||
* Initialize and launch an SDL/WinRT application.
|
||||
*
|
||||
* \param mainFunction the SDL app's C-style main(), an SDL_main_func
|
||||
* \param reserved reserved for future use; should be NULL
|
||||
* \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve
|
||||
* more information on the failure.
|
||||
*
|
||||
* \since This function is available since SDL 2.0.3.
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL SDL_WinRTRunApp(SDL_main_func mainFunction, void * reserved);
|
||||
/* for compatibility with SDL2's function of this name */
|
||||
#define SDL_WinRTRunApp(MAIN_FUNC, RESERVED) SDL_RunApp(0, NULL, MAIN_FUNC, RESERVED)
|
||||
|
||||
#endif /* __WINRT__ */
|
||||
|
||||
#if defined(__IOS__)
|
||||
|
||||
/**
|
||||
* Initializes and launches an SDL application.
|
||||
*
|
||||
* \param argc The argc parameter from the application's main() function
|
||||
* \param argv The argv parameter from the application's main() function
|
||||
* \param mainFunction The SDL app's C-style main(), an SDL_main_func
|
||||
* \return the return value from mainFunction
|
||||
*
|
||||
* \since This function is available since SDL 3.0.0.
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL SDL_UIKitRunApp(int argc, char *argv[], SDL_main_func mainFunction);
|
||||
/* for compatibility with SDL2's function of this name */
|
||||
#define SDL_UIKitRunApp(ARGC, ARGV, MAIN_FUNC) SDL_RunApp(ARGC, ARGV, MAIN_FUNC, NULL)
|
||||
|
||||
#endif /* __IOS__ */
|
||||
|
||||
#ifdef __GDK__
|
||||
|
||||
/**
|
||||
* Initialize and launch an SDL GDK application.
|
||||
*
|
||||
* \param mainFunction the SDL app's C-style main(), an SDL_main_func
|
||||
* \param reserved reserved for future use; should be NULL
|
||||
* \returns 0 on success or -1 on failure; call SDL_GetError() to retrieve
|
||||
* more information on the failure.
|
||||
*
|
||||
* \since This function is available since SDL 3.0.0.
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL SDL_GDKRunApp(SDL_main_func mainFunction, void *reserved);
|
||||
/* for compatibility with SDL2's function of this name */
|
||||
#define SDL_GDKRunApp(MAIN_FUNC, RESERVED) SDL_RunApp(0, NULL, MAIN_FUNC, RESERVED)
|
||||
|
||||
/**
|
||||
* Callback from the application to let the suspend continue.
|
||||
*
|
||||
* \since This function is available since SDL 3.0.0.
|
||||
* \since This function is available since SDL 2.28.0.
|
||||
*/
|
||||
extern DECLSPEC void SDLCALL SDL_GDKSuspendComplete(void);
|
||||
|
||||
#endif /* __GDK__ */
|
||||
|
||||
#ifdef __3DS__
|
||||
|
||||
/**
|
||||
* Initializes and launches an SDL application.
|
||||
*
|
||||
* \param argc The argc parameter from the application's main() function
|
||||
* \param argv The argv parameter from the application's main() function
|
||||
* \param mainFunction The SDL app's C-style main(), an SDL_main_func
|
||||
* \return the return value from mainFunction
|
||||
*
|
||||
* \since This function is available since SDL 3.0.0.
|
||||
*/
|
||||
extern DECLSPEC int SDLCALL SDL_N3DSRunApp(int argc, char *argv[], SDL_main_func mainFunction);
|
||||
|
||||
#endif /* __3DS__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -72,7 +72,7 @@ typedef char* LPSTR;
|
||||
int
|
||||
console_wmain(int argc, wchar_t *wargv[], wchar_t *wenvp)
|
||||
{
|
||||
return SDL_Win32RunApp(SDL_main, NULL);
|
||||
return SDL_RunApp(0, NULL, SDL_main, NULL);
|
||||
}
|
||||
|
||||
#else /* ANSI */
|
||||
@@ -81,7 +81,7 @@ console_wmain(int argc, wchar_t *wargv[], wchar_t *wenvp)
|
||||
int
|
||||
console_ansi_main(int argc, char *argv[])
|
||||
{
|
||||
return SDL_Win32RunApp(SDL_main, NULL);
|
||||
return SDL_RunApp(0, NULL, SDL_main, NULL);
|
||||
}
|
||||
#endif /* UNICODE/ANSI */
|
||||
|
||||
@@ -91,11 +91,7 @@ console_ansi_main(int argc, char *argv[])
|
||||
int WINAPI
|
||||
WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)
|
||||
{
|
||||
#ifdef __GDK__
|
||||
return SDL_GDKRunApp(SDL_main, NULL);
|
||||
#else
|
||||
return SDL_Win32RunApp(SDL_main, NULL);
|
||||
#endif
|
||||
return SDL_RunApp(0, NULL, SDL_main, NULL);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -156,11 +152,11 @@ WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR szCmdLine, int sw)
|
||||
|
||||
int CALLBACK WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||
{
|
||||
return SDL_WinRTRunApp(SDL_main, NULL);
|
||||
return SDL_RunApp(0, NULL, SDL_main, NULL);
|
||||
}
|
||||
|
||||
/* end of WinRT impl */
|
||||
#elif defined(__IOS__) || defined(__TVOS__)
|
||||
#elif defined(__IOS__) || defined(__TVOS__) || defined(__3DS__)
|
||||
|
||||
#include <SDL3/begin_code.h>
|
||||
|
||||
@@ -170,7 +166,7 @@ extern "C" {
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
return SDL_UIKitRunApp(argc, argv, SDL_main);
|
||||
return SDL_RunApp(argc, argv, SDL_main, NULL);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
@@ -179,27 +175,7 @@ int main(int argc, char *argv[])
|
||||
|
||||
#include <SDL3/close_code.h>
|
||||
|
||||
/* end of __IOS__ and __TVOS__ impls */
|
||||
#elif defined(__3DS__)
|
||||
|
||||
#include <SDL3/begin_code.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
return SDL_N3DSRunApp(argc, argv, SDL_main);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#include <SDL3/close_code.h>
|
||||
|
||||
/* end of __3DS__ impl */
|
||||
/* end of __IOS__, __3DS__, __TVOS__ impls */
|
||||
|
||||
/* TODO: remaining platforms */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user