فهرست منبع

Fixed SDL minimizing. Do not pause SDL audio as it may be bugged, instead mix silence into the audio stream.

Lasse Öörni 13 سال پیش
والد
کامیت
4b12319ee0
2فایلهای تغییر یافته به همراه29 افزوده شده و 20 حذف شده
  1. 1 3
      Engine/Audio/Audio.cpp
  2. 28 17
      Engine/Input/Input.cpp

+ 1 - 3
Engine/Audio/Audio.cpp

@@ -405,9 +405,7 @@ void Audio::Stop()
     if (!playing_)
     if (!playing_)
         return;
         return;
     
     
-    #ifdef USE_OPENGL
-    SDL_PauseAudioDevice(stream_, 1);
-    #else
+    #ifndef USE_OPENGL
     if (stream_)
     if (stream_)
         ((AudioStream*)stream_)->StopPlayback();
         ((AudioStream*)stream_)->StopPlayback();
     #endif
     #endif

+ 28 - 17
Engine/Input/Input.cpp

@@ -841,28 +841,36 @@ void Input::HandleSDLEvent(void* sdlEvent)
         break;
         break;
         
         
     case SDL_WINDOWEVENT:
     case SDL_WINDOWEVENT:
-        if (evt.window.event == SDL_WINDOWEVENT_CLOSE)
+        input = GetInputInstance(evt.window.windowID);
+        if (input)
         {
         {
-            input = GetInputInstance(evt.window.windowID);
-            if (input)
+            switch (evt.window.event)
+            {
+            case SDL_WINDOWEVENT_CLOSE:
                 input->GetSubsystem<Graphics>()->Close();
                 input->GetSubsystem<Graphics>()->Close();
-        }
-        #ifdef ANDROID
-        if (evt.window.event == SDL_WINDOWEVENT_SURFACE_LOST)
-        {
-            input = GetInputInstance(evt.window.windowID);
-            // Mark GPU objects lost
-            if (input)
+                break;
+                
+            case SDL_WINDOWEVENT_MINIMIZED:
+                input->minimized_ = true;
+                break;
+                
+            case SDL_WINDOWEVENT_RESTORED:
+                input->minimized_ = false;
+                break;
+                
+            #ifdef ANDROID
+            case SDL_WINDOWEVENT_SURFACE_LOST:
+                // Mark GPU objects lost
                 input->graphics_->Release(false, false);
                 input->graphics_->Release(false, false);
-        }
-        if (evt.window.event == SDL_WINDOWEVENT_SURFACE_CREATED)
-        {
-            input = GetInputInstance(evt.window.windowID);
-            // Restore GPU objects
-            if (input)
+                break;
+                
+            case SDL_WINDOWEVENT_SURFACE_CREATED:
+                // Restore GPU objects
                 input->graphics_->Restore();
                 input->graphics_->Restore();
+                break;
+            #endif
+            }
         }
         }
-        #endif
         break;
         break;
     }
     }
 }
 }
@@ -895,6 +903,9 @@ void Input::HandleScreenMode(StringHash eventType, VariantMap& eventData)
     #else
     #else
     SetClipCursor(true);
     SetClipCursor(true);
     #endif
     #endif
+    
+    // After setting new screen mode we never should be minimized
+    minimized_ = false;
 }
 }
 
 
 void Input::HandleBeginFrame(StringHash eventType, VariantMap& eventData)
 void Input::HandleBeginFrame(StringHash eventType, VariantMap& eventData)