Merge pull request #2054 from bunnei/scope-context-refactor
frontend: Refactor ScopeAcquireWindowContext out of renderer_opengl.
This commit is contained in:
		| @@ -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 | ||||
|   | ||||
							
								
								
									
										18
									
								
								src/core/frontend/scope_acquire_window_context.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								src/core/frontend/scope_acquire_window_context.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
							
								
								
									
										23
									
								
								src/core/frontend/scope_acquire_window_context.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								src/core/frontend/scope_acquire_window_context.h
									
									
									
									
									
										Normal file
									
								
							| @@ -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 | ||||
| @@ -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(); | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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); | ||||
|   | ||||
| @@ -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: | ||||
|   | ||||
		Reference in New Issue
	
	Block a user