Browse Source

iOS: pause render when switching to background

Wei Mingzhi 9 years ago
parent
commit
13a924f863
3 changed files with 23 additions and 5 deletions
  1. 12 0
      input.c
  2. 10 5
      video.c
  3. 1 0
      video.h

+ 12 - 0
input.c

@@ -906,7 +906,19 @@ PAL_EventFilter(
          VIDEO_Resize(lpEvent->window.data1, lpEvent->window.data2);
       }
       break;
+
+#ifdef __IOS__
+   case SDL_APP_WILLENTERBACKGROUND:
+      g_bRenderPaused = TRUE;
+      break;
+
+   case SDL_APP_WILLENTERFOREGROUND:
+      g_bRenderPaused = FALSE;
+      break;
+#endif
+
 #else
+           
    case SDL_VIDEORESIZE:
       //
       // resized the window

+ 10 - 5
video.c

@@ -35,6 +35,8 @@ static SDL_Renderer      *gpRenderer         = NULL;
 static SDL_Surface       *gpScreenReal       = NULL;
 #endif
 
+volatile BOOL g_bRenderPaused = FALSE;
+
 #if (defined (__SYMBIAN32__) && !defined (__S60_5X__)) || defined (PSP) || defined (GEKKO)
    static BOOL bScaleScreen = FALSE;
 #else
@@ -308,11 +310,14 @@ VIDEO_UpdateScreen(
 {
 #if SDL_VERSION_ATLEAST(2,0,0)
    // TODO
-   SDL_Texture *pTexture = SDL_CreateTextureFromSurface(gpRenderer, gpScreen);
-   SDL_RenderClear(gpRenderer);
-   SDL_RenderCopy(gpRenderer, pTexture, NULL/*srcrect*/, NULL/*dstrect*/);
-   SDL_RenderPresent(gpRenderer);
-   SDL_DestroyTexture(pTexture);
+   if (!g_bRenderPaused)
+   {
+      SDL_Texture *pTexture = SDL_CreateTextureFromSurface(gpRenderer, gpScreen);
+      SDL_RenderClear(gpRenderer);
+      SDL_RenderCopy(gpRenderer, pTexture, NULL/*srcrect*/, NULL/*dstrect*/);
+      SDL_RenderPresent(gpRenderer);
+      SDL_DestroyTexture(pTexture);
+   }
 #else
    SDL_Rect        srcrect, dstrect;
    short           offset = 240 - 200;

+ 1 - 0
video.h

@@ -31,6 +31,7 @@ extern "C"
 
 extern SDL_Surface *gpScreen;
 extern SDL_Surface *gpScreenBak;
+extern volatile BOOL g_bRenderPaused;
 
 INT
 #ifdef GEKKO // Rikku2000: Crash on compile, allready define on WIISDK