Skip to content

Commit

Permalink
Android: move static variable isPaused/isPausing to SDL_VideoData str…
Browse files Browse the repository at this point in the history
…ucture

- remove unneed check to Android_Window->driverdata
- add window check into context_backup/restore
  • Loading branch information
1bsyl committed Jan 16, 2019
1 parent 291f600 commit e994be5
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 30 deletions.
6 changes: 3 additions & 3 deletions src/core/android/SDL_android.c
Expand Up @@ -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;

Expand All @@ -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;
Expand All @@ -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;
Expand Down
53 changes: 28 additions & 25 deletions src/video/android/SDL_androidevents.c
Expand Up @@ -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);
}
}


Expand All @@ -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);
Expand All @@ -108,7 +111,7 @@ Android_PumpEvents(_THIS)

if (SDL_SemWait(Android_ResumeSem) == 0) {

isPaused = 0;
videodata->isPaused = 0;

ANDROIDAUDIO_ResumeDevices();
openslES_ResumeDevices();
Expand All @@ -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;
}
}
}
Expand All @@ -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();
Expand All @@ -178,7 +181,7 @@ Android_PumpEvents(_THIS)
ANDROIDAUDIO_PauseDevices();
openslES_PauseDevices();

isPaused = 1;
videodata->isPaused = 1;
}
}
}
Expand Down
6 changes: 5 additions & 1 deletion src/video/android/SDL_androidvideo.c
Expand Up @@ -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;
Expand Down
4 changes: 3 additions & 1 deletion src/video/android/SDL_androidvideo.h
Expand Up @@ -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;
Expand Down

0 comments on commit e994be5

Please sign in to comment.