diff options
| -rw-r--r-- | src/core/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/core/frontend/scope_acquire_window_context.cpp | 18 | ||||
| -rw-r--r-- | src/core/frontend/scope_acquire_window_context.h | 23 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 4 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.cpp | 16 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.h | 10 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 17 | 
7 files changed, 54 insertions, 36 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt index aa9e05089..965c28787 100644 --- a/src/core/CMakeLists.txt +++ b/src/core/CMakeLists.txt @@ -95,6 +95,8 @@ add_library(core STATIC      frontend/framebuffer_layout.cpp      frontend/framebuffer_layout.h      frontend/input.h +    frontend/scope_acquire_window_context.cpp +    frontend/scope_acquire_window_context.h      gdbstub/gdbstub.cpp      gdbstub/gdbstub.h      hle/ipc.h diff --git a/src/core/frontend/scope_acquire_window_context.cpp b/src/core/frontend/scope_acquire_window_context.cpp new file mode 100644 index 000000000..3663dad17 --- /dev/null +++ b/src/core/frontend/scope_acquire_window_context.cpp @@ -0,0 +1,18 @@ +// Copyright 2019 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "core/frontend/emu_window.h" +#include "core/frontend/scope_acquire_window_context.h" + +namespace Core::Frontend { + +ScopeAcquireWindowContext::ScopeAcquireWindowContext(Core::Frontend::EmuWindow& emu_window_) +    : emu_window{emu_window_} { +    emu_window.MakeCurrent(); +} +ScopeAcquireWindowContext::~ScopeAcquireWindowContext() { +    emu_window.DoneCurrent(); +} + +} // namespace Core::Frontend diff --git a/src/core/frontend/scope_acquire_window_context.h b/src/core/frontend/scope_acquire_window_context.h new file mode 100644 index 000000000..2d9f6e825 --- /dev/null +++ b/src/core/frontend/scope_acquire_window_context.h @@ -0,0 +1,23 @@ +// Copyright 2019 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include "common/common_types.h" + +namespace Core::Frontend { + +class EmuWindow; + +/// Helper class to acquire/release window context within a given scope +class ScopeAcquireWindowContext : NonCopyable { +public: +    explicit ScopeAcquireWindowContext(Core::Frontend::EmuWindow& window); +    ~ScopeAcquireWindowContext(); + +private: +    Core::Frontend::EmuWindow& emu_window; +}; + +} // namespace Core::Frontend diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index d8e9df5db..6600ad528 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp @@ -643,8 +643,6 @@ void RasterizerOpenGL::Clear() {          return;      } -    ScopeAcquireGLContext acquire_context{emu_window}; -      ConfigureFramebuffers(clear_state, use_color, use_depth || use_stencil, false,                            regs.clear_buffers.RT.Value());      if (regs.clear_flags.scissor) { @@ -678,8 +676,6 @@ void RasterizerOpenGL::DrawArrays() {      auto& gpu = Core::System::GetInstance().GPU().Maxwell3D();      const auto& regs = gpu.regs; -    ScopeAcquireGLContext acquire_context{emu_window}; -      ConfigureFramebuffers(state);      SyncColorMask();      SyncFragmentColorClampState(); diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index c268c9686..e37b65b38 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp @@ -14,6 +14,7 @@  #include "core/core.h"  #include "core/core_timing.h"  #include "core/frontend/emu_window.h" +#include "core/frontend/scope_acquire_window_context.h"  #include "core/memory.h"  #include "core/perf_stats.h"  #include "core/settings.h" @@ -97,18 +98,6 @@ static std::array<GLfloat, 3 * 2> MakeOrthographicMatrix(const float width, cons      return matrix;  } -ScopeAcquireGLContext::ScopeAcquireGLContext(Core::Frontend::EmuWindow& emu_window_) -    : emu_window{emu_window_} { -    if (Settings::values.use_multi_core) { -        emu_window.MakeCurrent(); -    } -} -ScopeAcquireGLContext::~ScopeAcquireGLContext() { -    if (Settings::values.use_multi_core) { -        emu_window.DoneCurrent(); -    } -} -  RendererOpenGL::RendererOpenGL(Core::Frontend::EmuWindow& window)      : VideoCore::RendererBase{window} {} @@ -117,7 +106,6 @@ RendererOpenGL::~RendererOpenGL() = default;  /// Swap buffers (render frame)  void RendererOpenGL::SwapBuffers(      std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) { -    ScopeAcquireGLContext acquire_context{render_window};      Core::System::GetInstance().GetPerfStats().EndSystemFrame(); @@ -506,7 +494,7 @@ static void APIENTRY DebugHandler(GLenum source, GLenum type, GLuint id, GLenum  /// Initialize the renderer  bool RendererOpenGL::Init() { -    ScopeAcquireGLContext acquire_context{render_window}; +    Core::Frontend::ScopeAcquireWindowContext acquire_context{render_window};      if (GLAD_GL_KHR_debug) {          glEnable(GL_DEBUG_OUTPUT); diff --git a/src/video_core/renderer_opengl/renderer_opengl.h b/src/video_core/renderer_opengl/renderer_opengl.h index b85cc262f..1665018db 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.h +++ b/src/video_core/renderer_opengl/renderer_opengl.h @@ -39,16 +39,6 @@ struct ScreenInfo {      TextureInfo texture;  }; -/// Helper class to acquire/release OpenGL context within a given scope -class ScopeAcquireGLContext : NonCopyable { -public: -    explicit ScopeAcquireGLContext(Core::Frontend::EmuWindow& window); -    ~ScopeAcquireGLContext(); - -private: -    Core::Frontend::EmuWindow& emu_window; -}; -  class RendererOpenGL : public VideoCore::RendererBase {  public:      explicit RendererOpenGL(Core::Frontend::EmuWindow& window); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index ca6ddebcb..ab403b3ac 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -14,6 +14,7 @@  #include "configuration/configure_per_general.h"  #include "core/file_sys/vfs.h"  #include "core/file_sys/vfs_real.h" +#include "core/frontend/scope_acquire_window_context.h"  #include "core/hle/service/acc/profile_manager.h"  #include "core/hle/service/am/applets/applets.h"  #include "core/hle/service/hid/controllers/npad.h" @@ -747,13 +748,15 @@ bool GMainWindow::LoadROM(const QString& filename) {          ShutdownGame();      render_window->InitRenderTarget(); -    render_window->MakeCurrent(); -    if (!gladLoadGL()) { -        QMessageBox::critical(this, tr("Error while initializing OpenGL 4.3 Core!"), -                              tr("Your GPU may not support OpenGL 4.3, or you do not " -                                 "have the latest graphics driver.")); -        return false; +    { +        Core::Frontend::ScopeAcquireWindowContext acquire_context{*render_window}; +        if (!gladLoadGL()) { +            QMessageBox::critical(this, tr("Error while initializing OpenGL 4.3 Core!"), +                                  tr("Your GPU may not support OpenGL 4.3, or you do not " +                                     "have the latest graphics driver.")); +            return false; +        }      }      QStringList unsupported_gl_extensions = GetUnsupportedGLExtensions(); @@ -794,8 +797,6 @@ bool GMainWindow::LoadROM(const QString& filename) {                 "wiki</a>. This message will not be shown again."));      } -    render_window->DoneCurrent(); -      if (result != Core::System::ResultStatus::Success) {          switch (result) {          case Core::System::ResultStatus::ErrorGetLoader:  | 
