Просмотр исходного кода

Frontend: Don't call DoneCurrent if the context isnt already current

James Rowe 6 лет назад
Родитель
Сommit
f1da3ec584
2 измененных файлов с 13 добавлено и 2 удалено
  1. 4 1
      src/yuzu/bootmanager.cpp
  2. 9 1
      src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp

+ 4 - 1
src/yuzu/bootmanager.cpp

@@ -141,7 +141,7 @@ public:
     }
 
     ~OpenGLSharedContext() {
-        context->doneCurrent();
+        DoneCurrent();
     }
 
     void SwapBuffers() override {
@@ -156,6 +156,9 @@ public:
     }
 
     void DoneCurrent() override {
+        if (!is_current) {
+            return;
+        }
         context->doneCurrent();
         is_current = false;
     }

+ 9 - 1
src/yuzu_cmd/emu_window/emu_window_sdl2_gl.cpp

@@ -37,16 +37,24 @@ public:
     }
 
     void MakeCurrent() override {
-        SDL_GL_MakeCurrent(window, context);
+        if (is_current) {
+            return;
+        }
+        is_current = SDL_GL_MakeCurrent(window, context) == 0;
     }
 
     void DoneCurrent() override {
+        if (!is_current) {
+            return;
+        }
         SDL_GL_MakeCurrent(window, nullptr);
+        is_current = false;
     }
 
 private:
     SDL_Window* window;
     SDL_GLContext context;
+    bool is_current = false;
 };
 
 bool EmuWindow_SDL2_GL::SupportsRequiredGLExtensions() {