Mercurial > foo_out_sdl
comparison SDL3/SDL_test_common.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 |
comparison
equal
deleted
inserted
replaced
| 0:e9bb126753e7 | 1:20d02a178406 |
|---|---|
| 1 /* | |
| 2 Simple DirectMedia Layer | |
| 3 Copyright (C) 1997-2025 Sam Lantinga <slouken@libsdl.org> | |
| 4 | |
| 5 This software is provided 'as-is', without any express or implied | |
| 6 warranty. In no event will the authors be held liable for any damages | |
| 7 arising from the use of this software. | |
| 8 | |
| 9 Permission is granted to anyone to use this software for any purpose, | |
| 10 including commercial applications, and to alter it and redistribute it | |
| 11 freely, subject to the following restrictions: | |
| 12 | |
| 13 1. The origin of this software must not be misrepresented; you must not | |
| 14 claim that you wrote the original software. If you use this software | |
| 15 in a product, an acknowledgment in the product documentation would be | |
| 16 appreciated but is not required. | |
| 17 2. Altered source versions must be plainly marked as such, and must not be | |
| 18 misrepresented as being the original software. | |
| 19 3. This notice may not be removed or altered from any source distribution. | |
| 20 */ | |
| 21 | |
| 22 /** | |
| 23 * Common functions of SDL test framework. | |
| 24 * | |
| 25 * This code is a part of the SDL test library, not the main SDL library. | |
| 26 */ | |
| 27 | |
| 28 /* Ported from original test/common.h file. */ | |
| 29 | |
| 30 #ifndef SDL_test_common_h_ | |
| 31 #define SDL_test_common_h_ | |
| 32 | |
| 33 #include <SDL3/SDL.h> | |
| 34 | |
| 35 #ifdef SDL_PLATFORM_PSP | |
| 36 #define DEFAULT_WINDOW_WIDTH 480 | |
| 37 #define DEFAULT_WINDOW_HEIGHT 272 | |
| 38 #elif defined(SDL_PLATFORM_VITA) | |
| 39 #define DEFAULT_WINDOW_WIDTH 960 | |
| 40 #define DEFAULT_WINDOW_HEIGHT 544 | |
| 41 #else | |
| 42 #define DEFAULT_WINDOW_WIDTH 640 | |
| 43 #define DEFAULT_WINDOW_HEIGHT 480 | |
| 44 #endif | |
| 45 | |
| 46 typedef Uint32 SDLTest_VerboseFlags; | |
| 47 #define VERBOSE_VIDEO 0x00000001 | |
| 48 #define VERBOSE_MODES 0x00000002 | |
| 49 #define VERBOSE_RENDER 0x00000004 | |
| 50 #define VERBOSE_EVENT 0x00000008 | |
| 51 #define VERBOSE_AUDIO 0x00000010 | |
| 52 #define VERBOSE_MOTION 0x00000020 | |
| 53 | |
| 54 /* !< Function pointer parsing one argument at argv[index], returning the number of parsed arguments, | |
| 55 * or a negative value when the argument is invalid */ | |
| 56 typedef int (SDLCALL *SDLTest_ParseArgumentsFp)(void *data, char **argv, int index); | |
| 57 | |
| 58 /* !< Finalize the argument parser. */ | |
| 59 typedef void (SDLCALL *SDLTest_FinalizeArgumentParserFp)(void *arg); | |
| 60 | |
| 61 typedef struct SDLTest_ArgumentParser | |
| 62 { | |
| 63 /* !< Parse an argument. */ | |
| 64 SDLTest_ParseArgumentsFp parse_arguments; | |
| 65 /* !< Finalize this argument parser. Called once before parsing the first argument. */ | |
| 66 SDLTest_FinalizeArgumentParserFp finalize; | |
| 67 /* !< Null-terminated array of arguments. Printed when running with --help. */ | |
| 68 const char **usage; | |
| 69 /* !< User data, passed to all callbacks. */ | |
| 70 void *data; | |
| 71 /* !< Next argument parser. */ | |
| 72 struct SDLTest_ArgumentParser *next; | |
| 73 } SDLTest_ArgumentParser; | |
| 74 | |
| 75 typedef struct | |
| 76 { | |
| 77 /* SDL init flags */ | |
| 78 char **argv; | |
| 79 SDL_InitFlags flags; | |
| 80 SDLTest_VerboseFlags verbose; | |
| 81 | |
| 82 /* Video info */ | |
| 83 const char *videodriver; | |
| 84 int display_index; | |
| 85 SDL_DisplayID displayID; | |
| 86 const char *window_title; | |
| 87 const char *window_icon; | |
| 88 SDL_WindowFlags window_flags; | |
| 89 bool flash_on_focus_loss; | |
| 90 int window_x; | |
| 91 int window_y; | |
| 92 int window_w; | |
| 93 int window_h; | |
| 94 int window_minW; | |
| 95 int window_minH; | |
| 96 int window_maxW; | |
| 97 int window_maxH; | |
| 98 float window_min_aspect; | |
| 99 float window_max_aspect; | |
| 100 int logical_w; | |
| 101 int logical_h; | |
| 102 bool auto_scale_content; | |
| 103 SDL_RendererLogicalPresentation logical_presentation; | |
| 104 float scale; | |
| 105 int depth; | |
| 106 float refresh_rate; | |
| 107 bool fill_usable_bounds; | |
| 108 bool fullscreen_exclusive; | |
| 109 SDL_DisplayMode fullscreen_mode; | |
| 110 int num_windows; | |
| 111 SDL_Window **windows; | |
| 112 const char *gpudriver; | |
| 113 | |
| 114 /* Renderer info */ | |
| 115 const char *renderdriver; | |
| 116 int render_vsync; | |
| 117 bool skip_renderer; | |
| 118 SDL_Renderer **renderers; | |
| 119 SDL_Texture **targets; | |
| 120 | |
| 121 /* Audio info */ | |
| 122 const char *audiodriver; | |
| 123 SDL_AudioFormat audio_format; | |
| 124 int audio_channels; | |
| 125 int audio_freq; | |
| 126 SDL_AudioDeviceID audio_id; | |
| 127 | |
| 128 /* GL settings */ | |
| 129 int gl_red_size; | |
| 130 int gl_green_size; | |
| 131 int gl_blue_size; | |
| 132 int gl_alpha_size; | |
| 133 int gl_buffer_size; | |
| 134 int gl_depth_size; | |
| 135 int gl_stencil_size; | |
| 136 int gl_double_buffer; | |
| 137 int gl_accum_red_size; | |
| 138 int gl_accum_green_size; | |
| 139 int gl_accum_blue_size; | |
| 140 int gl_accum_alpha_size; | |
| 141 int gl_stereo; | |
| 142 int gl_release_behavior; | |
| 143 int gl_multisamplebuffers; | |
| 144 int gl_multisamplesamples; | |
| 145 int gl_retained_backing; | |
| 146 int gl_accelerated; | |
| 147 int gl_major_version; | |
| 148 int gl_minor_version; | |
| 149 int gl_debug; | |
| 150 int gl_profile_mask; | |
| 151 | |
| 152 /* Mouse info */ | |
| 153 SDL_Rect confine; | |
| 154 bool hide_cursor; | |
| 155 | |
| 156 /* Misc. */ | |
| 157 int quit_after_ms_interval; | |
| 158 SDL_TimerID quit_after_ms_timer; | |
| 159 | |
| 160 /* Options info */ | |
| 161 SDLTest_ArgumentParser common_argparser; | |
| 162 SDLTest_ArgumentParser video_argparser; | |
| 163 SDLTest_ArgumentParser audio_argparser; | |
| 164 | |
| 165 SDLTest_ArgumentParser *argparser; | |
| 166 } SDLTest_CommonState; | |
| 167 | |
| 168 #include <SDL3/SDL_begin_code.h> | |
| 169 /* Set up for C function definitions, even when using C++ */ | |
| 170 #ifdef __cplusplus | |
| 171 extern "C" { | |
| 172 #endif | |
| 173 | |
| 174 /* Function prototypes */ | |
| 175 | |
| 176 /** | |
| 177 * Parse command line parameters and create common state. | |
| 178 * | |
| 179 * \param argv Array of command line parameters | |
| 180 * \param flags Flags indicating which subsystem to initialize (i.e. SDL_INIT_VIDEO | SDL_INIT_AUDIO) | |
| 181 * | |
| 182 * \returns a newly allocated common state object. | |
| 183 */ | |
| 184 SDLTest_CommonState * SDLCALL SDLTest_CommonCreateState(char **argv, SDL_InitFlags flags); | |
| 185 | |
| 186 /** | |
| 187 * Free the common state object. | |
| 188 * | |
| 189 * You should call SDL_Quit() before calling this function. | |
| 190 * | |
| 191 * \param state The common state object to destroy | |
| 192 */ | |
| 193 void SDLCALL SDLTest_CommonDestroyState(SDLTest_CommonState *state); | |
| 194 | |
| 195 /** | |
| 196 * Process one common argument. | |
| 197 * | |
| 198 * \param state The common state describing the test window to create. | |
| 199 * \param index The index of the argument to process in argv[]. | |
| 200 * | |
| 201 * \returns the number of arguments processed (i.e. 1 for --fullscreen, 2 for --video [videodriver], or -1 on error. | |
| 202 */ | |
| 203 int SDLCALL SDLTest_CommonArg(SDLTest_CommonState *state, int index); | |
| 204 | |
| 205 | |
| 206 /** | |
| 207 * Logs command line usage info. | |
| 208 * | |
| 209 * This logs the appropriate command line options for the subsystems in use | |
| 210 * plus other common options, and then any application-specific options. | |
| 211 * This uses the SDL_Log() function and splits up output to be friendly to | |
| 212 * 80-character-wide terminals. | |
| 213 * | |
| 214 * \param state The common state describing the test window for the app. | |
| 215 * \param argv0 argv[0], as passed to main/SDL_main. | |
| 216 * \param options an array of strings for application specific options. The last element of the array should be NULL. | |
| 217 */ | |
| 218 void SDLCALL SDLTest_CommonLogUsage(SDLTest_CommonState *state, const char *argv0, const char **options); | |
| 219 | |
| 220 /** | |
| 221 * Open test window. | |
| 222 * | |
| 223 * \param state The common state describing the test window to create. | |
| 224 * | |
| 225 * \returns true if initialization succeeded, false otherwise | |
| 226 */ | |
| 227 bool SDLCALL SDLTest_CommonInit(SDLTest_CommonState *state); | |
| 228 | |
| 229 /** | |
| 230 * Easy argument handling when test app doesn't need any custom args. | |
| 231 * | |
| 232 * \param state The common state describing the test window to create. | |
| 233 * \param argc argc, as supplied to SDL_main | |
| 234 * \param argv argv, as supplied to SDL_main | |
| 235 * | |
| 236 * \returns false if app should quit, true otherwise. | |
| 237 */ | |
| 238 bool SDLCALL SDLTest_CommonDefaultArgs(SDLTest_CommonState *state, int argc, char **argv); | |
| 239 | |
| 240 /** | |
| 241 * Print the details of an event. | |
| 242 * | |
| 243 * This is automatically called by SDLTest_CommonEvent() as needed. | |
| 244 * | |
| 245 * \param event The event to print. | |
| 246 */ | |
| 247 void SDLCALL SDLTest_PrintEvent(const SDL_Event *event); | |
| 248 | |
| 249 /** | |
| 250 * Common event handler for test windows if you use a standard SDL_main. | |
| 251 * | |
| 252 * \param state The common state used to create test window. | |
| 253 * \param event The event to handle. | |
| 254 * \param done Flag indicating we are done. | |
| 255 */ | |
| 256 void SDLCALL SDLTest_CommonEvent(SDLTest_CommonState *state, SDL_Event *event, int *done); | |
| 257 | |
| 258 /** | |
| 259 * Common event handler for test windows if you use SDL_AppEvent. | |
| 260 * | |
| 261 * This does _not_ free anything in `event`. | |
| 262 * | |
| 263 * \param state The common state used to create test window. | |
| 264 * \param event The event to handle. | |
| 265 * \returns Value suitable for returning from SDL_AppEvent(). | |
| 266 */ | |
| 267 SDL_AppResult SDLCALL SDLTest_CommonEventMainCallbacks(SDLTest_CommonState *state, const SDL_Event *event); | |
| 268 | |
| 269 /** | |
| 270 * Close test window. | |
| 271 * | |
| 272 * \param state The common state used to create test window. | |
| 273 * | |
| 274 */ | |
| 275 void SDLCALL SDLTest_CommonQuit(SDLTest_CommonState *state); | |
| 276 | |
| 277 /** | |
| 278 * Draws various window information (position, size, etc.) to the renderer. | |
| 279 * | |
| 280 * \param renderer The renderer to draw to. | |
| 281 * \param window The window whose information should be displayed. | |
| 282 * \param usedHeight Returns the height used, so the caller can draw more below. | |
| 283 * | |
| 284 */ | |
| 285 void SDLCALL SDLTest_CommonDrawWindowInfo(SDL_Renderer *renderer, SDL_Window *window, float *usedHeight); | |
| 286 | |
| 287 /* Ends C function definitions when using C++ */ | |
| 288 #ifdef __cplusplus | |
| 289 } | |
| 290 #endif | |
| 291 #include <SDL3/SDL_close_code.h> | |
| 292 | |
| 293 #endif /* SDL_test_common_h_ */ |
