目次 - API(機能別) - ヒント - SDL_HINT_EMSCRIPTEN_ASYNCIFY

SDL_HINT_EMSCRIPTEN_ASYNCIFY

asyncifyで動作しているとき自動的に制御をブラウザに戻すか否かを指定するヒント

0emscripten_sleepの呼び出しを無効にする (手動で制御をブラウザに戻す, または別の目的でasyncifyを使用する場合)
1emscripten_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環境の場合のみ有効である.

バージョン

SDL2 port version_21/Emscripten 1.39.14, 公式の2020-06の開発中バージョンで使える.

SDL Wikiへのリンク

SDL_HINT_EMSCRIPTEN_ASYNCIFY - SDL Wiki