From 618890f8fa62d0116e993b4a56cddf3bd3bf7c60 Mon Sep 17 00:00:00 2001
From: "Ryan C. Gordon" <[EMAIL REDACTED]>
Date: Thu, 27 Aug 2026 00:18:25 -0400
Subject: [PATCH] emscripten: Don't fall back to simulating vsync if settings
are still pending.
Fixes #16146.
Closes #16151.
---
src/video/emscripten/SDL_emscriptenopengles.c | 6 ++++++
src/video/emscripten/SDL_emscriptenvideo.c | 5 +++++
src/video/emscripten/SDL_emscriptenvideo.h | 1 +
3 files changed, 12 insertions(+)
diff --git a/src/video/emscripten/SDL_emscriptenopengles.c b/src/video/emscripten/SDL_emscriptenopengles.c
index 9bed30b4ffb17..3ecb5cd1f61a2 100644
--- a/src/video/emscripten/SDL_emscriptenopengles.c
+++ b/src/video/emscripten/SDL_emscriptenopengles.c
@@ -67,6 +67,12 @@ bool Emscripten_GLES_SetSwapInterval(SDL_VideoDevice *_this, int interval)
bool Emscripten_GLES_GetSwapInterval(SDL_VideoDevice *_this, int *interval)
{
+ const int pending = Emscripten_GetPendingSwapInterval();
+ if (pending >= 0) {
+ *interval = pending;
+ return true; // we're planning to set it to this once the system settles down.
+ }
+
int mode, value;
emscripten_get_main_loop_timing(&mode, &value);
diff --git a/src/video/emscripten/SDL_emscriptenvideo.c b/src/video/emscripten/SDL_emscriptenvideo.c
index 942809c4a26cc..7fa44acae5e4a 100644
--- a/src/video/emscripten/SDL_emscriptenvideo.c
+++ b/src/video/emscripten/SDL_emscriptenvideo.c
@@ -438,6 +438,11 @@ bool Emscripten_ShouldSetSwapInterval(int interval)
return true;
}
+int Emscripten_GetPendingSwapInterval(void)
+{
+ return pending_swap_interval;
+}
+
static void Emscripten_PumpEvents(SDL_VideoDevice *_this)
{
if (!pumpevents_has_run) {
diff --git a/src/video/emscripten/SDL_emscriptenvideo.h b/src/video/emscripten/SDL_emscriptenvideo.h
index 77ed61815f069..319962a0e9cba 100644
--- a/src/video/emscripten/SDL_emscriptenvideo.h
+++ b/src/video/emscripten/SDL_emscriptenvideo.h
@@ -57,5 +57,6 @@ struct SDL_WindowData
extern SDL_Window *Emscripten_fill_document_window;
bool Emscripten_ShouldSetSwapInterval(int interval);
+int Emscripten_GetPendingSwapInterval(void);
#endif // SDL_emscriptenvideo_h_