Skip to content

Commit

Permalink
Android: fix call of glFinish without context.
Browse files Browse the repository at this point in the history
Message in the log, when going to background:
"call to OpenGL ES API with no current context (logged once per thread)"

Because of SDL_WINDOWEVENT_MINIMIZED is sent from the Java Activity thread.
It calls SDL_RendererEventWatch(), _WindowEvent() and glFinish() without context.

Solution is to move sending of SDL_WINDOWEVENT_MINIMIZED to the SDL thread.
  • Loading branch information
1bsyl committed Dec 21, 2019
1 parent f3a547d commit 45a9b5f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 14 deletions.
16 changes: 2 additions & 14 deletions src/core/android/SDL_android.c
Expand Up @@ -1162,23 +1162,11 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeQuit)(
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativePause)(
JNIEnv *env, jclass cls)
{
SDL_LockMutex(Android_ActivityMutex);

__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativePause()");

if (Android_Window) {
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND);
}

/* *After* sending the relevant events, signal the pause semaphore
* so the event loop knows to pause and (optionally) block itself.
* Sometimes 2 pauses can be queued (eg pause/resume/pause), so it's
* always increased. */
/* Signal the pause semaphore so the event loop knows to pause and (optionally) block itself.
* Sometimes 2 pauses can be queued (eg pause/resume/pause), so it's always increased. */
SDL_SemPost(Android_PauseSem);

SDL_UnlockMutex(Android_ActivityMutex);
}

/* Resume */
Expand Down
17 changes: 17 additions & 0 deletions src/video/android/SDL_androidevents.c
Expand Up @@ -27,6 +27,7 @@
#include "SDL_androidkeyboard.h"
#include "SDL_androidwindow.h"
#include "../SDL_sysvideo.h"
#include "../../events/SDL_events_c.h"

/* Can't include sysaudio "../../audio/android/SDL_androidaudio.h"
* because of THIS redefinition */
Expand Down Expand Up @@ -129,6 +130,14 @@ Android_PumpEvents_Blocking(_THIS)
}
} else {
if (videodata->isPausing || SDL_SemTryWait(Android_PauseSem) == 0) {

/* Android_PauseSem was signaled */
if (videodata->isPausing == 0) {
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND);
}

/* 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 */
Expand Down Expand Up @@ -187,6 +196,14 @@ Android_PumpEvents_NonBlocking(_THIS)
}
} else {
if (videodata->isPausing || SDL_SemTryWait(Android_PauseSem) == 0) {

/* Android_PauseSem was signaled */
if (videodata->isPausing == 0) {
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND);
}

/* 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 */
Expand Down

0 comments on commit 45a9b5f

Please sign in to comment.