From a9e5d7a496be5d864a07cfaa32f3bb557e0f1f60 Mon Sep 17 00:00:00 2001 From: Doug Johnson Date: Thu, 12 May 2016 01:33:33 -0600 Subject: [PATCH] Add GLX context for linux platform --- src/xenia/ui/gl/gl_context.h | 10 +++++----- src/xenia/ui/gl/gl_context_x11.cc | 14 +++++--------- src/xenia/ui/gl/gl_context_x11.h | 1 + 3 files changed, 11 insertions(+), 14 deletions(-) diff --git a/src/xenia/ui/gl/gl_context.h b/src/xenia/ui/gl/gl_context.h index b0cb3a1be..8e49b80df 100644 --- a/src/xenia/ui/gl/gl_context.h +++ b/src/xenia/ui/gl/gl_context.h @@ -43,13 +43,13 @@ class GLContext : public GraphicsContext { ImmediateDrawer* immediate_drawer() override; - bool is_current() = 0; - bool MakeCurrent() = 0; - void ClearCurrent() = 0; + virtual bool is_current() override = 0; + virtual bool MakeCurrent() override = 0; + virtual void ClearCurrent() override = 0; bool WasLost() override; - void BeginSwap() = 0; - void EndSwap() = 0; + virtual void BeginSwap() override = 0; + virtual void EndSwap() override = 0; std::unique_ptr Capture() override; Blitter* blitter() { return &blitter_; } diff --git a/src/xenia/ui/gl/gl_context_x11.cc b/src/xenia/ui/gl/gl_context_x11.cc index 5c582b92d..bc35685da 100644 --- a/src/xenia/ui/gl/gl_context_x11.cc +++ b/src/xenia/ui/gl/gl_context_x11.cc @@ -29,10 +29,6 @@ namespace ui { namespace gl { -DEFINE_bool(disable_gl_context_reset, false, - "Do not aggressively reset the GL context (helps with capture " - "programs such as OBS or FRAPS)."); -DEFINE_bool(gl_debug, false, "Enable OpenGL debug validation layer."); thread_local GLEWContext* tls_glew_context_ = nullptr; thread_local GLXEWContext* tls_glxew_context_ = nullptr; @@ -40,6 +36,7 @@ extern "C" GLEWContext* glewGetContext() { return tls_glew_context_; } extern "C" GLXEWContext* glxewGetContext() { return tls_glxew_context_; } + std::unique_ptr GLContext::Create(GraphicsProvider* provider, Window* target_window, GLContext* share_context) { @@ -52,11 +49,10 @@ std::unique_ptr GLContext::Create(GraphicsProvider* provider, return context; } - std::unique_ptr GLContext::CreateOffscreen( GraphicsProvider* provider, GLContext* parent_context) { return GLXContext::CreateOffscreen(provider, - dynamic_cast(parent_context)); + static_cast(parent_context)); } GLXContext::GLXContext(GraphicsProvider* provider, Window* target_window) @@ -152,7 +148,7 @@ bool GLXContext::Initialize(GLContext* share_context) { GLX_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, robust_access_supported_ ? GLX_LOSE_CONTEXT_ON_RESET_ARB : 0, 0}; - GLXContext* share_context_glx = dynamic_cast(share_context); + GLXContext* share_context_glx = static_cast(share_context); glx_context_ = glXCreateContextAttribsARB( display, nullptr, share_context ? share_context_glx->glx_context_ : nullptr, True, @@ -277,7 +273,7 @@ std::unique_ptr GLXContext::CreateOffscreen( -bool GLContext::is_current() { +bool GLXContext::is_current() { return tls_glew_context_ == glew_context_.get(); } @@ -328,7 +324,7 @@ void GLXContext::BeginSwap() { void GLXContext::EndSwap() { SCOPE_profile_cpu_i("gpu", "xe::ui::gl::GLXContext::EndSwap"); - glXSwapBuffers(disp_, _xid); + glXSwapBuffers(disp_, xid_); } } // namespace gl diff --git a/src/xenia/ui/gl/gl_context_x11.h b/src/xenia/ui/gl/gl_context_x11.h index ff61e1367..789df284f 100644 --- a/src/xenia/ui/gl/gl_context_x11.h +++ b/src/xenia/ui/gl/gl_context_x11.h @@ -37,6 +37,7 @@ class GLXContext : public GLContext { bool is_current() override; + bool MakeCurrent() override; void ClearCurrent() override;