mirror of https://github.com/encounter/SDL.git
Android: move static variable isPaused/isPausing to SDL_VideoData structure
- remove unneed check to Android_Window->driverdata - add window check into context_backup/restore
This commit is contained in:
parent
291f6006a1
commit
e994be5833
src
|
@ -800,7 +800,7 @@ JNIEXPORT void JNICALL SDL_JAVA_INTERFACE(onNativeSurfaceCreated)(JNIEnv *env, j
|
||||||
{
|
{
|
||||||
SDL_LockMutex(Android_ActivityMutex);
|
SDL_LockMutex(Android_ActivityMutex);
|
||||||
|
|
||||||
if (Android_Window && Android_Window->driverdata)
|
if (Android_Window)
|
||||||
{
|
{
|
||||||
SDL_WindowData *data = (SDL_WindowData *) Android_Window->driverdata;
|
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);
|
SDL_LockMutex(Android_ActivityMutex);
|
||||||
|
|
||||||
if (Android_Window && Android_Window->driverdata)
|
if (Android_Window)
|
||||||
{
|
{
|
||||||
SDL_VideoDevice *_this = SDL_GetVideoDevice();
|
SDL_VideoDevice *_this = SDL_GetVideoDevice();
|
||||||
SDL_WindowData *data = (SDL_WindowData *) Android_Window->driverdata;
|
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);
|
SDL_LockMutex(Android_ActivityMutex);
|
||||||
|
|
||||||
if (Android_Window && Android_Window->driverdata)
|
if (Android_Window)
|
||||||
{
|
{
|
||||||
SDL_VideoDevice *_this = SDL_GetVideoDevice();
|
SDL_VideoDevice *_this = SDL_GetVideoDevice();
|
||||||
SDL_WindowData *data = (SDL_WindowData *) Android_Window->driverdata;
|
SDL_WindowData *data = (SDL_WindowData *) Android_Window->driverdata;
|
||||||
|
|
|
@ -59,6 +59,7 @@ SDL_NumberOfEvents(Uint32 type)
|
||||||
static void
|
static void
|
||||||
android_egl_context_restore(SDL_Window *window)
|
android_egl_context_restore(SDL_Window *window)
|
||||||
{
|
{
|
||||||
|
if (window) {
|
||||||
SDL_Event event;
|
SDL_Event event;
|
||||||
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||||
if (SDL_GL_MakeCurrent(window, (SDL_GLContext) data->egl_context) < 0) {
|
if (SDL_GL_MakeCurrent(window, (SDL_GLContext) data->egl_context) < 0) {
|
||||||
|
@ -68,16 +69,19 @@ android_egl_context_restore(SDL_Window *window)
|
||||||
event.type = SDL_RENDER_DEVICE_RESET;
|
event.type = SDL_RENDER_DEVICE_RESET;
|
||||||
SDL_PushEvent(&event);
|
SDL_PushEvent(&event);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
android_egl_context_backup(SDL_Window *window)
|
android_egl_context_backup(SDL_Window *window)
|
||||||
{
|
{
|
||||||
|
if (window) {
|
||||||
/* Keep a copy of the EGL Context so we can try to restore it when we resume */
|
/* Keep a copy of the EGL Context so we can try to restore it when we resume */
|
||||||
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
|
||||||
data->egl_context = SDL_GL_GetCurrentContext();
|
data->egl_context = SDL_GL_GetCurrentContext();
|
||||||
/* We need to do this so the EGLSurface can be freed */
|
/* We need to do this so the EGLSurface can be freed */
|
||||||
SDL_GL_MakeCurrent(window, NULL);
|
SDL_GL_MakeCurrent(window, NULL);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,10 +97,9 @@ android_egl_context_backup(SDL_Window *window)
|
||||||
void
|
void
|
||||||
Android_PumpEvents(_THIS)
|
Android_PumpEvents(_THIS)
|
||||||
{
|
{
|
||||||
static int isPaused = 0;
|
SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
|
||||||
static int isPausing = 0;
|
|
||||||
|
|
||||||
if (isPaused) {
|
if (videodata->isPaused) {
|
||||||
|
|
||||||
/* Make sure this is the last thing we do before pausing */
|
/* Make sure this is the last thing we do before pausing */
|
||||||
SDL_LockMutex(Android_ActivityMutex);
|
SDL_LockMutex(Android_ActivityMutex);
|
||||||
|
@ -108,7 +111,7 @@ Android_PumpEvents(_THIS)
|
||||||
|
|
||||||
if (SDL_SemWait(Android_ResumeSem) == 0) {
|
if (SDL_SemWait(Android_ResumeSem) == 0) {
|
||||||
|
|
||||||
isPaused = 0;
|
videodata->isPaused = 0;
|
||||||
|
|
||||||
ANDROIDAUDIO_ResumeDevices();
|
ANDROIDAUDIO_ResumeDevices();
|
||||||
openslES_ResumeDevices();
|
openslES_ResumeDevices();
|
||||||
|
@ -126,16 +129,16 @@ Android_PumpEvents(_THIS)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} 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'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 */
|
||||||
if (SDL_NumberOfEvents(SDL_APP_DIDENTERBACKGROUND) > SDL_SemValue(Android_PauseSem)) {
|
if (SDL_NumberOfEvents(SDL_APP_DIDENTERBACKGROUND) > SDL_SemValue(Android_PauseSem)) {
|
||||||
isPausing = 1;
|
videodata->isPausing = 1;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
isPausing = 0;
|
videodata->isPausing = 0;
|
||||||
isPaused = 1;
|
videodata->isPaused = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -146,12 +149,12 @@ Android_PumpEvents(_THIS)
|
||||||
void
|
void
|
||||||
Android_PumpEvents(_THIS)
|
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) {
|
if (SDL_SemTryWait(Android_ResumeSem) == 0) {
|
||||||
|
|
||||||
isPaused = 0;
|
videodata->isPaused = 0;
|
||||||
|
|
||||||
ANDROIDAUDIO_ResumeDevices();
|
ANDROIDAUDIO_ResumeDevices();
|
||||||
openslES_ResumeDevices();
|
openslES_ResumeDevices();
|
||||||
|
@ -178,7 +181,7 @@ Android_PumpEvents(_THIS)
|
||||||
ANDROIDAUDIO_PauseDevices();
|
ANDROIDAUDIO_PauseDevices();
|
||||||
openslES_PauseDevices();
|
openslES_PauseDevices();
|
||||||
|
|
||||||
isPaused = 1;
|
videodata->isPaused = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,8 +172,12 @@ VideoBootStrap Android_bootstrap = {
|
||||||
int
|
int
|
||||||
Android_VideoInit(_THIS)
|
Android_VideoInit(_THIS)
|
||||||
{
|
{
|
||||||
|
SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
|
||||||
SDL_DisplayMode mode;
|
SDL_DisplayMode mode;
|
||||||
|
|
||||||
|
videodata->isPaused = SDL_FALSE;
|
||||||
|
videodata->isPausing = SDL_FALSE;
|
||||||
|
|
||||||
mode.format = Android_ScreenFormat;
|
mode.format = Android_ScreenFormat;
|
||||||
mode.w = Android_DeviceWidth;
|
mode.w = Android_DeviceWidth;
|
||||||
mode.h = Android_DeviceHeight;
|
mode.h = Android_DeviceHeight;
|
||||||
|
|
|
@ -35,6 +35,8 @@ extern void Android_SetScreenResolution(SDL_Window *window, int surfaceWidth, in
|
||||||
typedef struct SDL_VideoData
|
typedef struct SDL_VideoData
|
||||||
{
|
{
|
||||||
SDL_Rect textRect;
|
SDL_Rect textRect;
|
||||||
|
int isPaused;
|
||||||
|
int isPausing;
|
||||||
} SDL_VideoData;
|
} SDL_VideoData;
|
||||||
|
|
||||||
extern int Android_SurfaceWidth;
|
extern int Android_SurfaceWidth;
|
||||||
|
|
Loading…
Reference in New Issue