frontend: Refactor ScopeAcquireWindowContext out of renderer_opengl.
This commit is contained in:
parent
d5a4707f65
commit
045b0b70b6
|
@ -95,6 +95,8 @@ add_library(core STATIC
|
||||||
frontend/framebuffer_layout.cpp
|
frontend/framebuffer_layout.cpp
|
||||||
frontend/framebuffer_layout.h
|
frontend/framebuffer_layout.h
|
||||||
frontend/input.h
|
frontend/input.h
|
||||||
|
frontend/scope_acquire_window_context.cpp
|
||||||
|
frontend/scope_acquire_window_context.h
|
||||||
gdbstub/gdbstub.cpp
|
gdbstub/gdbstub.cpp
|
||||||
gdbstub/gdbstub.h
|
gdbstub/gdbstub.h
|
||||||
hle/ipc.h
|
hle/ipc.h
|
||||||
|
|
|
@ -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
|
|
@ -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;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ScopeAcquireGLContext acquire_context{emu_window};
|
|
||||||
|
|
||||||
ConfigureFramebuffers(clear_state, use_color, use_depth || use_stencil, false,
|
ConfigureFramebuffers(clear_state, use_color, use_depth || use_stencil, false,
|
||||||
regs.clear_buffers.RT.Value());
|
regs.clear_buffers.RT.Value());
|
||||||
if (regs.clear_flags.scissor) {
|
if (regs.clear_flags.scissor) {
|
||||||
|
@ -678,8 +676,6 @@ void RasterizerOpenGL::DrawArrays() {
|
||||||
auto& gpu = Core::System::GetInstance().GPU().Maxwell3D();
|
auto& gpu = Core::System::GetInstance().GPU().Maxwell3D();
|
||||||
const auto& regs = gpu.regs;
|
const auto& regs = gpu.regs;
|
||||||
|
|
||||||
ScopeAcquireGLContext acquire_context{emu_window};
|
|
||||||
|
|
||||||
ConfigureFramebuffers(state);
|
ConfigureFramebuffers(state);
|
||||||
SyncColorMask();
|
SyncColorMask();
|
||||||
SyncFragmentColorClampState();
|
SyncFragmentColorClampState();
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "core/core.h"
|
#include "core/core.h"
|
||||||
#include "core/core_timing.h"
|
#include "core/core_timing.h"
|
||||||
#include "core/frontend/emu_window.h"
|
#include "core/frontend/emu_window.h"
|
||||||
|
#include "core/frontend/scope_acquire_window_context.h"
|
||||||
#include "core/memory.h"
|
#include "core/memory.h"
|
||||||
#include "core/perf_stats.h"
|
#include "core/perf_stats.h"
|
||||||
#include "core/settings.h"
|
#include "core/settings.h"
|
||||||
|
@ -97,18 +98,6 @@ static std::array<GLfloat, 3 * 2> MakeOrthographicMatrix(const float width, cons
|
||||||
return matrix;
|
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)
|
RendererOpenGL::RendererOpenGL(Core::Frontend::EmuWindow& window)
|
||||||
: VideoCore::RendererBase{window} {}
|
: VideoCore::RendererBase{window} {}
|
||||||
|
|
||||||
|
@ -117,7 +106,6 @@ RendererOpenGL::~RendererOpenGL() = default;
|
||||||
/// Swap buffers (render frame)
|
/// Swap buffers (render frame)
|
||||||
void RendererOpenGL::SwapBuffers(
|
void RendererOpenGL::SwapBuffers(
|
||||||
std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) {
|
std::optional<std::reference_wrapper<const Tegra::FramebufferConfig>> framebuffer) {
|
||||||
ScopeAcquireGLContext acquire_context{render_window};
|
|
||||||
|
|
||||||
Core::System::GetInstance().GetPerfStats().EndSystemFrame();
|
Core::System::GetInstance().GetPerfStats().EndSystemFrame();
|
||||||
|
|
||||||
|
@ -506,7 +494,7 @@ static void APIENTRY DebugHandler(GLenum source, GLenum type, GLuint id, GLenum
|
||||||
|
|
||||||
/// Initialize the renderer
|
/// Initialize the renderer
|
||||||
bool RendererOpenGL::Init() {
|
bool RendererOpenGL::Init() {
|
||||||
ScopeAcquireGLContext acquire_context{render_window};
|
Core::Frontend::ScopeAcquireWindowContext acquire_context{render_window};
|
||||||
|
|
||||||
if (GLAD_GL_KHR_debug) {
|
if (GLAD_GL_KHR_debug) {
|
||||||
glEnable(GL_DEBUG_OUTPUT);
|
glEnable(GL_DEBUG_OUTPUT);
|
||||||
|
|
|
@ -39,16 +39,6 @@ struct ScreenInfo {
|
||||||
TextureInfo texture;
|
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 {
|
class RendererOpenGL : public VideoCore::RendererBase {
|
||||||
public:
|
public:
|
||||||
explicit RendererOpenGL(Core::Frontend::EmuWindow& window);
|
explicit RendererOpenGL(Core::Frontend::EmuWindow& window);
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "configuration/configure_per_general.h"
|
#include "configuration/configure_per_general.h"
|
||||||
#include "core/file_sys/vfs.h"
|
#include "core/file_sys/vfs.h"
|
||||||
#include "core/file_sys/vfs_real.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/acc/profile_manager.h"
|
||||||
#include "core/hle/service/am/applets/applets.h"
|
#include "core/hle/service/am/applets/applets.h"
|
||||||
#include "core/hle/service/hid/controllers/npad.h"
|
#include "core/hle/service/hid/controllers/npad.h"
|
||||||
|
@ -747,14 +748,16 @@ bool GMainWindow::LoadROM(const QString& filename) {
|
||||||
ShutdownGame();
|
ShutdownGame();
|
||||||
|
|
||||||
render_window->InitRenderTarget();
|
render_window->InitRenderTarget();
|
||||||
render_window->MakeCurrent();
|
|
||||||
|
|
||||||
|
{
|
||||||
|
Core::Frontend::ScopeAcquireWindowContext acquire_context{*render_window};
|
||||||
if (!gladLoadGL()) {
|
if (!gladLoadGL()) {
|
||||||
QMessageBox::critical(this, tr("Error while initializing OpenGL 4.3 Core!"),
|
QMessageBox::critical(this, tr("Error while initializing OpenGL 4.3 Core!"),
|
||||||
tr("Your GPU may not support OpenGL 4.3, or you do not "
|
tr("Your GPU may not support OpenGL 4.3, or you do not "
|
||||||
"have the latest graphics driver."));
|
"have the latest graphics driver."));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QStringList unsupported_gl_extensions = GetUnsupportedGLExtensions();
|
QStringList unsupported_gl_extensions = GetUnsupportedGLExtensions();
|
||||||
if (!unsupported_gl_extensions.empty()) {
|
if (!unsupported_gl_extensions.empty()) {
|
||||||
|
@ -794,8 +797,6 @@ bool GMainWindow::LoadROM(const QString& filename) {
|
||||||
"wiki</a>. This message will not be shown again."));
|
"wiki</a>. This message will not be shown again."));
|
||||||
}
|
}
|
||||||
|
|
||||||
render_window->DoneCurrent();
|
|
||||||
|
|
||||||
if (result != Core::System::ResultStatus::Success) {
|
if (result != Core::System::ResultStatus::Success) {
|
||||||
switch (result) {
|
switch (result) {
|
||||||
case Core::System::ResultStatus::ErrorGetLoader:
|
case Core::System::ResultStatus::ErrorGetLoader:
|
||||||
|
|
Reference in New Issue