SDL  2.0
SDL_test_common.c File Reference
#include "SDL_config.h"
#include "SDL_test.h"
#include <stdio.h>
+ Include dependency graph for SDL_test_common.c:

Go to the source code of this file.

Macros

#define CASE(X)   case SDL_ORIENTATION_##X: return #X
 
#define AXIS_CASE(ax)   case SDL_CONTROLLER_AXIS_##ax: return #ax
 
#define BUTTON_CASE(btn)   case SDL_CONTROLLER_BUTTON_##btn: return #btn
 

Functions

static void SDL_snprintfcat (SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt,...)
 
SDLTest_CommonStateSDLTest_CommonCreateState (char **argv, Uint32 flags)
 Parse command line parameters and create common state. More...
 
int SDLTest_CommonArg (SDLTest_CommonState *state, int index)
 Process one common argument. More...
 
void SDLTest_CommonLogUsage (SDLTest_CommonState *state, const char *argv0, const char **options)
 Logs command line usage info. More...
 
static const char * BuildCommonUsageString (char **pstr, const char **strlist, const int numitems, const char **strlist2, const int numitems2)
 
const char * SDLTest_CommonUsage (SDLTest_CommonState *state)
 Returns common usage information. More...
 
SDL_bool SDLTest_CommonDefaultArgs (SDLTest_CommonState *state, const int argc, char **argv)
 Easy argument handling when test app doesn't need any custom args. More...
 
static void SDLTest_PrintRendererFlag (char *text, size_t maxlen, Uint32 flag)
 
static void SDLTest_PrintPixelFormat (char *text, size_t maxlen, Uint32 format)
 
static void SDLTest_PrintRenderer (SDL_RendererInfo *info)
 
static SDL_SurfaceSDLTest_LoadIcon (const char *file)
 
static SDL_HitTestResult SDLTest_ExampleHitTestCallback (SDL_Window *win, const SDL_Point *area, void *data)
 
SDL_bool SDLTest_CommonInit (SDLTest_CommonState *state)
 Open test window. More...
 
static const char * DisplayOrientationName (int orientation)
 
static const char * ControllerAxisName (const SDL_GameControllerAxis axis)
 
static const char * ControllerButtonName (const SDL_GameControllerButton button)
 
static void SDLTest_PrintEvent (SDL_Event *event)
 
static void SDLTest_ScreenShot (SDL_Renderer *renderer)
 
static void FullscreenTo (int index, int windowId)
 
void SDLTest_CommonEvent (SDLTest_CommonState *state, SDL_Event *event, int *done)
 Common event handler for test windows. More...
 
void SDLTest_CommonQuit (SDLTest_CommonState *state)
 Close test window. More...
 

Variables

static const char * video_usage []
 
static const char * audio_usage []
 
static char * common_usage_video = NULL
 
static char * common_usage_audio = NULL
 
static char * common_usage_videoaudio = NULL
 

Macro Definition Documentation

◆ AXIS_CASE

#define AXIS_CASE (   ax)    case SDL_CONTROLLER_AXIS_##ax: return #ax

◆ BUTTON_CASE

#define BUTTON_CASE (   btn)    case SDL_CONTROLLER_BUTTON_##btn: return #btn

◆ CASE

#define CASE (   X)    case SDL_ORIENTATION_##X: return #X

Function Documentation

◆ BuildCommonUsageString()

static const char* BuildCommonUsageString ( char **  pstr,
const char **  strlist,
const int  numitems,
const char **  strlist2,
const int  numitems2 
)
static

Definition at line 525 of file SDL_test_common.c.

526 {
527  char *str = *pstr;
528  if (!str) {
529  size_t len = SDL_strlen("[--trackmem]") + 2;
530  int i;
531  for (i = 0; i < numitems; i++) {
532  len += SDL_strlen(strlist[i]) + 1;
533  }
534  if (strlist2) {
535  for (i = 0; i < numitems2; i++) {
536  len += SDL_strlen(strlist2[i]) + 1;
537  }
538  }
539  str = (char *) SDL_calloc(1, len);
540  if (!str) {
541  return ""; /* oh well. */
542  }
543  SDL_strlcat(str, "[--trackmem] ", len);
544  for (i = 0; i < numitems-1; i++) {
545  SDL_strlcat(str, strlist[i], len);
546  SDL_strlcat(str, " ", len);
547  }
548  SDL_strlcat(str, strlist[i], len);
549  if (strlist2) {
550  SDL_strlcat(str, " ", len);
551  for (i = 0; i < numitems2-1; i++) {
552  SDL_strlcat(str, strlist2[i], len);
553  SDL_strlcat(str, " ", len);
554  }
555  SDL_strlcat(str, strlist2[i], len);
556  }
557  *pstr = str;
558  }
559  return str;
560 }
#define SDL_strlcat
#define SDL_strlen
#define SDL_calloc
GLenum GLsizei len
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int in i)
Definition: SDL_x11sym.h:50

References i, SDL_calloc, SDL_strlcat, and SDL_strlen.

Referenced by SDLTest_CommonUsage().

◆ ControllerAxisName()

static const char* ControllerAxisName ( const SDL_GameControllerAxis  axis)
static

Definition at line 1186 of file SDL_test_common.c.

1187 {
1188  switch (axis)
1189  {
1190 #define AXIS_CASE(ax) case SDL_CONTROLLER_AXIS_##ax: return #ax
1191  AXIS_CASE(INVALID);
1192  AXIS_CASE(LEFTX);
1193  AXIS_CASE(LEFTY);
1194  AXIS_CASE(RIGHTX);
1195  AXIS_CASE(RIGHTY);
1196  AXIS_CASE(TRIGGERLEFT);
1197  AXIS_CASE(TRIGGERRIGHT);
1198 #undef AXIS_CASE
1199 default: return "???";
1200  }
1201 }
#define AXIS_CASE(ax)
SDL_Texture * axis

References axis, and AXIS_CASE.

Referenced by SDLTest_PrintEvent().

◆ ControllerButtonName()

static const char* ControllerButtonName ( const SDL_GameControllerButton  button)
static

Definition at line 1204 of file SDL_test_common.c.

1205 {
1206  switch (button)
1207  {
1208 #define BUTTON_CASE(btn) case SDL_CONTROLLER_BUTTON_##btn: return #btn
1209  BUTTON_CASE(INVALID);
1210  BUTTON_CASE(A);
1211  BUTTON_CASE(B);
1212  BUTTON_CASE(X);
1213  BUTTON_CASE(Y);
1214  BUTTON_CASE(BACK);
1215  BUTTON_CASE(GUIDE);
1216  BUTTON_CASE(START);
1217  BUTTON_CASE(LEFTSTICK);
1218  BUTTON_CASE(RIGHTSTICK);
1219  BUTTON_CASE(LEFTSHOULDER);
1220  BUTTON_CASE(RIGHTSHOULDER);
1221  BUTTON_CASE(DPAD_UP);
1222  BUTTON_CASE(DPAD_DOWN);
1223  BUTTON_CASE(DPAD_LEFT);
1224  BUTTON_CASE(DPAD_RIGHT);
1225 #undef BUTTON_CASE
1226 default: return "???";
1227  }
1228 }
#define BUTTON_CASE(btn)
set set set set set set set set set set set set set set set set set set set set *set set set macro pixldst op &r &cond WK op &r &cond WK op &r &cond WK else op &m &cond &ia op &r &cond WK else op &m &cond &ia elseif elseif else error unsupported base if elseif elseif else error unsupported unaligned pixldst unaligned endm macro pixst base base else pixldst base endif endm macro PF base if bpp PF set rept prefetch_distance PF set OFFSET endr endif endm macro preload_leading_step2 base if bpp ifc DST PF PF else if bpp lsl PF PF lsl PF PF lsl PF PF PF else PF lsl PF lsl PF lsl PF endif SIZE macro preload_middle scratch_holds_offset if bpp if else PF PF endif endif endif endm macro preload_trailing base if bpp if bpp *pix_per_block PF PF lsl PF PF PF PF PF else PF lsl PF lsl PF PF PF PF PF base if bpp if narrow_case &&bpp<=dst_w_bpp) PF bic, WK0, base, #31 PF pld,[WK0] PF add, WK1, base, X, LSL #bpp_shift PF sub, WK1, WK1, #1 PF bic, WK1, WK1, #31 PF cmp, WK1, WK0 PF beq, 90f PF pld,[WK1]90:.else PF bic, WK0, base, #31 PF pld,[WK0] PF add, WK1, base, X, lsl #bpp_shift PF sub, WK1, WK1, #1 PF bic, WK1, WK1, #31 PF cmp, WK1, WK0 PF beq, 92f91:PF add, WK0, WK0, #32 PF cmp, WK0, WK1 PF pld,[WK0] PF bne, 91b92:.endif .endif.endm.macro conditional_process1_helper cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx process_head cond, numbytes, firstreg, unaligned_src, unaligned_mask, 0 .if decrementx sub &cond X, X, #8 *numbytes/dst_w_bpp .endif process_tail cond, numbytes, firstreg .if !((flags) &FLAG_PROCESS_DOES_STORE) pixst cond, numbytes, firstreg, DST .endif.endm.macro conditional_process1 cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx .if(flags) &FLAG_BRANCH_OVER .ifc cond, mi bpl 100f .endif .ifc cond, cs bcc 100f .endif .ifc cond, ne beq 100f .endif conditional_process1_helper, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx100:.else conditional_process1_helper cond, process_head, process_tail, numbytes, firstreg, unaligned_src, unaligned_mask, decrementx .endif.endm.macro conditional_process2 test, cond1, cond2, process_head, process_tail, numbytes1, numbytes2, firstreg1, firstreg2, unaligned_src, unaligned_mask, decrementx .if(flags) &(FLAG_DST_READWRITE|FLAG_BRANCH_OVER|FLAG_PROCESS_CORRUPTS_PSR|FLAG_PROCESS_DOES_STORE) test conditional_process1 cond1, process_head, process_tail, numbytes1, firstreg1, unaligned_src, unaligned_mask, decrementx .if(flags) &FLAG_PROCESS_CORRUPTS_PSR test .endif conditional_process1 cond2, process_head, process_tail, numbytes2, firstreg2, unaligned_src, unaligned_mask, decrementx .else test process_head cond1, numbytes1, firstreg1, unaligned_src, unaligned_mask, 0 process_head cond2, numbytes2, firstreg2, unaligned_src, unaligned_mask, 0 .if decrementx sub &cond1 X, X, #8 *numbytes1/dst_w_bpp sub &cond2 X, X, #8 *numbytes2/dst_w_bpp .endif process_tail cond1, numbytes1, firstreg1 process_tail cond2, numbytes2, firstreg2 pixst cond1, numbytes1, firstreg1, DST pixst cond2, numbytes2, firstreg2, DST .endif.endm.macro test_bits_1_0_ptr .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 movs SCRATCH, X, lsl #32-1 .else movs SCRATCH, WK0, lsl #32-1 .endif.endm.macro test_bits_3_2_ptr .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 movs SCRATCH, X, lsl #32-3 .else movs SCRATCH, WK0, lsl #32-3 .endif.endm.macro leading_15bytes process_head, process_tail .set DECREMENT_X, 1 .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 .set DECREMENT_X, 0 sub X, X, WK0, lsr #dst_bpp_shift str X,[sp, #LINE_SAVED_REG_COUNT *4] mov X, WK0 .endif .if dst_w_bpp==8 conditional_process2 test_bits_1_0_ptr, mi, cs, process_head, process_tail, 1, 2, 1, 2, 1, 1, DECREMENT_X .elseif dst_w_bpp==16 test_bits_1_0_ptr conditional_process1 cs, process_head, process_tail, 2, 2, 1, 1, DECREMENT_X .endif conditional_process2 test_bits_3_2_ptr, mi, cs, process_head, process_tail, 4, 8, 1, 2, 1, 1, DECREMENT_X .if(flags) &FLAG_PROCESS_CORRUPTS_WK0 ldr X,[sp, #LINE_SAVED_REG_COUNT *4] .endif.endm.macro test_bits_3_2_pix movs SCRATCH, X, lsl #dst_bpp_shift+32-3.endm.macro test_bits_1_0_pix .if dst_w_bpp==8 movs SCRATCH, X, lsl #dst_bpp_shift+32-1 .else movs SCRATCH, X, lsr #1 .endif.endm.macro trailing_15bytes process_head, process_tail, unaligned_src, unaligned_mask conditional_process2 test_bits_3_2_pix, cs, mi, process_head, process_tail, 8, 4, 0, 2, unaligned_src, unaligned_mask, 0 .if dst_w_bpp==16 test_bits_1_0_pix conditional_process1 cs, process_head, process_tail, 2, 0, unaligned_src, unaligned_mask, 0 .elseif dst_w_bpp==8 conditional_process2 test_bits_1_0_pix, cs, mi, process_head, process_tail, 2, 1, 0, 1, unaligned_src, unaligned_mask, 0 .endif.endm.macro wide_case_inner_loop process_head, process_tail, unaligned_src, unaligned_mask, dst_alignment110:.set SUBBLOCK, 0 .rept pix_per_block *dst_w_bpp/128 process_head, 16, 0, unaligned_src, unaligned_mask, 1 .if(src_bpp > 0) &&(mask_bpp==0) &&((flags) &FLAG_PROCESS_PRESERVES_SCRATCH) preload_middle src_bpp, SRC, 1 .elseif(src_bpp==0) &&(mask_bpp > 0) &&((flags) &FLAG_PROCESS_PRESERVES_SCRATCH) preload_middle mask_bpp, MASK, 1 .else preload_middle src_bpp, SRC, 0 preload_middle mask_bpp, MASK, 0 .endif .if(dst_r_bpp > 0) &&((SUBBLOCK % 2)==0) &&(((flags) &FLAG_NO_PRELOAD_DST)==0) PF pld,[DST, #32 *prefetch_distance - dst_alignment] .endif process_tail, 16, 0 .if !((flags) &FLAG_PROCESS_DOES_STORE) pixst, 16, 0, DST .endif .set SUBBLOCK, SUBBLOCK+1 .endr subs X, X, #pix_per_block bhs 110b.endm.macro wide_case_inner_loop_and_trailing_pixels process_head, process_tail, process_inner_loop, exit_label, unaligned_src, unaligned_mask .if dst_r_bpp > tst bne process_inner_loop DST_PRELOAD_BIAS endif preload_trailing SRC preload_trailing MASK DST endif add medium_case_inner_loop_and_trailing_pixels unaligned_mask endm macro medium_case_inner_loop_and_trailing_pixels DST endif subs bhs tst beq exit_label trailing_15bytes unaligned_mask endm macro narrow_case_inner_loop_and_trailing_pixels unaligned_mask tst conditional_process1 trailing_15bytes unaligned_mask endm macro switch_on_alignment exit_label if bne endif if bne endif action if endif if bne endif action if endif endif endm macro end_of_line last_one if SINGLE_SCANLINE ifc b endif else if vars_spilled word LINE_SAVED_REGS endif subs Y
set set set set set set set set set set set set set set set set set set set set *set set set macro pixldst op &r &cond WK op &r &cond WK op &r &cond WK else op &m &cond &ia op &r &cond WK else op &m &cond &ia elseif elseif else error unsupported base if elseif elseif else error unsupported unaligned pixldst unaligned endm macro pixst base base else pixldst base endif endm macro PF base if bpp PF set rept prefetch_distance PF set OFFSET endr endif endm macro preload_leading_step2 base if bpp ifc DST PF PF else if bpp lsl PF PF lsl PF PF lsl PF PF PF else PF lsl PF lsl PF lsl PF endif SIZE macro preload_middle scratch_holds_offset if bpp if else PF PF endif endif endif endm macro preload_trailing base if bpp if bpp *pix_per_block PF PF lsl PF PF PF PF PF else PF lsl PF X
SDL_Texture * button

References button, BUTTON_CASE, X, and Y.

Referenced by SDLTest_PrintEvent().

◆ DisplayOrientationName()

static const char* DisplayOrientationName ( int  orientation)
static

Definition at line 1170 of file SDL_test_common.c.

1171 {
1172  switch (orientation)
1173  {
1174 #define CASE(X) case SDL_ORIENTATION_##X: return #X
1175  CASE(UNKNOWN);
1176  CASE(LANDSCAPE);
1177  CASE(LANDSCAPE_FLIPPED);
1178  CASE(PORTRAIT);
1179  CASE(PORTRAIT_FLIPPED);
1180 #undef CASE
1181 default: return "???";
1182  }
1183 }
#define CASE(X)

References CASE.

Referenced by SDLTest_PrintEvent().

◆ FullscreenTo()

static void FullscreenTo ( int  index,
int  windowId 
)
static

Definition at line 1559 of file SDL_test_common.c.

1560 {
1561  Uint32 flags;
1562  struct SDL_Rect rect = { 0, 0, 0, 0 };
1563  SDL_Window *window = SDL_GetWindowFromID(windowId);
1564  if (!window) {
1565  return;
1566  }
1567 
1569 
1571  if (flags & SDL_WINDOW_FULLSCREEN) {
1573  SDL_Delay( 15 );
1574  }
1575 
1578 }
#define SDL_SetWindowFullscreen
#define SDL_GetWindowFlags
#define SDL_SetWindowPosition
#define SDL_GetWindowFromID
#define SDL_Delay
#define SDL_GetDisplayBounds
GLuint index
GLbitfield flags
@ SDL_TRUE
Definition: SDL_stdinc.h:170
@ SDL_FALSE
Definition: SDL_stdinc.h:169
uint32_t Uint32
Definition: SDL_stdinc.h:209
@ SDL_WINDOW_FULLSCREEN
Definition: SDL_video.h:99
EGLSurface EGLNativeWindowType * window
Definition: eglext.h:1025
A rectangle, with the origin at the upper left (integer).
Definition: SDL_rect.h:78
int y
Definition: SDL_rect.h:79
int x
Definition: SDL_rect.h:79
The type used to identify a window.
Definition: SDL_sysvideo.h:75
SDL_Rect rect
Definition: testrelative.c:27

References rect, SDL_Delay, SDL_FALSE, SDL_GetDisplayBounds, SDL_GetWindowFlags, SDL_GetWindowFromID, SDL_SetWindowFullscreen, SDL_SetWindowPosition, SDL_TRUE, SDL_WINDOW_FULLSCREEN, SDL_Rect::x, and SDL_Rect::y.

Referenced by SDLTest_CommonEvent().

◆ SDL_snprintfcat()

static void SDL_snprintfcat ( SDL_OUT_Z_CAP(maxlen) char *  text,
size_t  maxlen,
SDL_PRINTF_FORMAT_STRING const char *  fmt,
  ... 
)
static

Definition at line 46 of file SDL_test_common.c.

47 {
48  size_t length = SDL_strlen(text);
49  va_list ap;
50 
51  va_start(ap, fmt);
52  text += length;
53  maxlen -= length;
54  SDL_vsnprintf(text, maxlen, fmt, ap);
55  va_end(ap);
56 }
#define SDL_vsnprintf
GLuint GLsizei GLsizei * length
static char text[MAX_TEXT_LENGTH]
Definition: testime.c:47

References SDL_strlen, SDL_vsnprintf, and text.

Referenced by SDLTest_CommonInit(), SDLTest_PrintPixelFormat(), SDLTest_PrintRenderer(), and SDLTest_PrintRendererFlag().

◆ SDLTest_CommonArg()

int SDLTest_CommonArg ( SDLTest_CommonState state,
int  index 
)

Process one common argument.

Parameters
stateThe common state describing the test window to create.
indexThe index of the argument to process in argv[].
Returns
The number of arguments processed (i.e. 1 for –fullscreen, 2 for –video [videodriver], or -1 on error.

Definition at line 117 of file SDL_test_common.c.

118 {
119  char **argv = state->argv;
120 
121  if (SDL_strcasecmp(argv[index], "--video") == 0) {
122  ++index;
123  if (!argv[index]) {
124  return -1;
125  }
126  state->videodriver = argv[index];
127  return 2;
128  }
129  if (SDL_strcasecmp(argv[index], "--renderer") == 0) {
130  ++index;
131  if (!argv[index]) {
132  return -1;
133  }
134  state->renderdriver = argv[index];
135  return 2;
136  }
137  if (SDL_strcasecmp(argv[index], "--gldebug") == 0) {
138  state->gl_debug = 1;
139  return 1;
140  }
141  if (SDL_strcasecmp(argv[index], "--info") == 0) {
142  ++index;
143  if (!argv[index]) {
144  return -1;
145  }
146  if (SDL_strcasecmp(argv[index], "all") == 0) {
147  state->verbose |=
149  VERBOSE_EVENT);
150  return 2;
151  }
152  if (SDL_strcasecmp(argv[index], "video") == 0) {
153  state->verbose |= VERBOSE_VIDEO;
154  return 2;
155  }
156  if (SDL_strcasecmp(argv[index], "modes") == 0) {
157  state->verbose |= VERBOSE_MODES;
158  return 2;
159  }
160  if (SDL_strcasecmp(argv[index], "render") == 0) {
161  state->verbose |= VERBOSE_RENDER;
162  return 2;
163  }
164  if (SDL_strcasecmp(argv[index], "event") == 0) {
165  state->verbose |= VERBOSE_EVENT;
166  return 2;
167  }
168  return -1;
169  }
170  if (SDL_strcasecmp(argv[index], "--log") == 0) {
171  ++index;
172  if (!argv[index]) {
173  return -1;
174  }
175  if (SDL_strcasecmp(argv[index], "all") == 0) {
177  return 2;
178  }
179  if (SDL_strcasecmp(argv[index], "error") == 0) {
181  return 2;
182  }
183  if (SDL_strcasecmp(argv[index], "system") == 0) {
185  return 2;
186  }
187  if (SDL_strcasecmp(argv[index], "audio") == 0) {
189  return 2;
190  }
191  if (SDL_strcasecmp(argv[index], "video") == 0) {
193  return 2;
194  }
195  if (SDL_strcasecmp(argv[index], "render") == 0) {
197  return 2;
198  }
199  if (SDL_strcasecmp(argv[index], "input") == 0) {
201  return 2;
202  }
203  return -1;
204  }
205  if (SDL_strcasecmp(argv[index], "--display") == 0) {
206  ++index;
207  if (!argv[index]) {
208  return -1;
209  }
210  state->display = SDL_atoi(argv[index]);
211  if (SDL_WINDOWPOS_ISUNDEFINED(state->window_x)) {
212  state->window_x = SDL_WINDOWPOS_UNDEFINED_DISPLAY(state->display);
213  state->window_y = SDL_WINDOWPOS_UNDEFINED_DISPLAY(state->display);
214  }
215  if (SDL_WINDOWPOS_ISCENTERED(state->window_x)) {
216  state->window_x = SDL_WINDOWPOS_CENTERED_DISPLAY(state->display);
217  state->window_y = SDL_WINDOWPOS_CENTERED_DISPLAY(state->display);
218  }
219  return 2;
220  }
221  if (SDL_strcasecmp(argv[index], "--fullscreen") == 0) {
222  state->window_flags |= SDL_WINDOW_FULLSCREEN;
223  state->num_windows = 1;
224  return 1;
225  }
226  if (SDL_strcasecmp(argv[index], "--fullscreen-desktop") == 0) {
227  state->window_flags |= SDL_WINDOW_FULLSCREEN_DESKTOP;
228  state->num_windows = 1;
229  return 1;
230  }
231  if (SDL_strcasecmp(argv[index], "--allow-highdpi") == 0) {
232  state->window_flags |= SDL_WINDOW_ALLOW_HIGHDPI;
233  return 1;
234  }
235  if (SDL_strcasecmp(argv[index], "--windows") == 0) {
236  ++index;
237  if (!argv[index] || !SDL_isdigit(*argv[index])) {
238  return -1;
239  }
240  if (!(state->window_flags & SDL_WINDOW_FULLSCREEN)) {
241  state->num_windows = SDL_atoi(argv[index]);
242  }
243  return 2;
244  }
245  if (SDL_strcasecmp(argv[index], "--title") == 0) {
246  ++index;
247  if (!argv[index]) {
248  return -1;
249  }
250  state->window_title = argv[index];
251  return 2;
252  }
253  if (SDL_strcasecmp(argv[index], "--icon") == 0) {
254  ++index;
255  if (!argv[index]) {
256  return -1;
257  }
258  state->window_icon = argv[index];
259  return 2;
260  }
261  if (SDL_strcasecmp(argv[index], "--center") == 0) {
262  state->window_x = SDL_WINDOWPOS_CENTERED;
263  state->window_y = SDL_WINDOWPOS_CENTERED;
264  return 1;
265  }
266  if (SDL_strcasecmp(argv[index], "--position") == 0) {
267  char *x, *y;
268  ++index;
269  if (!argv[index]) {
270  return -1;
271  }
272  x = argv[index];
273  y = argv[index];
274  while (*y && *y != ',') {
275  ++y;
276  }
277  if (!*y) {
278  return -1;
279  }
280  *y++ = '\0';
281  state->window_x = SDL_atoi(x);
282  state->window_y = SDL_atoi(y);
283  return 2;
284  }
285  if (SDL_strcasecmp(argv[index], "--usable-bounds") == 0) {
286  /* !!! FIXME: this is a bit of a hack, but I don't want to add a
287  !!! FIXME: flag to the public structure in 2.0.x */
288  state->window_x = -1;
289  state->window_y = -1;
290  state->window_w = -1;
291  state->window_h = -1;
292  return 1;
293  }
294  if (SDL_strcasecmp(argv[index], "--geometry") == 0) {
295  char *w, *h;
296  ++index;
297  if (!argv[index]) {
298  return -1;
299  }
300  w = argv[index];
301  h = argv[index];
302  while (*h && *h != 'x') {
303  ++h;
304  }
305  if (!*h) {
306  return -1;
307  }
308  *h++ = '\0';
309  state->window_w = SDL_atoi(w);
310  state->window_h = SDL_atoi(h);
311  return 2;
312  }
313  if (SDL_strcasecmp(argv[index], "--min-geometry") == 0) {
314  char *w, *h;
315  ++index;
316  if (!argv[index]) {
317  return -1;
318  }
319  w = argv[index];
320  h = argv[index];
321  while (*h && *h != 'x') {
322  ++h;
323  }
324  if (!*h) {
325  return -1;
326  }
327  *h++ = '\0';
328  state->window_minW = SDL_atoi(w);
329  state->window_minH = SDL_atoi(h);
330  return 2;
331  }
332  if (SDL_strcasecmp(argv[index], "--max-geometry") == 0) {
333  char *w, *h;
334  ++index;
335  if (!argv[index]) {
336  return -1;
337  }
338  w = argv[index];
339  h = argv[index];
340  while (*h && *h != 'x') {
341  ++h;
342  }
343  if (!*h) {
344  return -1;
345  }
346  *h++ = '\0';
347  state->window_maxW = SDL_atoi(w);
348  state->window_maxH = SDL_atoi(h);
349  return 2;
350  }
351  if (SDL_strcasecmp(argv[index], "--logical") == 0) {
352  char *w, *h;
353  ++index;
354  if (!argv[index]) {
355  return -1;
356  }
357  w = argv[index];
358  h = argv[index];
359  while (*h && *h != 'x') {
360  ++h;
361  }
362  if (!*h) {
363  return -1;
364  }
365  *h++ = '\0';
366  state->logical_w = SDL_atoi(w);
367  state->logical_h = SDL_atoi(h);
368  return 2;
369  }
370  if (SDL_strcasecmp(argv[index], "--scale") == 0) {
371  ++index;
372  if (!argv[index]) {
373  return -1;
374  }
375  state->scale = (float)SDL_atof(argv[index]);
376  return 2;
377  }
378  if (SDL_strcasecmp(argv[index], "--depth") == 0) {
379  ++index;
380  if (!argv[index]) {
381  return -1;
382  }
383  state->depth = SDL_atoi(argv[index]);
384  return 2;
385  }
386  if (SDL_strcasecmp(argv[index], "--refresh") == 0) {
387  ++index;
388  if (!argv[index]) {
389  return -1;
390  }
391  state->refresh_rate = SDL_atoi(argv[index]);
392  return 2;
393  }
394  if (SDL_strcasecmp(argv[index], "--vsync") == 0) {
395  state->render_flags |= SDL_RENDERER_PRESENTVSYNC;
396  return 1;
397  }
398  if (SDL_strcasecmp(argv[index], "--noframe") == 0) {
399  state->window_flags |= SDL_WINDOW_BORDERLESS;
400  return 1;
401  }
402  if (SDL_strcasecmp(argv[index], "--resize") == 0) {
403  state->window_flags |= SDL_WINDOW_RESIZABLE;
404  return 1;
405  }
406  if (SDL_strcasecmp(argv[index], "--minimize") == 0) {
407  state->window_flags |= SDL_WINDOW_MINIMIZED;
408  return 1;
409  }
410  if (SDL_strcasecmp(argv[index], "--maximize") == 0) {
411  state->window_flags |= SDL_WINDOW_MAXIMIZED;
412  return 1;
413  }
414  if (SDL_strcasecmp(argv[index], "--grab") == 0) {
415  state->window_flags |= SDL_WINDOW_INPUT_GRABBED;
416  return 1;
417  }
418  if (SDL_strcasecmp(argv[index], "--rate") == 0) {
419  ++index;
420  if (!argv[index]) {
421  return -1;
422  }
423  state->audiospec.freq = SDL_atoi(argv[index]);
424  return 2;
425  }
426  if (SDL_strcasecmp(argv[index], "--format") == 0) {
427  ++index;
428  if (!argv[index]) {
429  return -1;
430  }
431  if (SDL_strcasecmp(argv[index], "U8") == 0) {
432  state->audiospec.format = AUDIO_U8;
433  return 2;
434  }
435  if (SDL_strcasecmp(argv[index], "S8") == 0) {
436  state->audiospec.format = AUDIO_S8;
437  return 2;
438  }
439  if (SDL_strcasecmp(argv[index], "U16") == 0) {
440  state->audiospec.format = AUDIO_U16;
441  return 2;
442  }
443  if (SDL_strcasecmp(argv[index], "U16LE") == 0) {
444  state->audiospec.format = AUDIO_U16LSB;
445  return 2;
446  }
447  if (SDL_strcasecmp(argv[index], "U16BE") == 0) {
448  state->audiospec.format = AUDIO_U16MSB;
449  return 2;
450  }
451  if (SDL_strcasecmp(argv[index], "S16") == 0) {
452  state->audiospec.format = AUDIO_S16;
453  return 2;
454  }
455  if (SDL_strcasecmp(argv[index], "S16LE") == 0) {
456  state->audiospec.format = AUDIO_S16LSB;
457  return 2;
458  }
459  if (SDL_strcasecmp(argv[index], "S16BE") == 0) {
460  state->audiospec.format = AUDIO_S16MSB;
461  return 2;
462  }
463  return -1;
464  }
465  if (SDL_strcasecmp(argv[index], "--channels") == 0) {
466  ++index;
467  if (!argv[index]) {
468  return -1;
469  }
470  state->audiospec.channels = (Uint8) SDL_atoi(argv[index]);
471  return 2;
472  }
473  if (SDL_strcasecmp(argv[index], "--samples") == 0) {
474  ++index;
475  if (!argv[index]) {
476  return -1;
477  }
478  state->audiospec.samples = (Uint16) SDL_atoi(argv[index]);
479  return 2;
480  }
481  if (SDL_strcasecmp(argv[index], "--trackmem") == 0) {
482  /* Already handled in SDLTest_CommonCreateState() */
483  return 1;
484  }
485  if ((SDL_strcasecmp(argv[index], "-h") == 0)
486  || (SDL_strcasecmp(argv[index], "--help") == 0)) {
487  /* Print the usage message */
488  return -1;
489  }
490  if (SDL_strcmp(argv[index], "-NSDocumentRevisionsDebugMode") == 0) {
491  /* Debug flag sent by Xcode */
492  return 2;
493  }
494  return 0;
495 }
#define AUDIO_U16LSB
Definition: SDL_audio.h:91
#define AUDIO_S16LSB
Definition: SDL_audio.h:92
#define AUDIO_S16MSB
Definition: SDL_audio.h:94
#define AUDIO_U16MSB
Definition: SDL_audio.h:93
#define AUDIO_S16
Definition: SDL_audio.h:96
#define AUDIO_U8
Definition: SDL_audio.h:89
#define AUDIO_S8
Definition: SDL_audio.h:90
#define AUDIO_U16
Definition: SDL_audio.h:95
#define SDL_isdigit
#define SDL_LogSetAllPriority
#define SDL_atof
#define SDL_strcasecmp
#define SDL_LogSetPriority
#define SDL_strcmp
#define SDL_atoi
@ SDL_LOG_PRIORITY_VERBOSE
Definition: SDL_log.h:104
@ SDL_LOG_CATEGORY_ERROR
Definition: SDL_log.h:67
@ SDL_LOG_CATEGORY_RENDER
Definition: SDL_log.h:72
@ SDL_LOG_CATEGORY_INPUT
Definition: SDL_log.h:73
@ SDL_LOG_CATEGORY_SYSTEM
Definition: SDL_log.h:69
@ SDL_LOG_CATEGORY_AUDIO
Definition: SDL_log.h:70
@ SDL_LOG_CATEGORY_VIDEO
Definition: SDL_log.h:71
GLint GLint GLint GLint GLint GLint y
Definition: SDL_opengl.h:1574
GLint GLint GLint GLint GLint x
Definition: SDL_opengl.h:1574
GLfloat GLfloat GLfloat GLfloat h
GLubyte GLubyte GLubyte GLubyte w
@ SDL_RENDERER_PRESENTVSYNC
Definition: SDL_render.h:69
uint16_t Uint16
Definition: SDL_stdinc.h:197
uint8_t Uint8
Definition: SDL_stdinc.h:185
#define VERBOSE_MODES
#define VERBOSE_EVENT
#define VERBOSE_RENDER
#define VERBOSE_VIDEO
#define SDL_WINDOWPOS_ISCENTERED(X)
Definition: SDL_video.h:140
#define SDL_WINDOWPOS_UNDEFINED_DISPLAY(X)
Definition: SDL_video.h:129
#define SDL_WINDOWPOS_CENTERED_DISPLAY(X)
Definition: SDL_video.h:138
#define SDL_WINDOWPOS_CENTERED
Definition: SDL_video.h:139
#define SDL_WINDOWPOS_ISUNDEFINED(X)
Definition: SDL_video.h:131
@ SDL_WINDOW_ALLOW_HIGHDPI
Definition: SDL_video.h:112
@ SDL_WINDOW_MINIMIZED
Definition: SDL_video.h:105
@ SDL_WINDOW_INPUT_GRABBED
Definition: SDL_video.h:107
@ SDL_WINDOW_RESIZABLE
Definition: SDL_video.h:104
@ SDL_WINDOW_FULLSCREEN_DESKTOP
Definition: SDL_video.h:110
@ SDL_WINDOW_MAXIMIZED
Definition: SDL_video.h:106
@ SDL_WINDOW_BORDERLESS
Definition: SDL_video.h:103
struct xkb_state * state

References AUDIO_S16, AUDIO_S16LSB, AUDIO_S16MSB, AUDIO_S8, AUDIO_U16, AUDIO_U16LSB, AUDIO_U16MSB, AUDIO_U8, SDL_atof, SDL_atoi, SDL_isdigit, SDL_LOG_CATEGORY_AUDIO, SDL_LOG_CATEGORY_ERROR, SDL_LOG_CATEGORY_INPUT, SDL_LOG_CATEGORY_RENDER, SDL_LOG_CATEGORY_SYSTEM, SDL_LOG_CATEGORY_VIDEO, SDL_LOG_PRIORITY_VERBOSE, SDL_LogSetAllPriority, SDL_LogSetPriority, SDL_RENDERER_PRESENTVSYNC, SDL_strcasecmp, SDL_strcmp, SDL_WINDOW_ALLOW_HIGHDPI, SDL_WINDOW_BORDERLESS, SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSCREEN_DESKTOP, SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_MAXIMIZED, SDL_WINDOW_MINIMIZED, SDL_WINDOW_RESIZABLE, SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED_DISPLAY, SDL_WINDOWPOS_ISCENTERED, SDL_WINDOWPOS_ISUNDEFINED, SDL_WINDOWPOS_UNDEFINED_DISPLAY, state, VERBOSE_EVENT, VERBOSE_MODES, VERBOSE_RENDER, and VERBOSE_VIDEO.

Referenced by main(), and SDLTest_CommonDefaultArgs().

◆ SDLTest_CommonCreateState()

SDLTest_CommonState* SDLTest_CommonCreateState ( char **  argv,
Uint32  flags 
)

Parse command line parameters and create common state.

Parameters
argvArray of command line parameters
flagsFlags indicating which subsystem to initialize (i.e. SDL_INIT_VIDEO | SDL_INIT_AUDIO)
Returns
Returns a newly allocated common state object.

Definition at line 59 of file SDL_test_common.c.

60 {
61  int i;
63 
64  /* Do this first so we catch all allocations */
65  for (i = 1; argv[i]; ++i) {
66  if (SDL_strcasecmp(argv[i], "--trackmem") == 0) {
68  break;
69  }
70  }
71 
72  state = (SDLTest_CommonState *)SDL_calloc(1, sizeof(*state));
73  if (!state) {
75  return NULL;
76  }
77 
78  /* Initialize some defaults */
79  state->argv = argv;
80  state->flags = flags;
81  state->window_title = argv[0];
82  state->window_flags = 0;
83  state->window_x = SDL_WINDOWPOS_UNDEFINED;
84  state->window_y = SDL_WINDOWPOS_UNDEFINED;
85  state->window_w = DEFAULT_WINDOW_WIDTH;
86  state->window_h = DEFAULT_WINDOW_HEIGHT;
87  state->num_windows = 1;
88  state->audiospec.freq = 22050;
89  state->audiospec.format = AUDIO_S16;
90  state->audiospec.channels = 2;
91  state->audiospec.samples = 2048;
92 
93  /* Set some very sane GL defaults */
94  state->gl_red_size = 3;
95  state->gl_green_size = 3;
96  state->gl_blue_size = 2;
97  state->gl_alpha_size = 0;
98  state->gl_buffer_size = 0;
99  state->gl_depth_size = 16;
100  state->gl_stencil_size = 0;
101  state->gl_double_buffer = 1;
102  state->gl_accum_red_size = 0;
103  state->gl_accum_green_size = 0;
104  state->gl_accum_blue_size = 0;
105  state->gl_accum_alpha_size = 0;
106  state->gl_stereo = 0;
107  state->gl_multisamplebuffers = 0;
108  state->gl_multisamplesamples = 0;
109  state->gl_retained_backing = 1;
110  state->gl_accelerated = -1;
111  state->gl_debug = 0;
112 
113  return state;
114 }
#define SDL_OutOfMemory()
Definition: SDL_error.h:88
#define DEFAULT_WINDOW_HEIGHT
#define DEFAULT_WINDOW_WIDTH
int SDLTest_TrackAllocations(void)
Start tracking SDL memory allocations.
#define SDL_WINDOWPOS_UNDEFINED
Definition: SDL_video.h:130
#define NULL
Definition: begin_code.h:163

References AUDIO_S16, DEFAULT_WINDOW_HEIGHT, DEFAULT_WINDOW_WIDTH, i, NULL, SDL_calloc, SDL_OutOfMemory, SDL_strcasecmp, SDL_WINDOWPOS_UNDEFINED, SDLTest_TrackAllocations(), and state.

Referenced by main().

◆ SDLTest_CommonDefaultArgs()

SDL_bool SDLTest_CommonDefaultArgs ( SDLTest_CommonState state,
const int  argc,
char **  argv 
)

Easy argument handling when test app doesn't need any custom args.

Parameters
stateThe common state describing the test window to create.
argcargc, as supplied to SDL_main
argvargv, as supplied to SDL_main
Returns
False if app should quit, true otherwise.

Definition at line 584 of file SDL_test_common.c.

585 {
586  int i = 1;
587  while (i < argc) {
588  const int consumed = SDLTest_CommonArg(state, i);
589  if (consumed == 0) {
590  SDLTest_CommonLogUsage(state, argv[0], NULL);
591  return SDL_FALSE;
592  }
593  i += consumed;
594  }
595  return SDL_TRUE;
596 }
int SDLTest_CommonArg(SDLTest_CommonState *state, int index)
Process one common argument.
void SDLTest_CommonLogUsage(SDLTest_CommonState *state, const char *argv0, const char **options)
Logs command line usage info.

References i, NULL, SDL_FALSE, SDL_TRUE, SDLTest_CommonArg(), SDLTest_CommonLogUsage(), and state.

Referenced by main().

◆ SDLTest_CommonEvent()

void SDLTest_CommonEvent ( SDLTest_CommonState state,
SDL_Event event,
int done 
)

Common event handler for test windows.

Parameters
stateThe common state used to create test window.
eventThe event to handle.
doneFlag indicating we are done.

Definition at line 1581 of file SDL_test_common.c.

1582 {
1583  int i;
1584  static SDL_MouseMotionEvent lastEvent;
1585 
1586  if (state->verbose & VERBOSE_EVENT) {
1588  }
1589 
1590  switch (event->type) {
1591  case SDL_WINDOWEVENT:
1592  switch (event->window.event) {
1593  case SDL_WINDOWEVENT_CLOSE:
1594  {
1595  SDL_Window *window = SDL_GetWindowFromID(event->window.windowID);
1596  if (window) {
1597  for (i = 0; i < state->num_windows; ++i) {
1598  if (window == state->windows[i]) {
1599  if (state->targets[i]) {
1600  SDL_DestroyTexture(state->targets[i]);
1601  state->targets[i] = NULL;
1602  }
1603  if (state->renderers[i]) {
1604  SDL_DestroyRenderer(state->renderers[i]);
1605  state->renderers[i] = NULL;
1606  }
1607  SDL_DestroyWindow(state->windows[i]);
1608  state->windows[i] = NULL;
1609  break;
1610  }
1611  }
1612  }
1613  }
1614  break;
1615  }
1616  break;
1617  case SDL_KEYDOWN: {
1618  SDL_bool withControl = !!(event->key.keysym.mod & KMOD_CTRL);
1619  SDL_bool withShift = !!(event->key.keysym.mod & KMOD_SHIFT);
1620  SDL_bool withAlt = !!(event->key.keysym.mod & KMOD_ALT);
1621 
1622  switch (event->key.keysym.sym) {
1623  /* Add hotkeys here */
1624  case SDLK_PRINTSCREEN: {
1625  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1626  if (window) {
1627  for (i = 0; i < state->num_windows; ++i) {
1628  if (window == state->windows[i]) {
1629  SDLTest_ScreenShot(state->renderers[i]);
1630  }
1631  }
1632  }
1633  }
1634  break;
1635  case SDLK_EQUALS:
1636  if (withControl) {
1637  /* Ctrl-+ double the size of the window */
1638  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1639  if (window) {
1640  int w, h;
1641  SDL_GetWindowSize(window, &w, &h);
1642  SDL_SetWindowSize(window, w*2, h*2);
1643  }
1644  }
1645  break;
1646  case SDLK_MINUS:
1647  if (withControl) {
1648  /* Ctrl-- half the size of the window */
1649  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1650  if (window) {
1651  int w, h;
1652  SDL_GetWindowSize(window, &w, &h);
1653  SDL_SetWindowSize(window, w/2, h/2);
1654  }
1655  }
1656  break;
1657  case SDLK_UP:
1658  case SDLK_DOWN:
1659  case SDLK_LEFT:
1660  case SDLK_RIGHT:
1661  if (withAlt) {
1662  /* Alt-Up/Down/Left/Right switches between displays */
1663  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1664  if (window) {
1665  int currentIndex = SDL_GetWindowDisplayIndex(window);
1666  int numDisplays = SDL_GetNumVideoDisplays();
1667 
1668  if (currentIndex >= 0 && numDisplays >= 1) {
1669  int dest;
1670  if (event->key.keysym.sym == SDLK_UP || event->key.keysym.sym == SDLK_LEFT) {
1671  dest = (currentIndex + numDisplays - 1) % numDisplays;
1672  } else {
1673  dest = (currentIndex + numDisplays + 1) % numDisplays;
1674  }
1675  SDL_Log("Centering on display %d\n", dest);
1679  }
1680  }
1681  }
1682  if (withShift) {
1683  /* Shift-Up/Down/Left/Right shift the window by 100px */
1684  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1685  if (window) {
1686  const int delta = 100;
1687  int x, y;
1689 
1690  if (event->key.keysym.sym == SDLK_UP) y -= delta;
1691  if (event->key.keysym.sym == SDLK_DOWN) y += delta;
1692  if (event->key.keysym.sym == SDLK_LEFT) x -= delta;
1693  if (event->key.keysym.sym == SDLK_RIGHT) x += delta;
1694 
1695  SDL_Log("Setting position to (%d, %d)\n", x, y);
1697  }
1698  }
1699  break;
1700  case SDLK_o:
1701  if (withControl) {
1702  /* Ctrl-O (or Ctrl-Shift-O) changes window opacity. */
1703  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1704  if (window) {
1705  float opacity;
1706  if (SDL_GetWindowOpacity(window, &opacity) == 0) {
1707  if (withShift) {
1708  opacity += 0.20f;
1709  } else {
1710  opacity -= 0.20f;
1711  }
1712  SDL_SetWindowOpacity(window, opacity);
1713  }
1714  }
1715  }
1716  break;
1717 
1718  case SDLK_c:
1719  if (withControl) {
1720  /* Ctrl-C copy awesome text! */
1721  SDL_SetClipboardText("SDL rocks!\nYou know it!");
1722  printf("Copied text to clipboard\n");
1723  }
1724  if (withAlt) {
1725  /* Alt-C toggle a render clip rectangle */
1726  for (i = 0; i < state->num_windows; ++i) {
1727  int w, h;
1728  if (state->renderers[i]) {
1729  SDL_Rect clip;
1730  SDL_GetWindowSize(state->windows[i], &w, &h);
1731  SDL_RenderGetClipRect(state->renderers[i], &clip);
1732  if (SDL_RectEmpty(&clip)) {
1733  clip.x = w/4;
1734  clip.y = h/4;
1735  clip.w = w/2;
1736  clip.h = h/2;
1737  SDL_RenderSetClipRect(state->renderers[i], &clip);
1738  } else {
1739  SDL_RenderSetClipRect(state->renderers[i], NULL);
1740  }
1741  }
1742  }
1743  }
1744  if (withShift) {
1745  SDL_Window *current_win = SDL_GetKeyboardFocus();
1746  if (current_win) {
1747  const SDL_bool shouldCapture = (SDL_GetWindowFlags(current_win) & SDL_WINDOW_MOUSE_CAPTURE) == 0;
1748  const int rc = SDL_CaptureMouse(shouldCapture);
1749  SDL_Log("%sapturing mouse %s!\n", shouldCapture ? "C" : "Unc", (rc == 0) ? "succeeded" : "failed");
1750  }
1751  }
1752  break;
1753  case SDLK_v:
1754  if (withControl) {
1755  /* Ctrl-V paste awesome text! */
1756  char *text = SDL_GetClipboardText();
1757  if (*text) {
1758  printf("Clipboard: %s\n", text);
1759  } else {
1760  printf("Clipboard is empty\n");
1761  }
1762  SDL_free(text);
1763  }
1764  break;
1765  case SDLK_g:
1766  if (withControl) {
1767  /* Ctrl-G toggle grab */
1768  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1769  if (window) {
1771  }
1772  }
1773  break;
1774  case SDLK_m:
1775  if (withControl) {
1776  /* Ctrl-M maximize */
1777  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1778  if (window) {
1780  if (flags & SDL_WINDOW_MAXIMIZED) {
1782  } else {
1784  }
1785  }
1786  }
1787  break;
1788  case SDLK_r:
1789  if (withControl) {
1790  /* Ctrl-R toggle mouse relative mode */
1792  }
1793  break;
1794  case SDLK_z:
1795  if (withControl) {
1796  /* Ctrl-Z minimize */
1797  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1798  if (window) {
1800  }
1801  }
1802  break;
1803  case SDLK_RETURN:
1804  if (withControl) {
1805  /* Ctrl-Enter toggle fullscreen */
1806  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1807  if (window) {
1809  if (flags & SDL_WINDOW_FULLSCREEN) {
1811  } else {
1813  }
1814  }
1815  } else if (withAlt) {
1816  /* Alt-Enter toggle fullscreen desktop */
1817  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1818  if (window) {
1820  if (flags & SDL_WINDOW_FULLSCREEN) {
1822  } else {
1824  }
1825  }
1826  } else if (withShift) {
1827  /* Shift-Enter toggle fullscreen desktop / fullscreen */
1828  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1829  if (window) {
1833  } else {
1835  }
1836  }
1837  }
1838 
1839  break;
1840  case SDLK_b:
1841  if (withControl) {
1842  /* Ctrl-B toggle window border */
1843  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1844  if (window) {
1846  const SDL_bool b = ((flags & SDL_WINDOW_BORDERLESS) != 0) ? SDL_TRUE : SDL_FALSE;
1848  }
1849  }
1850  break;
1851  case SDLK_a:
1852  if (withControl) {
1853  /* Ctrl-A reports absolute mouse position. */
1854  int x, y;
1855  const Uint32 mask = SDL_GetGlobalMouseState(&x, &y);
1856  SDL_Log("ABSOLUTE MOUSE: (%d, %d)%s%s%s%s%s\n", x, y,
1857  (mask & SDL_BUTTON_LMASK) ? " [LBUTTON]" : "",
1858  (mask & SDL_BUTTON_MMASK) ? " [MBUTTON]" : "",
1859  (mask & SDL_BUTTON_RMASK) ? " [RBUTTON]" : "",
1860  (mask & SDL_BUTTON_X1MASK) ? " [X2BUTTON]" : "",
1861  (mask & SDL_BUTTON_X2MASK) ? " [X2BUTTON]" : "");
1862  }
1863  break;
1864  case SDLK_0:
1865  if (withControl) {
1866  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1867  SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_INFORMATION, "Test Message", "You're awesome!", window);
1868  }
1869  break;
1870  case SDLK_1:
1871  if (withControl) {
1872  FullscreenTo(0, event->key.windowID);
1873  }
1874  break;
1875  case SDLK_2:
1876  if (withControl) {
1877  FullscreenTo(1, event->key.windowID);
1878  }
1879  break;
1880  case SDLK_ESCAPE:
1881  *done = 1;
1882  break;
1883  case SDLK_SPACE:
1884  {
1885  char message[256];
1886  SDL_Window *window = SDL_GetWindowFromID(event->key.windowID);
1887 
1888  SDL_snprintf(message, sizeof(message), "(%i, %i), rel (%i, %i)\n", lastEvent.x, lastEvent.y, lastEvent.xrel, lastEvent.yrel);
1890  break;
1891  }
1892  default:
1893  break;
1894  }
1895  break;
1896  }
1897  case SDL_QUIT:
1898  *done = 1;
1899  break;
1900  case SDL_MOUSEMOTION:
1901  lastEvent = event->motion;
1902  break;
1903 
1904  case SDL_DROPFILE:
1905  case SDL_DROPTEXT:
1906  SDL_free(event->drop.file);
1907  break;
1908  }
1909 }
#define SDL_GetWindowGrab
#define SDL_SetWindowGrab
#define SDL_GetWindowSize
#define SDL_DestroyWindow
#define SDL_SetWindowOpacity
#define SDL_MaximizeWindow
#define SDL_DestroyRenderer
#define SDL_DestroyTexture
#define SDL_RenderSetClipRect
#define SDL_RestoreWindow
#define SDL_SetRelativeMouseMode
#define SDL_SetClipboardText
#define SDL_CaptureMouse
#define SDL_GetKeyboardFocus
#define SDL_GetClipboardText
#define SDL_RenderGetClipRect
#define SDL_free
#define SDL_ShowSimpleMessageBox
#define SDL_SetWindowBordered
#define SDL_GetWindowDisplayIndex
#define SDL_GetWindowPosition
#define SDL_SetWindowSize
#define SDL_GetNumVideoDisplays
#define SDL_MinimizeWindow
#define SDL_GetWindowOpacity
#define SDL_Log
#define SDL_snprintf
#define SDL_GetGlobalMouseState
#define SDL_GetRelativeMouseMode
@ SDL_MOUSEMOTION
Definition: SDL_events.h:107
@ SDL_DROPTEXT
Definition: SDL_events.h:148
@ SDL_QUIT
Definition: SDL_events.h:60
@ SDL_WINDOWEVENT
Definition: SDL_events.h:94
@ SDL_KEYDOWN
Definition: SDL_events.h:98
@ SDL_DROPFILE
Definition: SDL_events.h:147
@ SDLK_g
Definition: SDL_keycode.h:108
@ SDLK_c
Definition: SDL_keycode.h:104
@ SDLK_0
Definition: SDL_keycode.h:74
@ SDLK_a
Definition: SDL_keycode.h:102
@ SDLK_EQUALS
Definition: SDL_keycode.h:87
@ SDLK_UP
Definition: SDL_keycode.h:156
@ SDLK_DOWN
Definition: SDL_keycode.h:155
@ SDLK_z
Definition: SDL_keycode.h:127
@ SDLK_v
Definition: SDL_keycode.h:123
@ SDLK_PRINTSCREEN
Definition: SDL_keycode.h:144
@ SDLK_r
Definition: SDL_keycode.h:119
@ SDLK_MINUS
Definition: SDL_keycode.h:71
@ SDLK_b
Definition: SDL_keycode.h:103
@ SDLK_m
Definition: SDL_keycode.h:114
@ SDLK_ESCAPE
Definition: SDL_keycode.h:55
@ SDLK_1
Definition: SDL_keycode.h:75
@ SDLK_SPACE
Definition: SDL_keycode.h:58
@ SDLK_LEFT
Definition: SDL_keycode.h:154
@ SDLK_o
Definition: SDL_keycode.h:116
@ SDLK_RIGHT
Definition: SDL_keycode.h:153
@ SDLK_RETURN
Definition: SDL_keycode.h:54
@ SDLK_2
Definition: SDL_keycode.h:76
@ KMOD_SHIFT
Definition: SDL_keycode.h:344
@ KMOD_ALT
Definition: SDL_keycode.h:345
@ KMOD_CTRL
Definition: SDL_keycode.h:343
@ SDL_MESSAGEBOX_INFORMATION
#define SDL_BUTTON_MMASK
Definition: SDL_mouse.h:288
#define SDL_BUTTON_LMASK
Definition: SDL_mouse.h:287
#define SDL_BUTTON_X1MASK
Definition: SDL_mouse.h:290
#define SDL_BUTTON_RMASK
Definition: SDL_mouse.h:289
#define SDL_BUTTON_X2MASK
Definition: SDL_mouse.h:291
GLboolean GLboolean GLboolean b
struct _cl_event * event
GLuint GLsizei const GLchar * message
GLenum GLint GLuint mask
SDL_FORCE_INLINE SDL_bool SDL_RectEmpty(const SDL_Rect *r)
Returns true if the rectangle has no area.
Definition: SDL_rect.h:108
SDL_bool
Definition: SDL_stdinc.h:168
static void SDLTest_PrintEvent(SDL_Event *event)
static void FullscreenTo(int index, int windowId)
static void SDLTest_ScreenShot(SDL_Renderer *renderer)
@ SDL_WINDOW_MOUSE_CAPTURE
Definition: SDL_video.h:115
@ SDL_WINDOWEVENT_CLOSE
Definition: SDL_video.h:167
int done
Definition: checkkeys.c:28
Mouse motion event structure (event.motion.*)
Definition: SDL_events.h:260
int h
Definition: SDL_rect.h:80
int w
Definition: SDL_rect.h:80

References done, FullscreenTo(), SDL_Rect::h, i, KMOD_ALT, KMOD_CTRL, KMOD_SHIFT, NULL, SDL_BUTTON_LMASK, SDL_BUTTON_MMASK, SDL_BUTTON_RMASK, SDL_BUTTON_X1MASK, SDL_BUTTON_X2MASK, SDL_CaptureMouse, SDL_DestroyRenderer, SDL_DestroyTexture, SDL_DestroyWindow, SDL_DROPFILE, SDL_DROPTEXT, SDL_FALSE, SDL_free, SDL_GetClipboardText, SDL_GetGlobalMouseState, SDL_GetKeyboardFocus, SDL_GetNumVideoDisplays, SDL_GetRelativeMouseMode, SDL_GetWindowDisplayIndex, SDL_GetWindowFlags, SDL_GetWindowFromID, SDL_GetWindowGrab, SDL_GetWindowOpacity, SDL_GetWindowPosition, SDL_GetWindowSize, SDL_KEYDOWN, SDL_Log, SDL_MaximizeWindow, SDL_MESSAGEBOX_INFORMATION, SDL_MinimizeWindow, SDL_MOUSEMOTION, SDL_QUIT, SDL_RectEmpty(), SDL_RenderGetClipRect, SDL_RenderSetClipRect, SDL_RestoreWindow, SDL_SetClipboardText, SDL_SetRelativeMouseMode, SDL_SetWindowBordered, SDL_SetWindowFullscreen, SDL_SetWindowGrab, SDL_SetWindowOpacity, SDL_SetWindowPosition, SDL_SetWindowSize, SDL_ShowSimpleMessageBox, SDL_snprintf, SDL_TRUE, SDL_WINDOW_BORDERLESS, SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSCREEN_DESKTOP, SDL_WINDOW_MAXIMIZED, SDL_WINDOW_MOUSE_CAPTURE, SDL_WINDOWEVENT, SDL_WINDOWEVENT_CLOSE, SDL_WINDOWPOS_CENTERED_DISPLAY, SDLK_0, SDLK_1, SDLK_2, SDLK_a, SDLK_b, SDLK_c, SDLK_DOWN, SDLK_EQUALS, SDLK_ESCAPE, SDLK_g, SDLK_LEFT, SDLK_m, SDLK_MINUS, SDLK_o, SDLK_PRINTSCREEN, SDLK_r, SDLK_RETURN, SDLK_RIGHT, SDLK_SPACE, SDLK_UP, SDLK_v, SDLK_z, SDLTest_PrintEvent(), SDLTest_ScreenShot(), state, text, VERBOSE_EVENT, SDL_Rect::w, SDL_MouseMotionEvent::x, SDL_Rect::x, SDL_MouseMotionEvent::xrel, SDL_MouseMotionEvent::y, SDL_Rect::y, and SDL_MouseMotionEvent::yrel.

Referenced by loop(), and main().

◆ SDLTest_CommonInit()

SDL_bool SDLTest_CommonInit ( SDLTest_CommonState state)

Open test window.

Parameters
stateThe common state describing the test window to create.
Returns
True if initialization succeeded, false otherwise

Definition at line 835 of file SDL_test_common.c.

836 {
837  int i, j, m, n, w, h;
838  SDL_DisplayMode fullscreen_mode;
839  char text[1024];
840 
841  if (state->flags & SDL_INIT_VIDEO) {
842  if (state->verbose & VERBOSE_VIDEO) {
844  if (n == 0) {
845  SDL_Log("No built-in video drivers\n");
846  } else {
847  SDL_snprintf(text, sizeof(text), "Built-in video drivers:");
848  for (i = 0; i < n; ++i) {
849  if (i > 0) {
850  SDL_snprintfcat(text, sizeof(text), ",");
851  }
852  SDL_snprintfcat(text, sizeof(text), " %s", SDL_GetVideoDriver(i));
853  }
854  SDL_Log("%s\n", text);
855  }
856  }
857  if (SDL_VideoInit(state->videodriver) < 0) {
858  SDL_Log("Couldn't initialize video driver: %s\n",
859  SDL_GetError());
860  return SDL_FALSE;
861  }
862  if (state->verbose & VERBOSE_VIDEO) {
863  SDL_Log("Video driver: %s\n",
865  }
866 
867  /* Upload GL settings */
872  SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, state->gl_double_buffer);
873  SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, state->gl_buffer_size);
875  SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, state->gl_stencil_size);
876  SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE, state->gl_accum_red_size);
877  SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE, state->gl_accum_green_size);
878  SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE, state->gl_accum_blue_size);
879  SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, state->gl_accum_alpha_size);
881  SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, state->gl_multisamplebuffers);
882  SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, state->gl_multisamplesamples);
883  if (state->gl_accelerated >= 0) {
885  state->gl_accelerated);
886  }
887  SDL_GL_SetAttribute(SDL_GL_RETAINED_BACKING, state->gl_retained_backing);
888  if (state->gl_major_version) {
891  }
892  if (state->gl_debug) {
894  }
895  if (state->gl_profile_mask) {
897  }
898 
899  if (state->verbose & VERBOSE_MODES) {
900  SDL_Rect bounds, usablebounds;
901  float hdpi = 0;
902  float vdpi = 0;
904  int bpp;
905  Uint32 Rmask, Gmask, Bmask, Amask;
906 #if SDL_VIDEO_DRIVER_WINDOWS
907  int adapterIndex = 0;
908  int outputIndex = 0;
909 #endif
911  SDL_Log("Number of displays: %d\n", n);
912  for (i = 0; i < n; ++i) {
913  SDL_Log("Display %d: %s\n", i, SDL_GetDisplayName(i));
914 
915  SDL_zero(bounds);
916  SDL_GetDisplayBounds(i, &bounds);
917 
918  SDL_zero(usablebounds);
919  SDL_GetDisplayUsableBounds(i, &usablebounds);
920 
921  SDL_GetDisplayDPI(i, NULL, &hdpi, &vdpi);
922 
923  SDL_Log("Bounds: %dx%d at %d,%d\n", bounds.w, bounds.h, bounds.x, bounds.y);
924  SDL_Log("Usable bounds: %dx%d at %d,%d\n", usablebounds.w, usablebounds.h, usablebounds.x, usablebounds.y);
925  SDL_Log("DPI: %fx%f\n", hdpi, vdpi);
926 
928  SDL_PixelFormatEnumToMasks(mode.format, &bpp, &Rmask, &Gmask,
929  &Bmask, &Amask);
930  SDL_Log(" Current mode: %dx%d@%dHz, %d bits-per-pixel (%s)\n",
931  mode.w, mode.h, mode.refresh_rate, bpp,
932  SDL_GetPixelFormatName(mode.format));
933  if (Rmask || Gmask || Bmask) {
934  SDL_Log(" Red Mask = 0x%.8x\n", Rmask);
935  SDL_Log(" Green Mask = 0x%.8x\n", Gmask);
936  SDL_Log(" Blue Mask = 0x%.8x\n", Bmask);
937  if (Amask)
938  SDL_Log(" Alpha Mask = 0x%.8x\n", Amask);
939  }
940 
941  /* Print available fullscreen video modes */
943  if (m == 0) {
944  SDL_Log("No available fullscreen video modes\n");
945  } else {
946  SDL_Log(" Fullscreen video modes:\n");
947  for (j = 0; j < m; ++j) {
949  SDL_PixelFormatEnumToMasks(mode.format, &bpp, &Rmask,
950  &Gmask, &Bmask, &Amask);
951  SDL_Log(" Mode %d: %dx%d@%dHz, %d bits-per-pixel (%s)\n",
952  j, mode.w, mode.h, mode.refresh_rate, bpp,
953  SDL_GetPixelFormatName(mode.format));
954  if (Rmask || Gmask || Bmask) {
955  SDL_Log(" Red Mask = 0x%.8x\n",
956  Rmask);
957  SDL_Log(" Green Mask = 0x%.8x\n",
958  Gmask);
959  SDL_Log(" Blue Mask = 0x%.8x\n",
960  Bmask);
961  if (Amask)
962  SDL_Log(" Alpha Mask = 0x%.8x\n",
963  Amask);
964  }
965  }
966  }
967 
968 #if SDL_VIDEO_DRIVER_WINDOWS
969  /* Print the D3D9 adapter index */
970  adapterIndex = SDL_Direct3D9GetAdapterIndex( i );
971  SDL_Log("D3D9 Adapter Index: %d", adapterIndex);
972 
973  /* Print the DXGI adapter and output indices */
974  SDL_DXGIGetOutputInfo(i, &adapterIndex, &outputIndex);
975  SDL_Log("DXGI Adapter Index: %d Output Index: %d", adapterIndex, outputIndex);
976 #endif
977  }
978  }
979 
980  if (state->verbose & VERBOSE_RENDER) {
981  SDL_RendererInfo info;
982 
984  if (n == 0) {
985  SDL_Log("No built-in render drivers\n");
986  } else {
987  SDL_Log("Built-in render drivers:\n");
988  for (i = 0; i < n; ++i) {
989  SDL_GetRenderDriverInfo(i, &info);
990  SDLTest_PrintRenderer(&info);
991  }
992  }
993  }
994 
995  SDL_zero(fullscreen_mode);
996  switch (state->depth) {
997  case 8:
998  fullscreen_mode.format = SDL_PIXELFORMAT_INDEX8;
999  break;
1000  case 15:
1001  fullscreen_mode.format = SDL_PIXELFORMAT_RGB555;
1002  break;
1003  case 16:
1004  fullscreen_mode.format = SDL_PIXELFORMAT_RGB565;
1005  break;
1006  case 24:
1007  fullscreen_mode.format = SDL_PIXELFORMAT_RGB24;
1008  break;
1009  default:
1010  fullscreen_mode.format = SDL_PIXELFORMAT_RGB888;
1011  break;
1012  }
1013  fullscreen_mode.refresh_rate = state->refresh_rate;
1014 
1015  state->windows =
1016  (SDL_Window **) SDL_calloc(state->num_windows,
1017  sizeof(*state->windows));
1018  state->renderers =
1019  (SDL_Renderer **) SDL_calloc(state->num_windows,
1020  sizeof(*state->renderers));
1021  state->targets =
1022  (SDL_Texture **) SDL_calloc(state->num_windows,
1023  sizeof(*state->targets));
1024  if (!state->windows || !state->renderers) {
1025  SDL_Log("Out of memory!\n");
1026  return SDL_FALSE;
1027  }
1028  for (i = 0; i < state->num_windows; ++i) {
1029  char title[1024];
1030  SDL_Rect r;
1031 
1032  r.x = state->window_x;
1033  r.y = state->window_y;
1034  r.w = state->window_w;
1035  r.h = state->window_h;
1036 
1037  /* !!! FIXME: hack to make --usable-bounds work for now. */
1038  if ((r.x == -1) && (r.y == -1) && (r.w == -1) && (r.h == -1)) {
1039  SDL_GetDisplayUsableBounds(state->display, &r);
1040  }
1041 
1042  if (state->num_windows > 1) {
1043  SDL_snprintf(title, SDL_arraysize(title), "%s %d",
1044  state->window_title, i + 1);
1045  } else {
1046  SDL_strlcpy(title, state->window_title, SDL_arraysize(title));
1047  }
1048  state->windows[i] =
1049  SDL_CreateWindow(title, r.x, r.y, r.w, r.h, state->window_flags);
1050  if (!state->windows[i]) {
1051  SDL_Log("Couldn't create window: %s\n",
1052  SDL_GetError());
1053  return SDL_FALSE;
1054  }
1055  if (state->window_minW || state->window_minH) {
1056  SDL_SetWindowMinimumSize(state->windows[i], state->window_minW, state->window_minH);
1057  }
1058  if (state->window_maxW || state->window_maxH) {
1059  SDL_SetWindowMaximumSize(state->windows[i], state->window_maxW, state->window_maxH);
1060  }
1061  SDL_GetWindowSize(state->windows[i], &w, &h);
1062  if (!(state->window_flags & SDL_WINDOW_RESIZABLE) &&
1063  (w != state->window_w || h != state->window_h)) {
1064  printf("Window requested size %dx%d, got %dx%d\n", state->window_w, state->window_h, w, h);
1065  state->window_w = w;
1066  state->window_h = h;
1067  }
1068  if (SDL_SetWindowDisplayMode(state->windows[i], &fullscreen_mode) < 0) {
1069  SDL_Log("Can't set up fullscreen display mode: %s\n",
1070  SDL_GetError());
1071  return SDL_FALSE;
1072  }
1073 
1074  /* Add resize/drag areas for windows that are borderless and resizable */
1075  if ((state->window_flags & (SDL_WINDOW_RESIZABLE|SDL_WINDOW_BORDERLESS)) ==
1078  }
1079 
1080  if (state->window_icon) {
1081  SDL_Surface *icon = SDLTest_LoadIcon(state->window_icon);
1082  if (icon) {
1083  SDL_SetWindowIcon(state->windows[i], icon);
1084  SDL_FreeSurface(icon);
1085  }
1086  }
1087 
1088  SDL_ShowWindow(state->windows[i]);
1089 
1090  if (!state->skip_renderer
1091  && (state->renderdriver
1092  || !(state->window_flags & (SDL_WINDOW_OPENGL | SDL_WINDOW_VULKAN)))) {
1093  m = -1;
1094  if (state->renderdriver) {
1095  SDL_RendererInfo info;
1097  for (j = 0; j < n; ++j) {
1098  SDL_GetRenderDriverInfo(j, &info);
1099  if (SDL_strcasecmp(info.name, state->renderdriver) ==
1100  0) {
1101  m = j;
1102  break;
1103  }
1104  }
1105  if (m == -1) {
1106  SDL_Log("Couldn't find render driver named %s",
1107  state->renderdriver);
1108  return SDL_FALSE;
1109  }
1110  }
1111  state->renderers[i] = SDL_CreateRenderer(state->windows[i],
1112  m, state->render_flags);
1113  if (!state->renderers[i]) {
1114  SDL_Log("Couldn't create renderer: %s\n",
1115  SDL_GetError());
1116  return SDL_FALSE;
1117  }
1118  if (state->logical_w && state->logical_h) {
1119  SDL_RenderSetLogicalSize(state->renderers[i], state->logical_w, state->logical_h);
1120  } else if (state->scale != 0.) {
1121  SDL_RenderSetScale(state->renderers[i], state->scale, state->scale);
1122  }
1123  if (state->verbose & VERBOSE_RENDER) {
1124  SDL_RendererInfo info;
1125 
1126  SDL_Log("Current renderer:\n");
1127  SDL_GetRendererInfo(state->renderers[i], &info);
1128  SDLTest_PrintRenderer(&info);
1129  }
1130  }
1131  }
1132  }
1133 
1134  if (state->flags & SDL_INIT_AUDIO) {
1135  if (state->verbose & VERBOSE_AUDIO) {
1137  if (n == 0) {
1138  SDL_Log("No built-in audio drivers\n");
1139  } else {
1140  SDL_snprintf(text, sizeof(text), "Built-in audio drivers:");
1141  for (i = 0; i < n; ++i) {
1142  if (i > 0) {
1143  SDL_snprintfcat(text, sizeof(text), ",");
1144  }
1145  SDL_snprintfcat(text, sizeof(text), " %s", SDL_GetAudioDriver(i));
1146  }
1147  SDL_Log("%s\n", text);
1148  }
1149  }
1150  if (SDL_AudioInit(state->audiodriver) < 0) {
1151  SDL_Log("Couldn't initialize audio driver: %s\n",
1152  SDL_GetError());
1153  return SDL_FALSE;
1154  }
1155  if (state->verbose & VERBOSE_AUDIO) {
1156  SDL_Log("Audio driver: %s\n",
1158  }
1159 
1160  if (SDL_OpenAudio(&state->audiospec, NULL) < 0) {
1161  SDL_Log("Couldn't open audio: %s\n", SDL_GetError());
1162  return SDL_FALSE;
1163  }
1164  }
1165 
1166  return SDL_TRUE;
1167 }
#define SDL_INIT_AUDIO
Definition: SDL.h:81
#define SDL_INIT_VIDEO
Definition: SDL.h:82
#define SDL_SetWindowHitTest
#define SDL_GetError
#define SDL_SetWindowMinimumSize
#define SDL_GetCurrentVideoDriver
#define SDL_AudioInit
#define SDL_VideoInit
#define SDL_CreateWindow
#define SDL_GetNumAudioDrivers
#define SDL_GetPixelFormatName
#define SDL_GetRenderDriverInfo
#define SDL_GetDisplayName
#define SDL_RenderSetLogicalSize
#define SDL_ShowWindow
#define SDL_OpenAudio
#define SDL_GetDisplayDPI
#define SDL_RenderSetScale
#define SDL_CreateRenderer
#define SDL_GetNumDisplayModes
#define SDL_GL_SetAttribute
#define SDL_GetCurrentAudioDriver
#define SDL_strlcpy
#define SDL_SetWindowIcon
#define SDL_PixelFormatEnumToMasks
#define SDL_GetDisplayMode
#define SDL_SetWindowMaximumSize
#define SDL_GetNumRenderDrivers
#define SDL_GetVideoDriver
#define SDL_GetRendererInfo
#define SDL_SetWindowDisplayMode
#define SDL_FreeSurface
#define SDL_GetDesktopDisplayMode
#define SDL_GetAudioDriver
#define SDL_GetNumVideoDrivers
#define SDL_GetDisplayUsableBounds
GLdouble GLdouble GLdouble r
Definition: SDL_opengl.h:2079
const GLfloat * m
GLenum mode
GLdouble n
@ SDL_PIXELFORMAT_RGB555
Definition: SDL_pixels.h:202
@ SDL_PIXELFORMAT_INDEX8
Definition: SDL_pixels.h:186
@ SDL_PIXELFORMAT_RGB24
Definition: SDL_pixels.h:237
@ SDL_PIXELFORMAT_RGB888
Definition: SDL_pixels.h:246
@ SDL_PIXELFORMAT_RGB565
Definition: SDL_pixels.h:231
#define SDL_zero(x)
Definition: SDL_stdinc.h:426
#define SDL_arraysize(array)
Definition: SDL_stdinc.h:121
int SDL_Direct3D9GetAdapterIndex(int displayIndex)
Returns the D3D9 adapter index that matches the specified display index.
SDL_bool SDL_DXGIGetOutputInfo(int displayIndex, int *adapterIndex, int *outputIndex)
Returns the DXGI Adapter and Output indices for the specified display index.
static void SDLTest_PrintRenderer(SDL_RendererInfo *info)
static void SDL_snprintfcat(SDL_OUT_Z_CAP(maxlen) char *text, size_t maxlen, SDL_PRINTF_FORMAT_STRING const char *fmt,...)
static SDL_HitTestResult SDLTest_ExampleHitTestCallback(SDL_Window *win, const SDL_Point *area, void *data)
static SDL_Surface * SDLTest_LoadIcon(const char *file)
#define VERBOSE_AUDIO
@ SDL_GL_DOUBLEBUFFER
Definition: SDL_video.h:207
@ SDL_GL_STENCIL_SIZE
Definition: SDL_video.h:209
@ SDL_GL_CONTEXT_MAJOR_VERSION
Definition: SDL_video.h:219
@ SDL_GL_ACCUM_ALPHA_SIZE
Definition: SDL_video.h:213
@ SDL_GL_MULTISAMPLESAMPLES
Definition: SDL_video.h:216
@ SDL_GL_CONTEXT_MINOR_VERSION
Definition: SDL_video.h:220
@ SDL_GL_STEREO
Definition: SDL_video.h:214
@ SDL_GL_MULTISAMPLEBUFFERS
Definition: SDL_video.h:215
@ SDL_GL_ACCUM_GREEN_SIZE
Definition: SDL_video.h:211
@ SDL_GL_BLUE_SIZE
Definition: SDL_video.h:204
@ SDL_GL_RETAINED_BACKING
Definition: SDL_video.h:218
@ SDL_GL_RED_SIZE
Definition: SDL_video.h:202
@ SDL_GL_ALPHA_SIZE
Definition: SDL_video.h:205
@ SDL_GL_BUFFER_SIZE
Definition: SDL_video.h:206
@ SDL_GL_ACCELERATED_VISUAL
Definition: SDL_video.h:217
@ SDL_GL_ACCUM_BLUE_SIZE
Definition: SDL_video.h:212
@ SDL_GL_DEPTH_SIZE
Definition: SDL_video.h:208
@ SDL_GL_ACCUM_RED_SIZE
Definition: SDL_video.h:210
@ SDL_GL_CONTEXT_FLAGS
Definition: SDL_video.h:222
@ SDL_GL_CONTEXT_PROFILE_MASK
Definition: SDL_video.h:223
@ SDL_GL_GREEN_SIZE
Definition: SDL_video.h:203
@ SDL_WINDOW_VULKAN
Definition: SDL_video.h:121
@ SDL_WINDOW_OPENGL
Definition: SDL_video.h:100
@ SDL_GL_CONTEXT_DEBUG_FLAG
Definition: SDL_video.h:240
return Display return Display Bool Bool int int int return Display XEvent Bool(*) XPointer return Display return Display Drawable _Xconst char unsigned int unsigned int return Display Pixmap Pixmap XColor XColor unsigned int unsigned int return Display _Xconst char char int char return Display Visual unsigned int int int char unsigned int unsigned int int in j)
Definition: SDL_x11sym.h:50
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp
The structure that defines a display mode.
Definition: SDL_video.h:54
Uint32 format
Definition: SDL_video.h:55
Information on the capabilities of a render driver or context.
Definition: SDL_render.h:79
const char * name
Definition: SDL_render.h:80
A collection of pixels used in software blitting.
Definition: SDL_surface.h:71

References bpp, SDL_DisplayMode::format, SDL_Rect::h, i, j, SDL_RendererInfo::name, NULL, SDL_DisplayMode::refresh_rate, SDL_arraysize, SDL_AudioInit, SDL_calloc, SDL_CreateRenderer, SDL_CreateWindow, SDL_Direct3D9GetAdapterIndex(), SDL_DXGIGetOutputInfo(), SDL_FALSE, SDL_FreeSurface, SDL_GetAudioDriver, SDL_GetCurrentAudioDriver, SDL_GetCurrentVideoDriver, SDL_GetDesktopDisplayMode, SDL_GetDisplayBounds, SDL_GetDisplayDPI, SDL_GetDisplayMode, SDL_GetDisplayName, SDL_GetDisplayUsableBounds, SDL_GetError, SDL_GetNumAudioDrivers, SDL_GetNumDisplayModes, SDL_GetNumRenderDrivers, SDL_GetNumVideoDisplays, SDL_GetNumVideoDrivers, SDL_GetPixelFormatName, SDL_GetRenderDriverInfo, SDL_GetRendererInfo, SDL_GetVideoDriver, SDL_GetWindowSize, SDL_GL_ACCELERATED_VISUAL, SDL_GL_ACCUM_ALPHA_SIZE, SDL_GL_ACCUM_BLUE_SIZE, SDL_GL_ACCUM_GREEN_SIZE, SDL_GL_ACCUM_RED_SIZE, SDL_GL_ALPHA_SIZE, SDL_GL_BLUE_SIZE, SDL_GL_BUFFER_SIZE, SDL_GL_CONTEXT_DEBUG_FLAG, SDL_GL_CONTEXT_FLAGS, SDL_GL_CONTEXT_MAJOR_VERSION, SDL_GL_CONTEXT_MINOR_VERSION, SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_DEPTH_SIZE, SDL_GL_DOUBLEBUFFER, SDL_GL_GREEN_SIZE, SDL_GL_MULTISAMPLEBUFFERS, SDL_GL_MULTISAMPLESAMPLES, SDL_GL_RED_SIZE, SDL_GL_RETAINED_BACKING, SDL_GL_SetAttribute, SDL_GL_STENCIL_SIZE, SDL_GL_STEREO, SDL_INIT_AUDIO, SDL_INIT_VIDEO, SDL_Log, SDL_OpenAudio, SDL_PIXELFORMAT_INDEX8, SDL_PIXELFORMAT_RGB24, SDL_PIXELFORMAT_RGB555, SDL_PIXELFORMAT_RGB565, SDL_PIXELFORMAT_RGB888, SDL_PixelFormatEnumToMasks, SDL_RenderSetLogicalSize, SDL_RenderSetScale, SDL_SetWindowDisplayMode, SDL_SetWindowHitTest, SDL_SetWindowIcon, SDL_SetWindowMaximumSize, SDL_SetWindowMinimumSize, SDL_ShowWindow, SDL_snprintf, SDL_snprintfcat(), SDL_strcasecmp, SDL_strlcpy, SDL_TRUE, SDL_VideoInit, SDL_WINDOW_BORDERLESS, SDL_WINDOW_OPENGL, SDL_WINDOW_RESIZABLE, SDL_WINDOW_VULKAN, SDL_zero, SDLTest_ExampleHitTestCallback(), SDLTest_LoadIcon(), SDLTest_PrintRenderer(), state, text, VERBOSE_AUDIO, VERBOSE_MODES, VERBOSE_RENDER, VERBOSE_VIDEO, SDL_Rect::w, SDL_Rect::x, and SDL_Rect::y.

Referenced by main().

◆ SDLTest_CommonLogUsage()

void SDLTest_CommonLogUsage ( SDLTest_CommonState state,
const char *  argv0,
const char **  options 
)

Logs command line usage info.

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.

Parameters
stateThe common state describing the test window for the app.
argv0argv[0], as passed to main/SDL_main.
optionsan array of strings for application specific options. The last element of the array should be NULL.

Definition at line 498 of file SDL_test_common.c.

499 {
500  int i;
501 
502  SDL_Log("USAGE: %s", argv0);
503  SDL_Log(" %s", "[--trackmem]");
504 
505  if (state->flags & SDL_INIT_VIDEO) {
506  for (i = 0; i < SDL_arraysize(video_usage); i++) {
507  SDL_Log(" %s", video_usage[i]);
508  }
509  }
510 
511  if (state->flags & SDL_INIT_AUDIO) {
512  for (i = 0; i < SDL_arraysize(audio_usage); i++) {
513  SDL_Log(" %s", audio_usage[i]);
514  }
515  }
516 
517  if (options) {
518  for (i = 0; options[i] != NULL; i++) {
519  SDL_Log(" %s", options[i]);
520  }
521  }
522 }
static const char * video_usage[]
static const char * audio_usage[]

References audio_usage, i, NULL, SDL_arraysize, SDL_INIT_AUDIO, SDL_INIT_VIDEO, SDL_Log, state, and video_usage.

Referenced by main(), and SDLTest_CommonDefaultArgs().

◆ SDLTest_CommonQuit()

void SDLTest_CommonQuit ( SDLTest_CommonState state)

Close test window.

Parameters
stateThe common state used to create test window.

Definition at line 1912 of file SDL_test_common.c.

1913 {
1914  int i;
1915 
1922 
1923  SDL_free(state->windows);
1924  if (state->targets) {
1925  for (i = 0; i < state->num_windows; ++i) {
1926  if (state->targets[i]) {
1927  SDL_DestroyTexture(state->targets[i]);
1928  }
1929  }
1930  SDL_free(state->targets);
1931  }
1932  if (state->renderers) {
1933  for (i = 0; i < state->num_windows; ++i) {
1934  if (state->renderers[i]) {
1935  SDL_DestroyRenderer(state->renderers[i]);
1936  }
1937  }
1938  SDL_free(state->renderers);
1939  }
1940  if (state->flags & SDL_INIT_VIDEO) {
1941  SDL_VideoQuit();
1942  }
1943  if (state->flags & SDL_INIT_AUDIO) {
1944  SDL_AudioQuit();
1945  }
1946  SDL_free(state);
1947  SDL_Quit();
1949 }
#define SDL_AudioQuit
#define SDL_VideoQuit
#define SDL_Quit
static char * common_usage_video
static char * common_usage_audio
static char * common_usage_videoaudio
void SDLTest_LogAllocations(void)
Print a log of any outstanding allocations.

References common_usage_audio, common_usage_video, common_usage_videoaudio, i, NULL, SDL_AudioQuit, SDL_DestroyRenderer, SDL_DestroyTexture, SDL_free, SDL_INIT_AUDIO, SDL_INIT_VIDEO, SDL_Quit, SDL_VideoQuit, SDLTest_LogAllocations(), and state.

Referenced by main(), and quit().

◆ SDLTest_CommonUsage()

const char* SDLTest_CommonUsage ( SDLTest_CommonState state)

Returns common usage information.

You should (probably) be using SDLTest_CommonLogUsage() instead, but this function remains for binary compatibility. Strings returned from this function are valid until SDLTest_CommonQuit() is called, in which case those strings' memory is freed and can no longer be used.

Parameters
stateThe common state describing the test window to create.
Returns
String with usage information

Definition at line 567 of file SDL_test_common.c.

568 {
569 
570  switch (state->flags & (SDL_INIT_VIDEO | SDL_INIT_AUDIO)) {
571  case SDL_INIT_VIDEO:
573  case SDL_INIT_AUDIO:
577  default:
578  return "[--trackmem]";
579  }
580 }
static const char * BuildCommonUsageString(char **pstr, const char **strlist, const int numitems, const char **strlist2, const int numitems2)

References audio_usage, BuildCommonUsageString(), common_usage_audio, common_usage_video, common_usage_videoaudio, NULL, SDL_arraysize, SDL_INIT_AUDIO, SDL_INIT_VIDEO, state, and video_usage.

◆ SDLTest_ExampleHitTestCallback()

static SDL_HitTestResult SDLTest_ExampleHitTestCallback ( SDL_Window win,
const SDL_Point area,
void data 
)
static

Definition at line 789 of file SDL_test_common.c.

790 {
791  int w, h;
792  const int RESIZE_BORDER = 8;
793  const int DRAGGABLE_TITLE = 32;
794 
795  /*SDL_Log("Hit test point %d,%d\n", area->x, area->y);*/
796 
797  SDL_GetWindowSize(win, &w, &h);
798 
799  if (area->x < RESIZE_BORDER) {
800  if (area->y < RESIZE_BORDER) {
801  SDL_Log("SDL_HITTEST_RESIZE_TOPLEFT\n");
803  } else if (area->y >= (h-RESIZE_BORDER)) {
804  SDL_Log("SDL_HITTEST_RESIZE_BOTTOMLEFT\n");
806  } else {
807  SDL_Log("SDL_HITTEST_RESIZE_LEFT\n");
809  }
810  } else if (area->x >= (w-RESIZE_BORDER)) {
811  if (area->y < RESIZE_BORDER) {
812  SDL_Log("SDL_HITTEST_RESIZE_TOPRIGHT\n");
814  } else if (area->y >= (h-RESIZE_BORDER)) {
815  SDL_Log("SDL_HITTEST_RESIZE_BOTTOMRIGHT\n");
817  } else {
818  SDL_Log("SDL_HITTEST_RESIZE_RIGHT\n");
820  }
821  } else if (area->y >= (h-RESIZE_BORDER)) {
822  SDL_Log("SDL_HITTEST_RESIZE_BOTTOM\n");
824  } else if (area->y < RESIZE_BORDER) {
825  SDL_Log("SDL_HITTEST_RESIZE_TOP\n");
826  return SDL_HITTEST_RESIZE_TOP;
827  } else if (area->y < DRAGGABLE_TITLE) {
828  SDL_Log("SDL_HITTEST_DRAGGABLE\n");
829  return SDL_HITTEST_DRAGGABLE;
830  }
831  return SDL_HITTEST_NORMAL;
832 }
@ SDL_HITTEST_DRAGGABLE
Definition: SDL_video.h:1029
@ SDL_HITTEST_RESIZE_LEFT
Definition: SDL_video.h:1037
@ SDL_HITTEST_RESIZE_TOP
Definition: SDL_video.h:1031
@ SDL_HITTEST_RESIZE_TOPRIGHT
Definition: SDL_video.h:1032
@ SDL_HITTEST_NORMAL
Definition: SDL_video.h:1028
@ SDL_HITTEST_RESIZE_BOTTOM
Definition: SDL_video.h:1035
@ SDL_HITTEST_RESIZE_BOTTOMRIGHT
Definition: SDL_video.h:1034
@ SDL_HITTEST_RESIZE_BOTTOMLEFT
Definition: SDL_video.h:1036
@ SDL_HITTEST_RESIZE_RIGHT
Definition: SDL_video.h:1033
@ SDL_HITTEST_RESIZE_TOPLEFT
Definition: SDL_video.h:1030
int x
Definition: SDL_rect.h:50
int y
Definition: SDL_rect.h:51
#define RESIZE_BORDER
Definition: testhittesting.c:6

References RESIZE_BORDER, SDL_GetWindowSize, SDL_HITTEST_DRAGGABLE, SDL_HITTEST_NORMAL, SDL_HITTEST_RESIZE_BOTTOM, SDL_HITTEST_RESIZE_BOTTOMLEFT, SDL_HITTEST_RESIZE_BOTTOMRIGHT, SDL_HITTEST_RESIZE_LEFT, SDL_HITTEST_RESIZE_RIGHT, SDL_HITTEST_RESIZE_TOP, SDL_HITTEST_RESIZE_TOPLEFT, SDL_HITTEST_RESIZE_TOPRIGHT, SDL_Log, SDL_Point::x, and SDL_Point::y.

Referenced by SDLTest_CommonInit().

◆ SDLTest_LoadIcon()

static SDL_Surface* SDLTest_LoadIcon ( const char *  file)
static

Definition at line 769 of file SDL_test_common.c.

770 {
771  SDL_Surface *icon;
772 
773  /* Load the icon surface */
774  icon = SDL_LoadBMP(file);
775  if (icon == NULL) {
776  SDL_Log("Couldn't load %s: %s\n", file, SDL_GetError());
777  return (NULL);
778  }
779 
780  if (icon->format->palette) {
781  /* Set the colorkey */
782  SDL_SetColorKey(icon, 1, *((Uint8 *) icon->pixels));
783  }
784 
785  return (icon);
786 }
#define SDL_SetColorKey
#define SDL_LoadBMP(file)
Definition: SDL_surface.h:203
SDL_Palette * palette
Definition: SDL_pixels.h:327
SDL_PixelFormat * format
Definition: SDL_surface.h:73
void * pixels
Definition: SDL_surface.h:76

References SDL_Surface::format, NULL, SDL_PixelFormat::palette, SDL_Surface::pixels, SDL_GetError, SDL_LoadBMP, SDL_Log, and SDL_SetColorKey.

Referenced by SDLTest_CommonInit().

◆ SDLTest_PrintEvent()

static void SDLTest_PrintEvent ( SDL_Event event)
static

Definition at line 1231 of file SDL_test_common.c.

1232 {
1233  if ((event->type == SDL_MOUSEMOTION) || (event->type == SDL_FINGERMOTION)) {
1234  /* Mouse and finger motion are really spammy */
1235  return;
1236  }
1237 
1238  switch (event->type) {
1239  case SDL_DISPLAYEVENT:
1240  switch (event->display.event) {
1242  SDL_Log("SDL EVENT: Display %d changed orientation to %s", event->display.display, DisplayOrientationName(event->display.data1));
1243  break;
1244  default:
1245  SDL_Log("SDL EVENT: Display %d got unknown event 0x%4.4x",
1246  event->display.display, event->display.event);
1247  break;
1248  }
1249  break;
1250  case SDL_WINDOWEVENT:
1251  switch (event->window.event) {
1252  case SDL_WINDOWEVENT_SHOWN:
1253  SDL_Log("SDL EVENT: Window %d shown", event->window.windowID);
1254  break;
1256  SDL_Log("SDL EVENT: Window %d hidden", event->window.windowID);
1257  break;
1259  SDL_Log("SDL EVENT: Window %d exposed", event->window.windowID);
1260  break;
1261  case SDL_WINDOWEVENT_MOVED:
1262  SDL_Log("SDL EVENT: Window %d moved to %d,%d",
1263  event->window.windowID, event->window.data1,
1264  event->window.data2);
1265  break;
1267  SDL_Log("SDL EVENT: Window %d resized to %dx%d",
1268  event->window.windowID, event->window.data1,
1269  event->window.data2);
1270  break;
1272  SDL_Log("SDL EVENT: Window %d changed size to %dx%d",
1273  event->window.windowID, event->window.data1,
1274  event->window.data2);
1275  break;
1277  SDL_Log("SDL EVENT: Window %d minimized", event->window.windowID);
1278  break;
1280  SDL_Log("SDL EVENT: Window %d maximized", event->window.windowID);
1281  break;
1283  SDL_Log("SDL EVENT: Window %d restored", event->window.windowID);
1284  break;
1285  case SDL_WINDOWEVENT_ENTER:
1286  SDL_Log("SDL EVENT: Mouse entered window %d",
1287  event->window.windowID);
1288  break;
1289  case SDL_WINDOWEVENT_LEAVE:
1290  SDL_Log("SDL EVENT: Mouse left window %d", event->window.windowID);
1291  break;
1293  SDL_Log("SDL EVENT: Window %d gained keyboard focus",
1294  event->window.windowID);
1295  break;
1297  SDL_Log("SDL EVENT: Window %d lost keyboard focus",
1298  event->window.windowID);
1299  break;
1300  case SDL_WINDOWEVENT_CLOSE:
1301  SDL_Log("SDL EVENT: Window %d closed", event->window.windowID);
1302  break;
1304  SDL_Log("SDL EVENT: Window %d take focus", event->window.windowID);
1305  break;
1307  SDL_Log("SDL EVENT: Window %d hit test", event->window.windowID);
1308  break;
1309  default:
1310  SDL_Log("SDL EVENT: Window %d got unknown event 0x%4.4x",
1311  event->window.windowID, event->window.event);
1312  break;
1313  }
1314  break;
1315  case SDL_KEYDOWN:
1316  SDL_Log("SDL EVENT: Keyboard: key pressed in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s",
1317  event->key.windowID,
1318  event->key.keysym.scancode,
1319  SDL_GetScancodeName(event->key.keysym.scancode),
1320  event->key.keysym.sym, SDL_GetKeyName(event->key.keysym.sym));
1321  break;
1322  case SDL_KEYUP:
1323  SDL_Log("SDL EVENT: Keyboard: key released in window %d: scancode 0x%08X = %s, keycode 0x%08X = %s",
1324  event->key.windowID,
1325  event->key.keysym.scancode,
1326  SDL_GetScancodeName(event->key.keysym.scancode),
1327  event->key.keysym.sym, SDL_GetKeyName(event->key.keysym.sym));
1328  break;
1329  case SDL_TEXTEDITING:
1330  SDL_Log("SDL EVENT: Keyboard: text editing \"%s\" in window %d",
1331  event->edit.text, event->edit.windowID);
1332  break;
1333  case SDL_TEXTINPUT:
1334  SDL_Log("SDL EVENT: Keyboard: text input \"%s\" in window %d",
1335  event->text.text, event->text.windowID);
1336  break;
1337  case SDL_KEYMAPCHANGED:
1338  SDL_Log("SDL EVENT: Keymap changed");
1339  break;
1340  case SDL_MOUSEMOTION:
1341  SDL_Log("SDL EVENT: Mouse: moved to %d,%d (%d,%d) in window %d",
1342  event->motion.x, event->motion.y,
1343  event->motion.xrel, event->motion.yrel,
1344  event->motion.windowID);
1345  break;
1346  case SDL_MOUSEBUTTONDOWN:
1347  SDL_Log("SDL EVENT: Mouse: button %d pressed at %d,%d with click count %d in window %d",
1348  event->button.button, event->button.x, event->button.y, event->button.clicks,
1349  event->button.windowID);
1350  break;
1351  case SDL_MOUSEBUTTONUP:
1352  SDL_Log("SDL EVENT: Mouse: button %d released at %d,%d with click count %d in window %d",
1353  event->button.button, event->button.x, event->button.y, event->button.clicks,
1354  event->button.windowID);
1355  break;
1356  case SDL_MOUSEWHEEL:
1357  SDL_Log("SDL EVENT: Mouse: wheel scrolled %d in x and %d in y (reversed: %d) in window %d",
1358  event->wheel.x, event->wheel.y, event->wheel.direction, event->wheel.windowID);
1359  break;
1360  case SDL_JOYDEVICEADDED:
1361  SDL_Log("SDL EVENT: Joystick index %d attached",
1362  event->jdevice.which);
1363  break;
1364  case SDL_JOYDEVICEREMOVED:
1365  SDL_Log("SDL EVENT: Joystick %d removed",
1366  event->jdevice.which);
1367  break;
1368  case SDL_JOYBALLMOTION:
1369  SDL_Log("SDL EVENT: Joystick %d: ball %d moved by %d,%d",
1370  event->jball.which, event->jball.ball, event->jball.xrel,
1371  event->jball.yrel);
1372  break;
1373  case SDL_JOYHATMOTION:
1374  {
1375  const char *position = "UNKNOWN";
1376  switch (event->jhat.value) {
1377  case SDL_HAT_CENTERED:
1378  position = "CENTER";
1379  break;
1380  case SDL_HAT_UP:
1381  position = "UP";
1382  break;
1383  case SDL_HAT_RIGHTUP:
1384  position = "RIGHTUP";
1385  break;
1386  case SDL_HAT_RIGHT:
1387  position = "RIGHT";
1388  break;
1389  case SDL_HAT_RIGHTDOWN:
1390  position = "RIGHTDOWN";
1391  break;
1392  case SDL_HAT_DOWN:
1393  position = "DOWN";
1394  break;
1395  case SDL_HAT_LEFTDOWN:
1396  position = "LEFTDOWN";
1397  break;
1398  case SDL_HAT_LEFT:
1399  position = "LEFT";
1400  break;
1401  case SDL_HAT_LEFTUP:
1402  position = "LEFTUP";
1403  break;
1404  }
1405  SDL_Log("SDL EVENT: Joystick %d: hat %d moved to %s", event->jhat.which,
1406  event->jhat.hat, position);
1407  }
1408  break;
1409  case SDL_JOYBUTTONDOWN:
1410  SDL_Log("SDL EVENT: Joystick %d: button %d pressed",
1411  event->jbutton.which, event->jbutton.button);
1412  break;
1413  case SDL_JOYBUTTONUP:
1414  SDL_Log("SDL EVENT: Joystick %d: button %d released",
1415  event->jbutton.which, event->jbutton.button);
1416  break;
1418  SDL_Log("SDL EVENT: Controller index %d attached",
1419  event->cdevice.which);
1420  break;
1422  SDL_Log("SDL EVENT: Controller %d removed",
1423  event->cdevice.which);
1424  break;
1426  SDL_Log("SDL EVENT: Controller %d axis %d ('%s') value: %d",
1427  event->caxis.which,
1428  event->caxis.axis,
1430  event->caxis.value);
1431  break;
1433  SDL_Log("SDL EVENT: Controller %d button %d ('%s') down",
1434  event->cbutton.which, event->cbutton.button,
1436  break;
1438  SDL_Log("SDL EVENT: Controller %d button %d ('%s') up",
1439  event->cbutton.which, event->cbutton.button,
1441  break;
1442  case SDL_CLIPBOARDUPDATE:
1443  SDL_Log("SDL EVENT: Clipboard updated");
1444  break;
1445 
1446  case SDL_FINGERMOTION:
1447  SDL_Log("SDL EVENT: Finger: motion touch=%ld, finger=%ld, x=%f, y=%f, dx=%f, dy=%f, pressure=%f",
1448  (long) event->tfinger.touchId,
1449  (long) event->tfinger.fingerId,
1450  event->tfinger.x, event->tfinger.y,
1451  event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure);
1452  break;
1453  case SDL_FINGERDOWN:
1454  case SDL_FINGERUP:
1455  SDL_Log("SDL EVENT: Finger: %s touch=%ld, finger=%ld, x=%f, y=%f, dx=%f, dy=%f, pressure=%f",
1456  (event->type == SDL_FINGERDOWN) ? "down" : "up",
1457  (long) event->tfinger.touchId,
1458  (long) event->tfinger.fingerId,
1459  event->tfinger.x, event->tfinger.y,
1460  event->tfinger.dx, event->tfinger.dy, event->tfinger.pressure);
1461  break;
1462  case SDL_DOLLARGESTURE:
1463  SDL_Log("SDL_EVENT: Dollar gesture detect: %ld", (long) event->dgesture.gestureId);
1464  break;
1465  case SDL_DOLLARRECORD:
1466  SDL_Log("SDL_EVENT: Dollar gesture record: %ld", (long) event->dgesture.gestureId);
1467  break;
1468  case SDL_MULTIGESTURE:
1469  SDL_Log("SDL_EVENT: Multi gesture fingers: %d", event->mgesture.numFingers);
1470  break;
1471 
1473  SDL_Log("SDL EVENT: render device reset");
1474  break;
1476  SDL_Log("SDL EVENT: render targets reset");
1477  break;
1478 
1479  case SDL_APP_TERMINATING:
1480  SDL_Log("SDL EVENT: App terminating");
1481  break;
1482  case SDL_APP_LOWMEMORY:
1483  SDL_Log("SDL EVENT: App running low on memory");
1484  break;
1486  SDL_Log("SDL EVENT: App will enter the background");
1487  break;
1489  SDL_Log("SDL EVENT: App entered the background");
1490  break;
1492  SDL_Log("SDL EVENT: App will enter the foreground");
1493  break;
1495  SDL_Log("SDL EVENT: App entered the foreground");
1496  break;
1497  case SDL_DROPBEGIN:
1498  SDL_Log("SDL EVENT: Drag and drop beginning");
1499  break;
1500  case SDL_DROPFILE:
1501  SDL_Log("SDL EVENT: Drag and drop file: '%s'", event->drop.file);
1502  break;
1503  case SDL_DROPTEXT:
1504  SDL_Log("SDL EVENT: Drag and drop text: '%s'", event->drop.file);
1505  break;
1506  case SDL_DROPCOMPLETE:
1507  SDL_Log("SDL EVENT: Drag and drop ending");
1508  break;
1509  case SDL_QUIT:
1510  SDL_Log("SDL EVENT: Quit requested");
1511  break;
1512  case SDL_USEREVENT:
1513  SDL_Log("SDL EVENT: User event %d", event->user.code);
1514  break;
1515  default:
1516  SDL_Log("Unknown event 0x%4.4x", event->type);
1517  break;
1518  }
1519 }
#define SDL_GetScancodeName
#define SDL_GetKeyName
@ SDL_JOYDEVICEADDED
Definition: SDL_events.h:118
@ SDL_DROPBEGIN
Definition: SDL_events.h:149
@ SDL_FINGERMOTION
Definition: SDL_events.h:136
@ SDL_TEXTEDITING
Definition: SDL_events.h:100
@ SDL_APP_LOWMEMORY
Definition: SDL_events.h:67
@ SDL_JOYBUTTONDOWN
Definition: SDL_events.h:116
@ SDL_APP_WILLENTERFOREGROUND
Definition: SDL_events.h:79
@ SDL_USEREVENT
Definition: SDL_events.h:166
@ SDL_MOUSEBUTTONUP
Definition: SDL_events.h:109
@ SDL_JOYDEVICEREMOVED
Definition: SDL_events.h:119
@ SDL_TEXTINPUT
Definition: SDL_events.h:101
@ SDL_MOUSEWHEEL
Definition: SDL_events.h:110
@ SDL_CLIPBOARDUPDATE
Definition: SDL_events.h:144
@ SDL_JOYBUTTONUP
Definition: SDL_events.h:117
@ SDL_JOYBALLMOTION
Definition: SDL_events.h:114
@ SDL_DISPLAYEVENT
Definition: SDL_events.h:91
@ SDL_FINGERUP
Definition: SDL_events.h:135
@ SDL_RENDER_DEVICE_RESET
Definition: SDL_events.h:161
@ SDL_CONTROLLERBUTTONUP
Definition: SDL_events.h:124
@ SDL_MOUSEBUTTONDOWN
Definition: SDL_events.h:108
@ SDL_CONTROLLERDEVICEADDED
Definition: SDL_events.h:125
@ SDL_APP_DIDENTERFOREGROUND
Definition: SDL_events.h:83
@ SDL_DOLLARRECORD
Definition: SDL_events.h:140
@ SDL_APP_WILLENTERBACKGROUND
Definition: SDL_events.h:71
@ SDL_MULTIGESTURE
Definition: SDL_events.h:141
@ SDL_FINGERDOWN
Definition: SDL_events.h:134
@ SDL_DROPCOMPLETE
Definition: SDL_events.h:150
@ SDL_DOLLARGESTURE
Definition: SDL_events.h:139
@ SDL_CONTROLLERBUTTONDOWN
Definition: SDL_events.h:123
@ SDL_APP_DIDENTERBACKGROUND
Definition: SDL_events.h:75
@ SDL_APP_TERMINATING
Definition: SDL_events.h:63
@ SDL_CONTROLLERAXISMOTION
Definition: SDL_events.h:122
@ SDL_KEYMAPCHANGED
Definition: SDL_events.h:102
@ SDL_KEYUP
Definition: SDL_events.h:99
@ SDL_CONTROLLERDEVICEREMOVED
Definition: SDL_events.h:126
@ SDL_RENDER_TARGETS_RESET
Definition: SDL_events.h:160
@ SDL_JOYHATMOTION
Definition: SDL_events.h:115
SDL_GameControllerAxis
SDL_GameControllerButton
#define SDL_HAT_LEFTDOWN
Definition: SDL_joystick.h:394
#define SDL_HAT_LEFT
Definition: SDL_joystick.h:390
#define SDL_HAT_RIGHT
Definition: SDL_joystick.h:388
#define SDL_HAT_RIGHTUP
Definition: SDL_joystick.h:391
#define SDL_HAT_LEFTUP
Definition: SDL_joystick.h:393
#define SDL_HAT_DOWN
Definition: SDL_joystick.h:389
#define SDL_HAT_RIGHTDOWN
Definition: SDL_joystick.h:392
#define SDL_HAT_UP
Definition: SDL_joystick.h:387
#define SDL_HAT_CENTERED
Definition: SDL_joystick.h:386
static const char * DisplayOrientationName(int orientation)
static const char * ControllerAxisName(const SDL_GameControllerAxis axis)
static const char * ControllerButtonName(const SDL_GameControllerButton button)
@ SDL_WINDOWEVENT_HIDDEN
Definition: SDL_video.h:150
@ SDL_WINDOWEVENT_FOCUS_LOST
Definition: SDL_video.h:166
@ SDL_WINDOWEVENT_RESIZED
Definition: SDL_video.h:155
@ SDL_WINDOWEVENT_HIT_TEST
Definition: SDL_video.h:169
@ SDL_WINDOWEVENT_FOCUS_GAINED
Definition: SDL_video.h:165
@ SDL_WINDOWEVENT_SHOWN
Definition: SDL_video.h:149
@ SDL_WINDOWEVENT_MOVED
Definition: SDL_video.h:153
@ SDL_WINDOWEVENT_TAKE_FOCUS
Definition: SDL_video.h:168
@ SDL_WINDOWEVENT_MINIMIZED
Definition: SDL_video.h:159
@ SDL_WINDOWEVENT_LEAVE
Definition: SDL_video.h:164
@ SDL_WINDOWEVENT_MAXIMIZED
Definition: SDL_video.h:160
@ SDL_WINDOWEVENT_SIZE_CHANGED
Definition: SDL_video.h:156
@ SDL_WINDOWEVENT_RESTORED
Definition: SDL_video.h:161
@ SDL_WINDOWEVENT_EXPOSED
Definition: SDL_video.h:151
@ SDL_WINDOWEVENT_ENTER
Definition: SDL_video.h:163
@ SDL_DISPLAYEVENT_ORIENTATION
Definition: SDL_video.h:178

References ControllerAxisName(), ControllerButtonName(), DisplayOrientationName(), SDL_APP_DIDENTERBACKGROUND, SDL_APP_DIDENTERFOREGROUND, SDL_APP_LOWMEMORY, SDL_APP_TERMINATING, SDL_APP_WILLENTERBACKGROUND, SDL_APP_WILLENTERFOREGROUND, SDL_CLIPBOARDUPDATE, SDL_CONTROLLERAXISMOTION, SDL_CONTROLLERBUTTONDOWN, SDL_CONTROLLERBUTTONUP, SDL_CONTROLLERDEVICEADDED, SDL_CONTROLLERDEVICEREMOVED, SDL_DISPLAYEVENT, SDL_DISPLAYEVENT_ORIENTATION, SDL_DOLLARGESTURE, SDL_DOLLARRECORD, SDL_DROPBEGIN, SDL_DROPCOMPLETE, SDL_DROPFILE, SDL_DROPTEXT, SDL_FINGERDOWN, SDL_FINGERMOTION, SDL_FINGERUP, SDL_GetKeyName, SDL_GetScancodeName, SDL_HAT_CENTERED, SDL_HAT_DOWN, SDL_HAT_LEFT, SDL_HAT_LEFTDOWN, SDL_HAT_LEFTUP, SDL_HAT_RIGHT, SDL_HAT_RIGHTDOWN, SDL_HAT_RIGHTUP, SDL_HAT_UP, SDL_JOYBALLMOTION, SDL_JOYBUTTONDOWN, SDL_JOYBUTTONUP, SDL_JOYDEVICEADDED, SDL_JOYDEVICEREMOVED, SDL_JOYHATMOTION, SDL_KEYDOWN, SDL_KEYMAPCHANGED, SDL_KEYUP, SDL_Log, SDL_MOUSEBUTTONDOWN, SDL_MOUSEBUTTONUP, SDL_MOUSEMOTION, SDL_MOUSEWHEEL, SDL_MULTIGESTURE, SDL_QUIT, SDL_RENDER_DEVICE_RESET, SDL_RENDER_TARGETS_RESET, SDL_TEXTEDITING, SDL_TEXTINPUT, SDL_USEREVENT, SDL_WINDOWEVENT, SDL_WINDOWEVENT_CLOSE, SDL_WINDOWEVENT_ENTER, SDL_WINDOWEVENT_EXPOSED, SDL_WINDOWEVENT_FOCUS_GAINED, SDL_WINDOWEVENT_FOCUS_LOST, SDL_WINDOWEVENT_HIDDEN, SDL_WINDOWEVENT_HIT_TEST, SDL_WINDOWEVENT_LEAVE, SDL_WINDOWEVENT_MAXIMIZED, SDL_WINDOWEVENT_MINIMIZED, SDL_WINDOWEVENT_MOVED, SDL_WINDOWEVENT_RESIZED, SDL_WINDOWEVENT_RESTORED, SDL_WINDOWEVENT_SHOWN, SDL_WINDOWEVENT_SIZE_CHANGED, and SDL_WINDOWEVENT_TAKE_FOCUS.

Referenced by SDLTest_CommonEvent().

◆ SDLTest_PrintPixelFormat()

static void SDLTest_PrintPixelFormat ( char *  text,
size_t  maxlen,
Uint32  format 
)
static

Definition at line 621 of file SDL_test_common.c.

622 {
623  switch (format) {
625  SDL_snprintfcat(text, maxlen, "Unknown");
626  break;
628  SDL_snprintfcat(text, maxlen, "Index1LSB");
629  break;
631  SDL_snprintfcat(text, maxlen, "Index1MSB");
632  break;
634  SDL_snprintfcat(text, maxlen, "Index4LSB");
635  break;
637  SDL_snprintfcat(text, maxlen, "Index4MSB");
638  break;
640  SDL_snprintfcat(text, maxlen, "Index8");
641  break;
643  SDL_snprintfcat(text, maxlen, "RGB332");
644  break;
646  SDL_snprintfcat(text, maxlen, "RGB444");
647  break;
649  SDL_snprintfcat(text, maxlen, "BGR444");
650  break;
652  SDL_snprintfcat(text, maxlen, "RGB555");
653  break;
655  SDL_snprintfcat(text, maxlen, "BGR555");
656  break;
658  SDL_snprintfcat(text, maxlen, "ARGB4444");
659  break;
661  SDL_snprintfcat(text, maxlen, "ABGR4444");
662  break;
664  SDL_snprintfcat(text, maxlen, "ARGB1555");
665  break;
667  SDL_snprintfcat(text, maxlen, "ABGR1555");
668  break;
670  SDL_snprintfcat(text, maxlen, "RGB565");
671  break;
673  SDL_snprintfcat(text, maxlen, "BGR565");
674  break;
676  SDL_snprintfcat(text, maxlen, "RGB24");
677  break;
679  SDL_snprintfcat(text, maxlen, "BGR24");
680  break;
682  SDL_snprintfcat(text, maxlen, "RGB888");
683  break;
685  SDL_snprintfcat(text, maxlen, "BGR888");
686  break;
688  SDL_snprintfcat(text, maxlen, "ARGB8888");
689  break;
691  SDL_snprintfcat(text, maxlen, "RGBA8888");
692  break;
694  SDL_snprintfcat(text, maxlen, "ABGR8888");
695  break;
697  SDL_snprintfcat(text, maxlen, "BGRA8888");
698  break;
700  SDL_snprintfcat(text, maxlen, "ARGB2101010");
701  break;
703  SDL_snprintfcat(text, maxlen, "YV12");
704  break;
706  SDL_snprintfcat(text, maxlen, "IYUV");
707  break;
709  SDL_snprintfcat(text, maxlen, "YUY2");
710  break;
712  SDL_snprintfcat(text, maxlen, "UYVY");
713  break;
715  SDL_snprintfcat(text, maxlen, "YVYU");
716  break;
718  SDL_snprintfcat(text, maxlen, "NV12");
719  break;
721  SDL_snprintfcat(text, maxlen, "NV21");
722  break;
723  default:
724  SDL_snprintfcat(text, maxlen, "0x%8.8x", format);
725  break;
726  }
727 }
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
Definition: SDL_opengl.h:1572
@ SDL_PIXELFORMAT_BGR565
Definition: SDL_pixels.h:234
@ SDL_PIXELFORMAT_YVYU
Definition: SDL_pixels.h:294
@ SDL_PIXELFORMAT_RGB332
Definition: SDL_pixels.h:188
@ SDL_PIXELFORMAT_INDEX1LSB
Definition: SDL_pixels.h:174
@ SDL_PIXELFORMAT_BGR444
Definition: SDL_pixels.h:198
@ SDL_PIXELFORMAT_ABGR4444
Definition: SDL_pixels.h:213
@ SDL_PIXELFORMAT_BGR24
Definition: SDL_pixels.h:240
@ SDL_PIXELFORMAT_INDEX4MSB
Definition: SDL_pixels.h:183
@ SDL_PIXELFORMAT_RGB444
Definition: SDL_pixels.h:194
@ SDL_PIXELFORMAT_RGBA8888
Definition: SDL_pixels.h:260
@ SDL_PIXELFORMAT_ARGB1555
Definition: SDL_pixels.h:219
@ SDL_PIXELFORMAT_UYVY
Definition: SDL_pixels.h:292
@ SDL_PIXELFORMAT_BGR888
Definition: SDL_pixels.h:253
@ SDL_PIXELFORMAT_YV12
Definition: SDL_pixels.h:286
@ SDL_PIXELFORMAT_ABGR8888
Definition: SDL_pixels.h:263
@ SDL_PIXELFORMAT_YUY2
Definition: SDL_pixels.h:290
@ SDL_PIXELFORMAT_NV12
Definition: SDL_pixels.h:296
@ SDL_PIXELFORMAT_BGRA8888
Definition: SDL_pixels.h:266
@ SDL_PIXELFORMAT_ABGR1555
Definition: SDL_pixels.h:225
@ SDL_PIXELFORMAT_NV21
Definition: SDL_pixels.h:298
@ SDL_PIXELFORMAT_IYUV
Definition: SDL_pixels.h:288
@ SDL_PIXELFORMAT_ARGB8888
Definition: SDL_pixels.h:257
@ SDL_PIXELFORMAT_ARGB4444
Definition: SDL_pixels.h:207
@ SDL_PIXELFORMAT_INDEX1MSB
Definition: SDL_pixels.h:177
@ SDL_PIXELFORMAT_INDEX4LSB
Definition: SDL_pixels.h:180
@ SDL_PIXELFORMAT_ARGB2101010
Definition: SDL_pixels.h:269
@ SDL_PIXELFORMAT_BGR555
Definition: SDL_pixels.h:206
@ SDL_PIXELFORMAT_UNKNOWN
Definition: SDL_pixels.h:173

References SDL_PIXELFORMAT_ABGR1555, SDL_PIXELFORMAT_ABGR4444, SDL_PIXELFORMAT_ABGR8888, SDL_PIXELFORMAT_ARGB1555, SDL_PIXELFORMAT_ARGB2101010, SDL_PIXELFORMAT_ARGB4444, SDL_PIXELFORMAT_ARGB8888, SDL_PIXELFORMAT_BGR24, SDL_PIXELFORMAT_BGR444, SDL_PIXELFORMAT_BGR555, SDL_PIXELFORMAT_BGR565, SDL_PIXELFORMAT_BGR888, SDL_PIXELFORMAT_BGRA8888, SDL_PIXELFORMAT_INDEX1LSB, SDL_PIXELFORMAT_INDEX1MSB, SDL_PIXELFORMAT_INDEX4LSB, SDL_PIXELFORMAT_INDEX4MSB, SDL_PIXELFORMAT_INDEX8, SDL_PIXELFORMAT_IYUV, SDL_PIXELFORMAT_NV12, SDL_PIXELFORMAT_NV21, SDL_PIXELFORMAT_RGB24, SDL_PIXELFORMAT_RGB332, SDL_PIXELFORMAT_RGB444, SDL_PIXELFORMAT_RGB555, SDL_PIXELFORMAT_RGB565, SDL_PIXELFORMAT_RGB888, SDL_PIXELFORMAT_RGBA8888, SDL_PIXELFORMAT_UNKNOWN, SDL_PIXELFORMAT_UYVY, SDL_PIXELFORMAT_YUY2, SDL_PIXELFORMAT_YV12, SDL_PIXELFORMAT_YVYU, SDL_snprintfcat(), and text.

Referenced by SDLTest_PrintRenderer().

◆ SDLTest_PrintRenderer()

static void SDLTest_PrintRenderer ( SDL_RendererInfo info)
static

Definition at line 730 of file SDL_test_common.c.

731 {
732  int i, count;
733  char text[1024];
734 
735  SDL_Log(" Renderer %s:\n", info->name);
736 
737  SDL_snprintf(text, sizeof(text), " Flags: 0x%8.8X", info->flags);
738  SDL_snprintfcat(text, sizeof(text), " (");
739  count = 0;
740  for (i = 0; i < sizeof(info->flags) * 8; ++i) {
741  Uint32 flag = (1 << i);
742  if (info->flags & flag) {
743  if (count > 0) {
744  SDL_snprintfcat(text, sizeof(text), " | ");
745  }
746  SDLTest_PrintRendererFlag(text, sizeof(text), flag);
747  ++count;
748  }
749  }
750  SDL_snprintfcat(text, sizeof(text), ")");
751  SDL_Log("%s\n", text);
752 
753  SDL_snprintf(text, sizeof(text), " Texture formats (%d): ", info->num_texture_formats);
754  for (i = 0; i < (int) info->num_texture_formats; ++i) {
755  if (i > 0) {
756  SDL_snprintfcat(text, sizeof(text), ", ");
757  }
759  }
760  SDL_Log("%s\n", text);
761 
762  if (info->max_texture_width || info->max_texture_height) {
763  SDL_Log(" Max Texture Size: %dx%d\n",
765  }
766 }
GLuint GLuint GLsizei count
Definition: SDL_opengl.h:1571
static void SDLTest_PrintPixelFormat(char *text, size_t maxlen, Uint32 format)
static void SDLTest_PrintRendererFlag(char *text, size_t maxlen, Uint32 flag)
int max_texture_height
Definition: SDL_render.h:85
Uint32 texture_formats[16]
Definition: SDL_render.h:83
Uint32 num_texture_formats
Definition: SDL_render.h:82
typedef int(__stdcall *FARPROC)()

References SDL_RendererInfo::flags, i, int(), SDL_RendererInfo::max_texture_height, SDL_RendererInfo::max_texture_width, SDL_RendererInfo::name, SDL_RendererInfo::num_texture_formats, SDL_Log, SDL_snprintf, SDL_snprintfcat(), SDLTest_PrintPixelFormat(), SDLTest_PrintRendererFlag(), text, and SDL_RendererInfo::texture_formats.

Referenced by SDLTest_CommonInit().

◆ SDLTest_PrintRendererFlag()

static void SDLTest_PrintRendererFlag ( char *  text,
size_t  maxlen,
Uint32  flag 
)
static

Definition at line 599 of file SDL_test_common.c.

600 {
601  switch (flag) {
603  SDL_snprintfcat(text, maxlen, "Software");
604  break;
606  SDL_snprintfcat(text, maxlen, "Accelerated");
607  break;
609  SDL_snprintfcat(text, maxlen, "PresentVSync");
610  break;
612  SDL_snprintfcat(text, maxlen, "TargetTexturesSupported");
613  break;
614  default:
615  SDL_snprintfcat(text, maxlen, "0x%8.8x", flag);
616  break;
617  }
618 }
@ SDL_RENDERER_SOFTWARE
Definition: SDL_render.h:66
@ SDL_RENDERER_ACCELERATED
Definition: SDL_render.h:67
@ SDL_RENDERER_TARGETTEXTURE
Definition: SDL_render.h:71

References SDL_RENDERER_ACCELERATED, SDL_RENDERER_PRESENTVSYNC, SDL_RENDERER_SOFTWARE, SDL_RENDERER_TARGETTEXTURE, SDL_snprintfcat(), and text.

Referenced by SDLTest_PrintRenderer().

◆ SDLTest_ScreenShot()

static void SDLTest_ScreenShot ( SDL_Renderer renderer)
static

Definition at line 1522 of file SDL_test_common.c.

1523 {
1526 
1527  if (!renderer) {
1528  return;
1529  }
1530 
1534  0x00FF0000, 0x0000FF00, 0x000000FF,
1535 #else
1536  0x000000FF, 0x0000FF00, 0x00FF0000,
1537 #endif
1538  0x00000000);
1539  if (!surface) {
1540  SDL_Log("Couldn't create surface: %s\n", SDL_GetError());
1541  return;
1542  }
1543 
1544  if (SDL_RenderReadPixels(renderer, NULL, surface->format->format,
1545  surface->pixels, surface->pitch) < 0) {
1546  SDL_Log("Couldn't read screen: %s\n", SDL_GetError());
1547  SDL_free(surface);
1548  return;
1549  }
1550 
1551  if (SDL_SaveBMP(surface, "screenshot.bmp") < 0) {
1552  SDL_Log("Couldn't save screenshot.bmp: %s\n", SDL_GetError());
1553  SDL_free(surface);
1554  return;
1555  }
1556 }
#define SDL_BYTEORDER
#define SDL_RenderGetViewport
#define SDL_CreateRGBSurface
#define SDL_RenderReadPixels
#define SDL_LIL_ENDIAN
Definition: SDL_endian.h:37
#define SDL_SaveBMP(surface, file)
Definition: SDL_surface.h:226
EGLSurface surface
Definition: eglext.h:248
set set set set set set set macro pixldst1 abits if abits op else op endif endm macro pixldst2 abits if abits op else op endif endm macro pixldst4 abits if abits op else op endif endm macro pixldst0 abits op endm macro pixldst3 mem_operand op endm macro pixldst30 mem_operand op endm macro pixldst abits if abits elseif abits elseif abits elseif abits elseif abits pixldst0 abits else pixldst0 abits pixldst0 abits pixldst0 abits pixldst0 abits endif elseif abits else pixldst0 abits pixldst0 abits endif elseif abits else error unsupported bpp *numpix else pixst endif endm macro pixld1_s mem_operand if asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl elseif asr adds SRC_WIDTH_FIXED bpl add asl mov asr adds SRC_WIDTH_FIXED bpl add asl else error unsupported endif endm macro pixld2_s mem_operand if mov asr add asl add asl mov asr sub UNIT_X add asl mov asr add asl add asl mov asr add UNIT_X add asl else pixld1_s mem_operand pixld1_s mem_operand endif endm macro pixld0_s mem_operand if asr adds SRC_WIDTH_FIXED bpl add asl elseif asr adds SRC_WIDTH_FIXED bpl add asl endif endm macro pixld_s_internal mem_operand if mem_operand pixld2_s mem_operand pixdeinterleave basereg elseif mem_operand elseif mem_operand elseif mem_operand elseif mem_operand pixld0_s mem_operand else pixld0_s mem_operand pixld0_s mem_operand pixld0_s mem_operand pixld0_s mem_operand endif elseif mem_operand else pixld0_s mem_operand pixld0_s mem_operand endif elseif mem_operand else error unsupported mem_operand if bpp mem_operand endif endm macro vuzp8 reg2 vuzp d d &reg2 endm macro vzip8 reg2 vzip d d &reg2 endm macro pixdeinterleave basereg basereg basereg basereg basereg endif endm macro pixinterleave basereg basereg basereg basereg basereg endif endm macro PF boost_increment endif if endif PF tst PF addne PF subne PF cmp ORIG_W if endif if endif if endif PF subge ORIG_W PF subges if endif if endif if endif endif endm macro cache_preload_simple endif if dst_r_bpp pld[DST_R, #(PREFETCH_DISTANCE_SIMPLE *dst_r_bpp/8)] endif if mask_bpp pld endif[MASK, #(PREFETCH_DISTANCE_SIMPLE *mask_bpp/8)] endif endif endm macro fetch_mask_pixblock pixld mask_basereg pixblock_size MASK endm macro ensure_destination_ptr_alignment process_pixblock_tail_head if beq irp skip1 beq endif SRC MASK if dst_r_bpp DST_R else add endif PF add sub src_basereg pixdeinterleave mask_basereg pixdeinterleave dst_r_basereg process_pixblock_head pixblock_size cache_preload_simple process_pixblock_tail pixinterleave dst_w_basereg irp beq endif process_pixblock_tail_head tst beq irp if pixblock_size chunk_size tst beq pixld_src SRC pixld MASK if DST_R else pixld DST_R endif if
static SDL_Renderer * renderer
static SDL_Rect viewport
Definition: testviewport.c:28

References endif, SDL_Rect::h, NULL, renderer, SDL_BYTEORDER, SDL_CreateRGBSurface, SDL_free, SDL_GetError, SDL_LIL_ENDIAN, SDL_Log, SDL_RenderGetViewport, SDL_RenderReadPixels, SDL_SaveBMP, viewport, and SDL_Rect::w.

Referenced by SDLTest_CommonEvent().

Variable Documentation

◆ audio_usage

const char* audio_usage[]
static
Initial value:
= {
"[--rate N]", "[--format U8|S8|U16|U16LE|U16BE|S16|S16LE|S16BE]",
"[--channels N]", "[--samples N]"
}

Definition at line 41 of file SDL_test_common.c.

Referenced by SDLTest_CommonLogUsage(), and SDLTest_CommonUsage().

◆ common_usage_audio

char* common_usage_audio = NULL
static

Definition at line 563 of file SDL_test_common.c.

Referenced by SDLTest_CommonQuit(), and SDLTest_CommonUsage().

◆ common_usage_video

char* common_usage_video = NULL
static

Definition at line 562 of file SDL_test_common.c.

Referenced by SDLTest_CommonQuit(), and SDLTest_CommonUsage().

◆ common_usage_videoaudio

char* common_usage_videoaudio = NULL
static

Definition at line 564 of file SDL_test_common.c.

Referenced by SDLTest_CommonQuit(), and SDLTest_CommonUsage().

◆ video_usage

const char* video_usage[]
static
Initial value:
= {
"[--video driver]", "[--renderer driver]", "[--gldebug]",
"[--info all|video|modes|render|event]",
"[--log all|error|system|audio|video|render|input]", "[--display N]",
"[--fullscreen | --fullscreen-desktop | --windows N]", "[--title title]",
"[--icon icon.bmp]", "[--center | --position X,Y]", "[--geometry WxH]",
"[--min-geometry WxH]", "[--max-geometry WxH]", "[--logical WxH]",
"[--scale N]", "[--depth N]", "[--refresh R]", "[--vsync]", "[--noframe]",
"[--resize]", "[--minimize]", "[--maximize]", "[--grab]",
"[--allow-highdpi]", "[--usable-bounds]"
}

Definition at line 29 of file SDL_test_common.c.

Referenced by SDLTest_CommonLogUsage(), and SDLTest_CommonUsage().