summaryrefslogtreecommitdiffstats
path: root/src/yuzu_tester/emu_window
diff options
context:
space:
mode:
authorJames Rowe <jroweboy@gmail.com>2020-03-25 05:57:36 +0100
committerJames Rowe <jroweboy@gmail.com>2020-03-26 06:32:42 +0100
commitcf9c94d4017120b618194a720942ef4e5c8289bd (patch)
tree30cbea0216626e3a1db1a68120b54e6bd53804f5 /src/yuzu_tester/emu_window
parentFrontend/GPU: Refactor context management (diff)
downloadyuzu-cf9c94d4017120b618194a720942ef4e5c8289bd.tar
yuzu-cf9c94d4017120b618194a720942ef4e5c8289bd.tar.gz
yuzu-cf9c94d4017120b618194a720942ef4e5c8289bd.tar.bz2
yuzu-cf9c94d4017120b618194a720942ef4e5c8289bd.tar.lz
yuzu-cf9c94d4017120b618194a720942ef4e5c8289bd.tar.xz
yuzu-cf9c94d4017120b618194a720942ef4e5c8289bd.tar.zst
yuzu-cf9c94d4017120b618194a720942ef4e5c8289bd.zip
Diffstat (limited to 'src/yuzu_tester/emu_window')
-rw-r--r--src/yuzu_tester/emu_window/emu_window_sdl2_hide.cpp42
-rw-r--r--src/yuzu_tester/emu_window/emu_window_sdl2_hide.h9
2 files changed, 33 insertions, 18 deletions
diff --git a/src/yuzu_tester/emu_window/emu_window_sdl2_hide.cpp b/src/yuzu_tester/emu_window/emu_window_sdl2_hide.cpp
index a1bdb1a12..a837430cc 100644
--- a/src/yuzu_tester/emu_window/emu_window_sdl2_hide.cpp
+++ b/src/yuzu_tester/emu_window/emu_window_sdl2_hide.cpp
@@ -102,8 +102,6 @@ EmuWindow_SDL2_Hide::EmuWindow_SDL2_Hide() {
LOG_INFO(Frontend, "yuzu-tester Version: {} | {}-{}", Common::g_build_fullname,
Common::g_scm_branch, Common::g_scm_desc);
Settings::LogSettings();
-
- DoneCurrent();
}
EmuWindow_SDL2_Hide::~EmuWindow_SDL2_Hide() {
@@ -114,14 +112,6 @@ EmuWindow_SDL2_Hide::~EmuWindow_SDL2_Hide() {
void EmuWindow_SDL2_Hide::PollEvents() {}
-void EmuWindow_SDL2_Hide::MakeCurrent() {
- SDL_GL_MakeCurrent(render_window, gl_context);
-}
-
-void EmuWindow_SDL2_Hide::DoneCurrent() {
- SDL_GL_MakeCurrent(render_window, nullptr);
-}
-
bool EmuWindow_SDL2_Hide::IsShown() const {
return false;
}
@@ -129,3 +119,35 @@ bool EmuWindow_SDL2_Hide::IsShown() const {
void EmuWindow_SDL2_Hide::RetrieveVulkanHandlers(void*, void*, void*) const {
UNREACHABLE();
}
+
+class SDLGLContext : public Core::Frontend::GraphicsContext {
+public:
+ explicit SDLGLContext() {
+ // create a hidden window to make the shared context against
+ window = SDL_CreateWindow(NULL, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 0, 0,
+ SDL_WINDOW_HIDDEN | SDL_WINDOW_OPENGL);
+ context = SDL_GL_CreateContext(window);
+ }
+
+ ~SDLGLContext() {
+ DoneCurrent();
+ SDL_GL_DeleteContext(context);
+ SDL_DestroyWindow(window);
+ }
+
+ void MakeCurrent() override {
+ SDL_GL_MakeCurrent(window, context);
+ }
+
+ void DoneCurrent() override {
+ SDL_GL_MakeCurrent(window, nullptr);
+ }
+
+private:
+ SDL_Window* window;
+ SDL_GLContext context;
+};
+
+std::unique_ptr<Core::Frontend::GraphicsContext> EmuWindow_SDL2_Hide::CreateSharedContext() const {
+ return std::make_unique<SDLGLContext>();
+}
diff --git a/src/yuzu_tester/emu_window/emu_window_sdl2_hide.h b/src/yuzu_tester/emu_window/emu_window_sdl2_hide.h
index b13e15309..9f5d04fca 100644
--- a/src/yuzu_tester/emu_window/emu_window_sdl2_hide.h
+++ b/src/yuzu_tester/emu_window/emu_window_sdl2_hide.h
@@ -16,12 +16,6 @@ public:
/// Polls window events
void PollEvents() override;
- /// Makes the graphics context current for the caller thread
- void MakeCurrent() override;
-
- /// Releases the GL context from the caller thread
- void DoneCurrent() override;
-
/// Whether the screen is being shown or not.
bool IsShown() const override;
@@ -29,8 +23,7 @@ public:
void RetrieveVulkanHandlers(void* get_instance_proc_addr, void* instance,
void* surface) const override;
- /// Whether the window is still open, and a close request hasn't yet been sent
- bool IsOpen() const;
+ std::unique_ptr<Core::Frontend::GraphicsContext> CreateSharedContext() const override;
private:
/// Whether the GPU and driver supports the OpenGL extension required