2015-06-21 09:33:46 -06:00
|
|
|
/*
|
|
|
|
Simple DirectMedia Layer
|
2023-01-09 10:41:41 -07:00
|
|
|
Copyright (C) 1997-2023 Sam Lantinga <slouken@libsdl.org>
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
This software is provided 'as-is', without any express or implied
|
|
|
|
warranty. In no event will the authors be held liable for any damages
|
|
|
|
arising from the use of this software.
|
|
|
|
|
|
|
|
Permission is granted to anyone to use this software for any purpose,
|
|
|
|
including commercial applications, and to alter it and redistribute it
|
|
|
|
freely, subject to the following restrictions:
|
|
|
|
|
|
|
|
1. The origin of this software must not be misrepresented; you must not
|
|
|
|
claim that you wrote the original software. If you use this software
|
|
|
|
in a product, an acknowledgment in the product documentation would be
|
|
|
|
appreciated but is not required.
|
|
|
|
2. Altered source versions must be plainly marked as such, and must not be
|
|
|
|
misrepresented as being the original software.
|
|
|
|
3. This notice may not be removed or altered from any source distribution.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \file SDL_test_common.h
|
|
|
|
*
|
2023-02-18 10:32:06 -07:00
|
|
|
* \brief Common functions of SDL test framework.
|
2015-06-21 09:33:46 -06:00
|
|
|
*
|
2022-11-21 21:28:58 -07:00
|
|
|
* This code is a part of the SDL test library, not the main SDL library.
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
|
|
|
|
|
|
|
/* Ported from original test\common.h file. */
|
|
|
|
|
2016-11-20 22:34:54 -07:00
|
|
|
#ifndef SDL_test_common_h_
|
|
|
|
#define SDL_test_common_h_
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2022-11-26 21:43:38 -07:00
|
|
|
#include <SDL3/SDL.h>
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
#if defined(__PSP__)
|
|
|
|
#define DEFAULT_WINDOW_WIDTH 480
|
|
|
|
#define DEFAULT_WINDOW_HEIGHT 272
|
2021-06-21 15:09:06 -06:00
|
|
|
#elif defined(__VITA__)
|
|
|
|
#define DEFAULT_WINDOW_WIDTH 960
|
|
|
|
#define DEFAULT_WINDOW_HEIGHT 544
|
2015-06-21 09:33:46 -06:00
|
|
|
#else
|
|
|
|
#define DEFAULT_WINDOW_WIDTH 640
|
|
|
|
#define DEFAULT_WINDOW_HEIGHT 480
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define VERBOSE_VIDEO 0x00000001
|
|
|
|
#define VERBOSE_MODES 0x00000002
|
|
|
|
#define VERBOSE_RENDER 0x00000004
|
|
|
|
#define VERBOSE_EVENT 0x00000008
|
|
|
|
#define VERBOSE_AUDIO 0x00000010
|
2022-07-29 21:37:38 -06:00
|
|
|
#define VERBOSE_MOTION 0x00000020
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
typedef struct
|
|
|
|
{
|
|
|
|
/* SDL init flags */
|
|
|
|
char **argv;
|
|
|
|
Uint32 flags;
|
|
|
|
Uint32 verbose;
|
|
|
|
|
|
|
|
/* Video info */
|
|
|
|
const char *videodriver;
|
Windows default to fullscreen desktop mode if they don't pick an explicit video mode
Rather than iterating over display modes using an index, there is a new function SDL_GetFullscreenDisplayModes() to get the list of available fullscreen modes on a display.
{
SDL_DisplayID display = SDL_GetPrimaryDisplay();
int num_modes = 0;
SDL_DisplayMode **modes = SDL_GetFullscreenDisplayModes(display, &num_modes);
if (modes) {
for (i = 0; i < num_modes; ++i) {
SDL_DisplayMode *mode = modes[i];
SDL_Log("Display %" SDL_PRIu32 " mode %d: %dx%d@%gHz, %d%% scale\n",
display, i, mode->pixel_w, mode->pixel_h, mode->refresh_rate, (int)(mode->display_scale * 100.0f));
}
SDL_free(modes);
}
}
SDL_GetDesktopDisplayMode() and SDL_GetCurrentDisplayMode() return pointers to display modes rather than filling in application memory.
Windows now have an explicit fullscreen mode that is set, using SDL_SetWindowFullscreenMode(). The fullscreen mode for a window can be queried with SDL_GetWindowFullscreenMode(), which returns a pointer to the mode, or NULL if the window will be fullscreen desktop. SDL_SetWindowFullscreen() just takes a boolean value, setting the correct fullscreen state based on the selected mode.
2023-01-31 22:23:14 -07:00
|
|
|
int display_index;
|
|
|
|
SDL_DisplayID displayID;
|
2015-06-21 09:33:46 -06:00
|
|
|
const char *window_title;
|
|
|
|
const char *window_icon;
|
|
|
|
Uint32 window_flags;
|
2021-07-24 14:41:55 -06:00
|
|
|
SDL_bool flash_on_focus_loss;
|
2015-06-21 09:33:46 -06:00
|
|
|
int window_x;
|
|
|
|
int window_y;
|
|
|
|
int window_w;
|
|
|
|
int window_h;
|
|
|
|
int window_minW;
|
|
|
|
int window_minH;
|
|
|
|
int window_maxW;
|
|
|
|
int window_maxH;
|
|
|
|
int logical_w;
|
|
|
|
int logical_h;
|
2023-02-03 13:25:46 -07:00
|
|
|
SDL_RendererLogicalPresentation logical_presentation;
|
|
|
|
SDL_ScaleMode logical_scale_mode;
|
2015-06-21 09:33:46 -06:00
|
|
|
float scale;
|
|
|
|
int depth;
|
2023-01-02 16:47:19 -07:00
|
|
|
float refresh_rate;
|
2023-02-01 12:30:28 -07:00
|
|
|
SDL_bool fullscreen_exclusive;
|
Windows default to fullscreen desktop mode if they don't pick an explicit video mode
Rather than iterating over display modes using an index, there is a new function SDL_GetFullscreenDisplayModes() to get the list of available fullscreen modes on a display.
{
SDL_DisplayID display = SDL_GetPrimaryDisplay();
int num_modes = 0;
SDL_DisplayMode **modes = SDL_GetFullscreenDisplayModes(display, &num_modes);
if (modes) {
for (i = 0; i < num_modes; ++i) {
SDL_DisplayMode *mode = modes[i];
SDL_Log("Display %" SDL_PRIu32 " mode %d: %dx%d@%gHz, %d%% scale\n",
display, i, mode->pixel_w, mode->pixel_h, mode->refresh_rate, (int)(mode->display_scale * 100.0f));
}
SDL_free(modes);
}
}
SDL_GetDesktopDisplayMode() and SDL_GetCurrentDisplayMode() return pointers to display modes rather than filling in application memory.
Windows now have an explicit fullscreen mode that is set, using SDL_SetWindowFullscreenMode(). The fullscreen mode for a window can be queried with SDL_GetWindowFullscreenMode(), which returns a pointer to the mode, or NULL if the window will be fullscreen desktop. SDL_SetWindowFullscreen() just takes a boolean value, setting the correct fullscreen state based on the selected mode.
2023-01-31 22:23:14 -07:00
|
|
|
SDL_DisplayMode fullscreen_mode;
|
2015-06-21 09:33:46 -06:00
|
|
|
int num_windows;
|
|
|
|
SDL_Window **windows;
|
|
|
|
|
|
|
|
/* Renderer info */
|
|
|
|
const char *renderdriver;
|
|
|
|
Uint32 render_flags;
|
|
|
|
SDL_bool skip_renderer;
|
|
|
|
SDL_Renderer **renderers;
|
|
|
|
SDL_Texture **targets;
|
|
|
|
|
|
|
|
/* Audio info */
|
|
|
|
const char *audiodriver;
|
|
|
|
SDL_AudioSpec audiospec;
|
2023-01-05 01:57:14 -07:00
|
|
|
SDL_AudioDeviceID audio_id;
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
/* GL settings */
|
|
|
|
int gl_red_size;
|
|
|
|
int gl_green_size;
|
|
|
|
int gl_blue_size;
|
|
|
|
int gl_alpha_size;
|
|
|
|
int gl_buffer_size;
|
|
|
|
int gl_depth_size;
|
|
|
|
int gl_stencil_size;
|
|
|
|
int gl_double_buffer;
|
|
|
|
int gl_accum_red_size;
|
|
|
|
int gl_accum_green_size;
|
|
|
|
int gl_accum_blue_size;
|
|
|
|
int gl_accum_alpha_size;
|
|
|
|
int gl_stereo;
|
|
|
|
int gl_multisamplebuffers;
|
|
|
|
int gl_multisamplesamples;
|
|
|
|
int gl_retained_backing;
|
|
|
|
int gl_accelerated;
|
|
|
|
int gl_major_version;
|
|
|
|
int gl_minor_version;
|
|
|
|
int gl_debug;
|
|
|
|
int gl_profile_mask;
|
2021-11-28 09:54:18 -07:00
|
|
|
|
2023-03-15 17:39:25 -06:00
|
|
|
/* Mouse info */
|
2021-11-28 09:54:18 -07:00
|
|
|
SDL_Rect confine;
|
|
|
|
|
2015-06-21 09:33:46 -06:00
|
|
|
} SDLTest_CommonState;
|
|
|
|
|
2022-12-22 09:38:59 -07:00
|
|
|
#include <SDL3/SDL_begin_code.h>
|
2015-06-21 09:33:46 -06:00
|
|
|
/* Set up for C function definitions, even when using C++ */
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/* Function prototypes */
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief Parse command line parameters and create common state.
|
|
|
|
*
|
|
|
|
* \param argv Array of command line parameters
|
|
|
|
* \param flags Flags indicating which subsystem to initialize (i.e. SDL_INIT_VIDEO | SDL_INIT_AUDIO)
|
|
|
|
*
|
2021-07-14 12:15:30 -06:00
|
|
|
* \returns a newly allocated common state object.
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
|
|
|
SDLTest_CommonState *SDLTest_CommonCreateState(char **argv, Uint32 flags);
|
|
|
|
|
2023-03-15 17:39:25 -06:00
|
|
|
/**
|
|
|
|
* \brief Free the common state object.
|
|
|
|
*
|
|
|
|
* \param state The common state object to destroy
|
|
|
|
*/
|
|
|
|
void SDLTest_CommonDestroyState(SDLTest_CommonState *state);
|
|
|
|
|
2015-06-21 09:33:46 -06:00
|
|
|
/**
|
|
|
|
* \brief Process one common argument.
|
|
|
|
*
|
|
|
|
* \param state The common state describing the test window to create.
|
|
|
|
* \param index The index of the argument to process in argv[].
|
|
|
|
*
|
2021-07-14 12:15:30 -06:00
|
|
|
* \returns the number of arguments processed (i.e. 1 for --fullscreen, 2 for --video [videodriver], or -1 on error.
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
2023-01-04 17:22:40 -07:00
|
|
|
int SDLTest_CommonArg(SDLTest_CommonState *state, int index);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2019-05-28 15:39:13 -06:00
|
|
|
|
2015-06-21 09:33:46 -06:00
|
|
|
/**
|
2019-05-28 15:39:13 -06:00
|
|
|
* \brief Logs command line usage info.
|
2015-06-21 09:33:46 -06:00
|
|
|
*
|
2019-05-28 15:39:13 -06:00
|
|
|
* This logs the appropriate command line options for the subsystems in use
|
|
|
|
* plus other common options, and then any application-specific options.
|
|
|
|
* This uses the SDL_Log() function and splits up output to be friendly to
|
|
|
|
* 80-character-wide terminals.
|
2015-06-21 09:33:46 -06:00
|
|
|
*
|
2019-05-28 15:39:13 -06:00
|
|
|
* \param state The common state describing the test window for the app.
|
|
|
|
* \param argv0 argv[0], as passed to main/SDL_main.
|
|
|
|
* \param options an array of strings for application specific options. The last element of the array should be NULL.
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
2023-01-04 17:22:40 -07:00
|
|
|
void SDLTest_CommonLogUsage(SDLTest_CommonState *state, const char *argv0, const char **options);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief Open test window.
|
|
|
|
*
|
|
|
|
* \param state The common state describing the test window to create.
|
|
|
|
*
|
2021-07-14 12:15:30 -06:00
|
|
|
* \returns SDL_TRUE if initialization succeeded, false otherwise
|
2015-06-21 09:33:46 -06:00
|
|
|
*/
|
2023-01-04 17:22:40 -07:00
|
|
|
SDL_bool SDLTest_CommonInit(SDLTest_CommonState *state);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2019-05-18 23:45:15 -06:00
|
|
|
/**
|
|
|
|
* \brief Easy argument handling when test app doesn't need any custom args.
|
|
|
|
*
|
|
|
|
* \param state The common state describing the test window to create.
|
|
|
|
* \param argc argc, as supplied to SDL_main
|
|
|
|
* \param argv argv, as supplied to SDL_main
|
|
|
|
*
|
2021-07-14 12:15:30 -06:00
|
|
|
* \returns SDL_FALSE if app should quit, true otherwise.
|
2019-05-18 23:45:15 -06:00
|
|
|
*/
|
2023-01-04 17:22:40 -07:00
|
|
|
SDL_bool SDLTest_CommonDefaultArgs(SDLTest_CommonState *state, const int argc, char **argv);
|
2019-05-18 23:45:15 -06:00
|
|
|
|
2015-06-21 09:33:46 -06:00
|
|
|
/**
|
|
|
|
* \brief Common event handler for test windows.
|
|
|
|
*
|
|
|
|
* \param state The common state used to create test window.
|
|
|
|
* \param event The event to handle.
|
|
|
|
* \param done Flag indicating we are done.
|
|
|
|
*
|
|
|
|
*/
|
2023-01-04 17:22:40 -07:00
|
|
|
void SDLTest_CommonEvent(SDLTest_CommonState *state, SDL_Event *event, int *done);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief Close test window.
|
|
|
|
*
|
|
|
|
* \param state The common state used to create test window.
|
|
|
|
*
|
|
|
|
*/
|
2023-01-04 17:22:40 -07:00
|
|
|
void SDLTest_CommonQuit(SDLTest_CommonState *state);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2021-06-07 18:24:57 -06:00
|
|
|
/**
|
|
|
|
* \brief Draws various window information (position, size, etc.) to the renderer.
|
|
|
|
*
|
|
|
|
* \param renderer The renderer to draw to.
|
|
|
|
* \param window The window whose information should be displayed.
|
2021-11-07 02:48:29 -07:00
|
|
|
* \param usedHeight Returns the height used, so the caller can draw more below.
|
2021-06-07 18:24:57 -06:00
|
|
|
*
|
|
|
|
*/
|
2023-01-04 17:22:40 -07:00
|
|
|
void SDLTest_CommonDrawWindowInfo(SDL_Renderer *renderer, SDL_Window *window, float *usedHeight);
|
2015-06-21 09:33:46 -06:00
|
|
|
|
|
|
|
/* Ends C function definitions when using C++ */
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
2022-12-22 09:38:59 -07:00
|
|
|
#include <SDL3/SDL_close_code.h>
|
2015-06-21 09:33:46 -06:00
|
|
|
|
2016-11-20 22:34:54 -07:00
|
|
|
#endif /* SDL_test_common_h_ */
|