Phase A/B: fix the game loop and trim the asset payload
Phase A (the hard blocker): the engine now plays a real table live in the browser via a real per-frame game loop, not just a static render. Two real, previously-unknown upstream bugs found and fixed along the way: - RenderDevice::WaitForVSync() unconditionally spawned a real std::thread every frame, even on __STANDALONE__ builds - a hard crash under Emscripten's single-threaded runtime (0003). - The desktop game loop is a blocking native while loop with manual uSleep throttling, incompatible with a single-threaded WASM main thread. Adds Player::EmscriptenStepFrame() (one frame, no internal loop) driven by emscripten_set_main_loop, plus new JS-callable lifecycle entry points (vpinball_wasm_start/stop/dispose in the new src/core/EmscriptenBridge.cpp) that bypass the desktop main()/WinMain() chain entirely, since that chain assumes the process runs exactly one table to completion then exits (0004). Verified end-to-end in Chrome: real .vpx load, real shader compilation, real physics/script engine init, a real running frame loop (observed advancing), and a clean stop() -> ~Player() teardown mid-session with no crash or hang. Phase B: trims the preloaded asset payload from ~51MB to ~11MB by excluding editor-only bundled example tables and a Monaco code editor never used by the player runtime, and adds real link-time optimization (-O2 --closure 1) and --use-preload-cache for repeat visits.
This commit is contained in:
+9
-1
@@ -44,9 +44,17 @@ EMSCRIPTEN_LINK_FLAGS=(
|
||||
-sENVIRONMENT=web
|
||||
-sEXPORTED_RUNTIME_METHODS=FS,ccall,cwrap
|
||||
-sFORCE_FILESYSTEM=1
|
||||
-sEXPORTED_FUNCTIONS=_main,_vpinball_wasm_start,_vpinball_wasm_stop,_vpinball_wasm_dispose
|
||||
-sEXIT_RUNTIME=0
|
||||
--use-preload-cache
|
||||
)
|
||||
if [ "$BUILD_TYPE" = "Debug" ]; then
|
||||
EMSCRIPTEN_LINK_FLAGS+=(-sASSERTIONS=1 -sEXIT_RUNTIME=1)
|
||||
EMSCRIPTEN_LINK_FLAGS+=(-sASSERTIONS=1 -O0)
|
||||
else
|
||||
# CMAKE_BUILD_TYPE=Release only optimizes the compile step; emcc's link
|
||||
# step needs its own -O level to actually run wasm-opt/dead-code
|
||||
# elimination and (with --closure) minify the JS glue.
|
||||
EMSCRIPTEN_LINK_FLAGS+=(-O2 --closure 1)
|
||||
fi
|
||||
|
||||
emcmake cmake \
|
||||
|
||||
Reference in New Issue
Block a user