diff --git a/src/renderer/RenderDevice.cpp b/src/renderer/RenderDevice.cpp index 1fedf4e..3ccc87f 100644 --- a/src/renderer/RenderDevice.cpp +++ b/src/renderer/RenderDevice.cpp @@ -2168,10 +2168,19 @@ void RenderDevice::WaitForVSync(const bool asynchronous) m_vsyncCount++; m_presentTimestampReference = usec(); }; +#ifndef __EMSCRIPTEN__ if (asynchronous) std::thread(lambda).detach(); // Reuse thread ? (we always at most one running at a time) else lambda(); +#else + // vpinball-wasm: a single-threaded Emscripten build (no -pthread / + // SharedArrayBuffer) cannot construct real std::thread workers - run + // synchronously inline instead. This only updates m_vsyncCount/timestamp + // bookkeeping (the real vblank-wait branches above are already excluded + // for __STANDALONE__ builds), so synchronous execution is equivalent. + lambda(); +#endif } #if defined(ENABLE_BGFX)