From e994be58337d5c0e9e8d4f49ed696c2bd6c0e1b8 Mon Sep 17 00:00:00 2001 From: Sylvain Becker Date: Wed, 16 Jan 2019 10:31:51 +0100 Subject: [PATCH] Android: move static variable isPaused/isPausing to SDL_VideoData structure - remove unneed check to Android_Window->driverdata - add window check into context_backup/restore --- src/core/android/SDL_android.c | 6 +-- src/video/android/SDL_androidevents.c | 53 ++++++++++++++------------- src/video/android/SDL_androidvideo.c | 6 ++- src/video/android/SDL_androidvideo.h | 4 +- 4 files changed, 39 insertions(+), 30 deletions(-) diff --git a/src/core/android/SDL_android.c b/src/core/android/SDL_android.c index c6795f03ffc8c..2136c1b1b0f3a 100644 --- a/src/core/android/SDL_android.c +++ b/src/core/android/SDL_android.c @@ -800,7 +800,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeSurfaceCreated)(JNIEnv *env, j { SDL_LockMutex(Android_ActivityMutex); - if (Android_Window && Android_Window->driverdata) + if (Android_Window) { SDL_WindowData *data = (SDL_WindowData *) Android_Window->driverdata; @@ -818,7 +818,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeSurfaceChanged)(JNIEnv *env, j { SDL_LockMutex(Android_ActivityMutex); - if (Android_Window && Android_Window->driverdata) + if (Android_Window) { SDL_VideoDevice *_this = SDL_GetVideoDevice(); SDL_WindowData *data = (SDL_WindowData *) Android_Window->driverdata; @@ -839,7 +839,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeSurfaceDestroyed)(JNIEnv *env, { SDL_LockMutex(Android_ActivityMutex); - if (Android_Window && Android_Window->driverdata) + if (Android_Window) { SDL_VideoDevice *_this = SDL_GetVideoDevice(); SDL_WindowData *data = (SDL_WindowData *) Android_Window->driverdata; diff --git a/src/video/android/SDL_androidevents.c b/src/video/android/SDL_androidevents.c index 1dba1495acfd6..a51fd218ade18 100644 --- a/src/video/android/SDL_androidevents.c +++ b/src/video/android/SDL_androidevents.c @@ -59,25 +59,29 @@ SDL_NumberOfEvents(Uint32 type) static void android_egl_context_restore(SDL_Window *window) { - SDL_Event event; - SDL_WindowData *data = (SDL_WindowData *) window->driverdata; - if (SDL_GL_MakeCurrent(window, (SDL_GLContext) data->egl_context) < 0) { - /* The context is no longer valid, create a new one */ - data->egl_context = (EGLContext) SDL_GL_CreateContext(window); - SDL_GL_MakeCurrent(window, (SDL_GLContext) data->egl_context); - event.type = SDL_RENDER_DEVICE_RESET; - SDL_PushEvent(&event); + if (window) { + SDL_Event event; + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + if (SDL_GL_MakeCurrent(window, (SDL_GLContext) data->egl_context) < 0) { + /* The context is no longer valid, create a new one */ + data->egl_context = (EGLContext) SDL_GL_CreateContext(window); + SDL_GL_MakeCurrent(window, (SDL_GLContext) data->egl_context); + event.type = SDL_RENDER_DEVICE_RESET; + SDL_PushEvent(&event); + } } } static void android_egl_context_backup(SDL_Window *window) { - /* Keep a copy of the EGL Context so we can try to restore it when we resume */ - SDL_WindowData *data = (SDL_WindowData *) window->driverdata; - data->egl_context = SDL_GL_GetCurrentContext(); - /* We need to do this so the EGLSurface can be freed */ - SDL_GL_MakeCurrent(window, NULL); + if (window) { + /* Keep a copy of the EGL Context so we can try to restore it when we resume */ + SDL_WindowData *data = (SDL_WindowData *) window->driverdata; + data->egl_context = SDL_GL_GetCurrentContext(); + /* We need to do this so the EGLSurface can be freed */ + SDL_GL_MakeCurrent(window, NULL); + } } @@ -93,10 +97,9 @@ android_egl_context_backup(SDL_Window *window) void Android_PumpEvents(_THIS) { - static int isPaused = 0; - static int isPausing = 0; + SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; - if (isPaused) { + if (videodata->isPaused) { /* Make sure this is the last thing we do before pausing */ SDL_LockMutex(Android_ActivityMutex); @@ -108,7 +111,7 @@ Android_PumpEvents(_THIS) if (SDL_SemWait(Android_ResumeSem) == 0) { - isPaused = 0; + videodata->isPaused = 0; ANDROIDAUDIO_ResumeDevices(); openslES_ResumeDevices(); @@ -126,16 +129,16 @@ Android_PumpEvents(_THIS) } } } else { - if (isPausing || SDL_SemTryWait(Android_PauseSem) == 0) { + if (videodata->isPausing || SDL_SemTryWait(Android_PauseSem) == 0) { /* We've been signaled to pause (potentially several times), but before we block ourselves, * we need to make sure that the very last event (of the first pause sequence, if several) * has reached the app */ if (SDL_NumberOfEvents(SDL_APP_DIDENTERBACKGROUND) > SDL_SemValue(Android_PauseSem)) { - isPausing = 1; + videodata->isPausing = 1; } else { - isPausing = 0; - isPaused = 1; + videodata->isPausing = 0; + videodata->isPaused = 1; } } } @@ -146,12 +149,12 @@ Android_PumpEvents(_THIS) void Android_PumpEvents(_THIS) { - static int isPaused = 0; + SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; - if (isPaused) { + if (videodata->isPaused) { if (SDL_SemTryWait(Android_ResumeSem) == 0) { - isPaused = 0; + videodata->isPaused = 0; ANDROIDAUDIO_ResumeDevices(); openslES_ResumeDevices(); @@ -178,7 +181,7 @@ Android_PumpEvents(_THIS) ANDROIDAUDIO_PauseDevices(); openslES_PauseDevices(); - isPaused = 1; + videodata->isPaused = 1; } } } diff --git a/src/video/android/SDL_androidvideo.c b/src/video/android/SDL_androidvideo.c index dcb65a91244e2..0050653ef1c77 100644 --- a/src/video/android/SDL_androidvideo.c +++ b/src/video/android/SDL_androidvideo.c @@ -172,7 +172,11 @@ VideoBootStrap Android_bootstrap = { int Android_VideoInit(_THIS) { - SDL_DisplayMode mode; + SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata; + SDL_DisplayMode mode; + + videodata->isPaused = SDL_FALSE; + videodata->isPausing = SDL_FALSE; mode.format = Android_ScreenFormat; mode.w = Android_DeviceWidth; diff --git a/src/video/android/SDL_androidvideo.h b/src/video/android/SDL_androidvideo.h index acb5ca280a0b3..d130f41f2c0c0 100644 --- a/src/video/android/SDL_androidvideo.h +++ b/src/video/android/SDL_androidvideo.h @@ -34,7 +34,9 @@ extern void Android_SetScreenResolution(SDL_Window *window, int surfaceWidth, in typedef struct SDL_VideoData { - SDL_Rect textRect; + SDL_Rect textRect; + int isPaused; + int isPausing; } SDL_VideoData; extern int Android_SurfaceWidth;