0 | emscripten_sleepの呼び出しを無効にする (手動で制御をブラウザに戻す, または別の目的でasyncifyを使用する場合) |
1 | emscripten_sleepの呼び出しを有効にする (デフォルト) |
アプリケーションがasyncify対応でコンパイルされているとき, SDLは以下の場合にemscripten_sleepを呼びアプリケーションを一時停止させて自動的に制御をブラウザに戻す:
これにより, SDLアプリケーションはそれほどパフォーマンスを低下させることなく(emscripten_set_main_loopを使用しないで)メインループのコードを変更せずにwebブラウザに移植できる.
この動作を無効にするには:
SDL_SetHint(SDL_HINT_EMSCRIPTEN_ASYNCIFY, "0");
//...
SDL_Init(SDL_INIT_EVERYTHING);
デフォルトのSDL_HINT_EMSCRIPTEN_ASYNCIFY=1で, パフォーマンスを高めるには, 一般的にはコールパス中のインストルメント関数のみ非同期にする:
emcc ... -s ASYNCIFY=1 -s ASYNCIFY_WHITELIST='["main", "call_path_to_your_main_loop", "SDL_WaitEvent", "SDL_WaitEventTimeout", "SDL_Delay", "SDL_RenderPresent", "GLES2_RenderPresent", "SDL_GL_SwapWindow", "Emscripten_GLES_SwapWindow", "byn$$fpcast-emu$$Emscripten_GLES_SwapWindow", "SDL_UpdateWindowSurface", "SDL_UpdateWindowSurfaceRects", "Emscripten_UpdateWindowFramebuffer"]'
"RuntimeError: unreachable executed"が発生した場合, JavaScriptコンソールとスタックトレースを見て存在しない関数を特定すること.
このヒントはEmscripten環境の場合のみ有効である.