aboutsummaryrefslogtreecommitdiff
path: root/tests/sdl_pumpevents.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sdl_pumpevents.c')
-rw-r--r--tests/sdl_pumpevents.c54
1 files changed, 54 insertions, 0 deletions
diff --git a/tests/sdl_pumpevents.c b/tests/sdl_pumpevents.c
new file mode 100644
index 00000000..64becaad
--- /dev/null
+++ b/tests/sdl_pumpevents.c
@@ -0,0 +1,54 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <SDL/SDL.h>
+
+#include <emscripten.h>
+// bug - SDL_GetKeyboardState doesn't return scancodes, it returns keycodes, so acts exactly like
+// SDL_GetKeyState instead
+#define SDL_GetKeyState SDL_GetKeyboardState
+
+int result = 0;
+
+int loop1()
+{
+ unsigned i;
+ int r = 0;
+
+ // method 1: SDL_PollEvent loop
+ SDL_Event e;
+ while (SDL_PollEvent(&e));
+
+ const Uint8 *keys = SDL_GetKeyState(NULL);
+ if (keys[SDLK_LEFT])
+ r = 1;
+
+ return r;
+}
+
+int loop2()
+{
+ unsigned i;
+ int r = 0;
+
+ // method 2: SDL_PumpEvents
+ SDL_PumpEvents();
+
+ const Uint8 *keys = SDL_GetKeyState(NULL);
+ if (keys[SDLK_RIGHT])
+ r = 2;
+
+ return r;
+}
+
+int main(int argc, char *argv[])
+{
+ SDL_Init(SDL_INIT_EVERYTHING);
+ SDL_SetVideoMode(600, 400, 32, SDL_SWSURFACE);
+
+ emscripten_run_script("keydown(37);"); // left
+ result += loop1();
+ emscripten_run_script("keydown(39);"); // right
+ result += loop2();
+ REPORT_RESULT();
+ return 0;
+}