Skip to content

Commit

Permalink
emscripten: Introduce SDL_HINT_EMSCRIPTEN_ASYNCIFY
Browse files Browse the repository at this point in the history
  • Loading branch information
Beuc committed Jun 27, 2020
1 parent 01af7b0 commit e594a67
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 4 deletions.
15 changes: 15 additions & 0 deletions include/SDL_hints.h
Expand Up @@ -1042,6 +1042,21 @@ extern "C" {
*/
#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"

/**
* \brief Disable giving back control to the browser automatically
* when running with asyncify
*
* With -s ASYNCIFY, SDL2 calls emscripten_sleep during operations
* such as refreshing the screen or polling events.
*
* This hint only applies to the emscripten platform
*
* The variable can be set to the following values:
* "0" - Disable emscripten_sleep calls (if you give back browser control manually or use asyncify for other purposes)
* "1" - Enable emscripten_sleep calls (the default)
*/
#define SDL_HINT_EMSCRIPTEN_ASYNCIFY "SDL_EMSCRIPTEN_ASYNCIFY"

/**
* \brief Tell SDL not to catch the SIGINT or SIGTERM signals.
*
Expand Down
5 changes: 3 additions & 2 deletions src/timer/unix/SDL_systimer.c
Expand Up @@ -29,6 +29,7 @@

#include "SDL_timer.h"
#include "SDL_assert.h"
#include "SDL_hints.h"
#include "../SDL_timer_c.h"

#ifdef __EMSCRIPTEN__
Expand Down Expand Up @@ -191,8 +192,8 @@ void
SDL_Delay(Uint32 ms)
{
#ifdef __EMSCRIPTEN__
if (emscripten_has_asyncify()) {
/* pseudo-synchronous pause */
if (emscripten_has_asyncify() && SDL_GetHintBoolean(SDL_HINT_EMSCRIPTEN_ASYNCIFY, SDL_TRUE)) {
/* pseudo-synchronous pause, used directly or through e.g. SDL_WaitEvent */
emscripten_sleep(ms);
return;
}
Expand Down
3 changes: 2 additions & 1 deletion src/video/emscripten/SDL_emscriptenframebuffer.c
Expand Up @@ -24,6 +24,7 @@

#include "SDL_emscriptenvideo.h"
#include "SDL_emscriptenframebuffer.h"
#include "SDL_hints.h"


int Emscripten_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch)
Expand Down Expand Up @@ -163,7 +164,7 @@ int Emscripten_UpdateWindowFramebuffer(_THIS, SDL_Window * window, const SDL_Rec
SDL_SaveBMP(surface, file);
}*/

if (emscripten_has_asyncify()) {
if (emscripten_has_asyncify() && SDL_GetHintBoolean(SDL_HINT_EMSCRIPTEN_ASYNCIFY, SDL_TRUE)) {
/* give back control to browser for screen refresh */
emscripten_sleep(0);
}
Expand Down
3 changes: 2 additions & 1 deletion src/video/emscripten/SDL_emscriptenopengles.c
Expand Up @@ -27,6 +27,7 @@

#include "SDL_emscriptenvideo.h"
#include "SDL_emscriptenopengles.h"
#include "SDL_hints.h"

#define LOAD_FUNC(NAME) _this->egl_data->NAME = NAME;

Expand Down Expand Up @@ -88,7 +89,7 @@ int
Emscripten_GLES_SwapWindow(_THIS, SDL_Window * window)
{
EGLBoolean ret = SDL_EGL_SwapBuffers(_this, ((SDL_WindowData *) window->driverdata)->egl_surface);
if (emscripten_has_asyncify()) {
if (emscripten_has_asyncify() && SDL_GetHintBoolean(SDL_HINT_EMSCRIPTEN_ASYNCIFY, SDL_TRUE)) {
/* give back control to browser for screen refresh */
emscripten_sleep(0);
}
Expand Down

0 comments on commit e594a67

Please sign in to comment.