From ec053ec4f8d861b1a70a5c00bc4197c349132a52 Mon Sep 17 00:00:00 2001
From: Sylvain <[EMAIL REDACTED]>
Date: Wed, 12 Apr 2023 10:21:49 +0200
Subject: [PATCH] Android: need to save/restore the swap interval / vsync
otherwise, there is a difference of framerate, either with gles2 or
SDL_renderer (testspriteminimal, testgles2).
---
src/video/android/SDL_androidevents.c | 13 +++++++++++++
src/video/android/SDL_androidwindow.h | 2 ++
2 files changed, 15 insertions(+)
diff --git a/src/video/android/SDL_androidevents.c b/src/video/android/SDL_androidevents.c
index 48b50fe96c9e..a9e7bef40874 100644
--- a/src/video/android/SDL_androidevents.c
+++ b/src/video/android/SDL_androidevents.c
@@ -82,15 +82,28 @@ static void android_egl_context_restore(SDL_Window *window)
SDL_PushEvent(&event);
}
data->backup_done = 0;
+
+ if (data->has_swap_interval) {
+ SDL_GL_SetSwapInterval(data->swap_interval);
+ }
+
}
}
static void android_egl_context_backup(SDL_Window *window)
{
if (window) {
+ int interval = 0;
/* Keep a copy of the EGL Context so we can try to restore it when we resume */
SDL_WindowData *data = window->driverdata;
data->egl_context = SDL_GL_GetCurrentContext();
+
+ /* Save/Restore the swap interval / vsync */
+ if (SDL_GL_GetSwapInterval(&interval) == 0) {
+ data->has_swap_interval = 1;
+ data->swap_interval = interval;
+ }
+
/* We need to do this so the EGLSurface can be freed */
SDL_GL_MakeCurrent(window, NULL);
data->backup_done = 1;
diff --git a/src/video/android/SDL_androidwindow.h b/src/video/android/SDL_androidwindow.h
index a06f4f3e2096..6b95df333c67 100644
--- a/src/video/android/SDL_androidwindow.h
+++ b/src/video/android/SDL_androidwindow.h
@@ -41,6 +41,8 @@ struct SDL_WindowData
#ifdef SDL_VIDEO_OPENGL_EGL
EGLSurface egl_surface;
EGLContext egl_context; /* We use this to preserve the context when losing focus */
+ int has_swap_interval; /* Save/Restore the swap interval / vsync */
+ int swap_interval;
#endif
SDL_bool backup_done;
ANativeWindow *native_window;