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

Merge pull request #3927 from jroweboy/fix-bug

Frontend: Remove tracking for context wrapper
bunnei 6 лет назад
Родитель
Сommit
024c84d2db
1 измененных файлов с 8 добавлено и 8 удалено
  1. 8 8
      src/yuzu/bootmanager.cpp

+ 8 - 8
src/yuzu/bootmanager.cpp

@@ -150,18 +150,19 @@ public:
     }
     }
 
 
     void MakeCurrent() override {
     void MakeCurrent() override {
-        if (is_current) {
-            return;
+        // We can't track the current state of the underlying context in this wrapper class because
+        // Qt may make the underlying context not current for one reason or another. In particular,
+        // the WebBrowser uses GL, so it seems to conflict if we aren't careful.
+        // Instead of always just making the context current (which does not have any caching to
+        // check if the underlying context is already current) we can check for the current context
+        // in the thread local data by calling `currentContext()` and checking if its ours.
+        if (QOpenGLContext::currentContext() != context.get()) {
+            context->makeCurrent(surface);
         }
         }
-        is_current = context->makeCurrent(surface);
     }
     }
 
 
     void DoneCurrent() override {
     void DoneCurrent() override {
-        if (!is_current) {
-            return;
-        }
         context->doneCurrent();
         context->doneCurrent();
-        is_current = false;
     }
     }
 
 
     QOpenGLContext* GetShareContext() {
     QOpenGLContext* GetShareContext() {
@@ -178,7 +179,6 @@ private:
     std::unique_ptr<QOpenGLContext> context;
     std::unique_ptr<QOpenGLContext> context;
     std::unique_ptr<QOffscreenSurface> offscreen_surface{};
     std::unique_ptr<QOffscreenSurface> offscreen_surface{};
     QSurface* surface;
     QSurface* surface;
-    bool is_current = false;
 };
 };
 
 
 class DummyContext : public Core::Frontend::GraphicsContext {};
 class DummyContext : public Core::Frontend::GraphicsContext {};