mirror of https://github.com/encounter/SDL.git
emscripten: Introduce SDL_HINT_EMSCRIPTEN_ASYNCIFY
See https://github.com/emscripten-core/emscripten/issues/10746 and https://github.com/emscripten-ports/SDL2/pull/112 Fixes Bugzilla #4997.
This commit is contained in:
parent
01af7b0254
commit
e594a6738a
|
@ -1042,6 +1042,21 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define SDL_HINT_EMSCRIPTEN_KEYBOARD_ELEMENT "SDL_EMSCRIPTEN_KEYBOARD_ELEMENT"
|
#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.
|
* \brief Tell SDL not to catch the SIGINT or SIGTERM signals.
|
||||||
*
|
*
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
#include "SDL_timer.h"
|
#include "SDL_timer.h"
|
||||||
#include "SDL_assert.h"
|
#include "SDL_assert.h"
|
||||||
|
#include "SDL_hints.h"
|
||||||
#include "../SDL_timer_c.h"
|
#include "../SDL_timer_c.h"
|
||||||
|
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
|
@ -191,8 +192,8 @@ void
|
||||||
SDL_Delay(Uint32 ms)
|
SDL_Delay(Uint32 ms)
|
||||||
{
|
{
|
||||||
#ifdef __EMSCRIPTEN__
|
#ifdef __EMSCRIPTEN__
|
||||||
if (emscripten_has_asyncify()) {
|
if (emscripten_has_asyncify() && SDL_GetHintBoolean(SDL_HINT_EMSCRIPTEN_ASYNCIFY, SDL_TRUE)) {
|
||||||
/* pseudo-synchronous pause */
|
/* pseudo-synchronous pause, used directly or through e.g. SDL_WaitEvent */
|
||||||
emscripten_sleep(ms);
|
emscripten_sleep(ms);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
|
|
||||||
#include "SDL_emscriptenvideo.h"
|
#include "SDL_emscriptenvideo.h"
|
||||||
#include "SDL_emscriptenframebuffer.h"
|
#include "SDL_emscriptenframebuffer.h"
|
||||||
|
#include "SDL_hints.h"
|
||||||
|
|
||||||
|
|
||||||
int Emscripten_CreateWindowFramebuffer(_THIS, SDL_Window * window, Uint32 * format, void ** pixels, int *pitch)
|
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);
|
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 */
|
/* give back control to browser for screen refresh */
|
||||||
emscripten_sleep(0);
|
emscripten_sleep(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
#include "SDL_emscriptenvideo.h"
|
#include "SDL_emscriptenvideo.h"
|
||||||
#include "SDL_emscriptenopengles.h"
|
#include "SDL_emscriptenopengles.h"
|
||||||
|
#include "SDL_hints.h"
|
||||||
|
|
||||||
#define LOAD_FUNC(NAME) _this->egl_data->NAME = NAME;
|
#define LOAD_FUNC(NAME) _this->egl_data->NAME = NAME;
|
||||||
|
|
||||||
|
@ -88,7 +89,7 @@ int
|
||||||
Emscripten_GLES_SwapWindow(_THIS, SDL_Window * window)
|
Emscripten_GLES_SwapWindow(_THIS, SDL_Window * window)
|
||||||
{
|
{
|
||||||
EGLBoolean ret = SDL_EGL_SwapBuffers(_this, ((SDL_WindowData *) window->driverdata)->egl_surface);
|
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 */
|
/* give back control to browser for screen refresh */
|
||||||
emscripten_sleep(0);
|
emscripten_sleep(0);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue