Android: fix call of glFinish without context.
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.
parent
f3a547d00a
commit
45a9b5fa2e
|
@ -1162,23 +1162,11 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativeQuit)(
|
||||||
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativePause)(
|
JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(nativePause)(
|
||||||
JNIEnv *env, jclass cls)
|
JNIEnv *env, jclass cls)
|
||||||
{
|
{
|
||||||
SDL_LockMutex(Android_ActivityMutex);
|
|
||||||
|
|
||||||
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativePause()");
|
__android_log_print(ANDROID_LOG_VERBOSE, "SDL", "nativePause()");
|
||||||
|
|
||||||
if (Android_Window) {
|
/* Signal the pause semaphore so the event loop knows to pause and (optionally) block itself.
|
||||||
SDL_SendWindowEvent(Android_Window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
|
* Sometimes 2 pauses can be queued (eg pause/resume/pause), so it's always increased. */
|
||||||
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. */
|
|
||||||
SDL_SemPost(Android_PauseSem);
|
SDL_SemPost(Android_PauseSem);
|
||||||
|
|
||||||
SDL_UnlockMutex(Android_ActivityMutex);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Resume */
|
/* Resume */
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include "SDL_androidkeyboard.h"
|
#include "SDL_androidkeyboard.h"
|
||||||
#include "SDL_androidwindow.h"
|
#include "SDL_androidwindow.h"
|
||||||
#include "../SDL_sysvideo.h"
|
#include "../SDL_sysvideo.h"
|
||||||
|
#include "../../events/SDL_events_c.h"
|
||||||
|
|
||||||
/* Can't include sysaudio "../../audio/android/SDL_androidaudio.h"
|
/* Can't include sysaudio "../../audio/android/SDL_androidaudio.h"
|
||||||
* because of THIS redefinition */
|
* because of THIS redefinition */
|
||||||
|
@ -129,6 +130,14 @@ Android_PumpEvents_Blocking(_THIS)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (videodata->isPausing || SDL_SemTryWait(Android_PauseSem) == 0) {
|
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'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)
|
* we need to make sure that the very last event (of the first pause sequence, if several)
|
||||||
* has reached the app */
|
* has reached the app */
|
||||||
|
@ -187,6 +196,14 @@ Android_PumpEvents_NonBlocking(_THIS)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (videodata->isPausing || SDL_SemTryWait(Android_PauseSem) == 0) {
|
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'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)
|
* we need to make sure that the very last event (of the first pause sequence, if several)
|
||||||
* has reached the app */
|
* has reached the app */
|
||||||
|
|
Loading…
Reference in New Issue