Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
emscripten: Introduce SDL_HINT_EMSCRIPTEN_ASYNCIFY
- Loading branch information
|
|
@@ -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. |
|
|
* |
|
|
|
|
|
@@ -29,6 +29,7 @@ |
|
|
|
|
|
#include "SDL_timer.h" |
|
|
#include "SDL_assert.h" |
|
|
#include "SDL_hints.h" |
|
|
#include "../SDL_timer_c.h" |
|
|
|
|
|
#ifdef __EMSCRIPTEN__ |
|
|
@@ -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; |
|
|
} |
|
|
|
|
|
@@ -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) |
|
|
@@ -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); |
|
|
} |
|
|
|
|
|
@@ -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; |
|
|
|
|
|
@@ -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); |
|
|
} |
|
|
|