diff options
| author | Stenzek <stenzek@gmail.com> | 2018-10-03 23:02:45 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2018-10-20 21:11:34 +1000 |
| commit | 134d967be2dd4ba9531abb8ba8494c3ac423ca72 (patch) | |
| tree | 3486a0d8a8f5c1a141bccc1e9cc56306cde327b4 /Source/Core/VideoBackends | |
| parent | 74b82bab3b6e4e8a1799bbcbdc5244f20f4d2826 (diff) | |
Refactoring and cleanup of GLInterface (now GLContext)
Diffstat (limited to 'Source/Core/VideoBackends')
| -rw-r--r-- | Source/Core/VideoBackends/OGL/FramebufferManager.cpp | 4 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/OGLTexture.cpp | 1 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/PerfQuery.cpp | 9 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp | 8 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/Render.cpp | 40 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/SamplerCache.cpp | 6 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/TextureCache.cpp | 1 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/OGL/main.cpp | 20 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWOGLWindow.cpp | 31 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWOGLWindow.h | 2 | ||||
| -rw-r--r-- | Source/Core/VideoBackends/Software/SWmain.cpp | 6 |
11 files changed, 57 insertions, 71 deletions
diff --git a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp index a6cccdaaa2..1c1c976f70 100644 --- a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp +++ b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp @@ -9,7 +9,7 @@ #include "Common/Common.h" #include "Common/CommonTypes.h" -#include "Common/GL/GLInterfaceBase.h" +#include "Common/GL/GLContext.h" #include "Common/Logging/Log.h" #include "Common/MsgHandler.h" @@ -414,7 +414,7 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms glBindBuffer(GL_ARRAY_BUFFER, static_cast<VertexManager*>(g_vertex_manager.get())->GetVertexBufferHandle()); - if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGL) + if (!g_main_gl_context->IsGLES()) glEnable(GL_PROGRAM_POINT_SIZE); } diff --git a/Source/Core/VideoBackends/OGL/OGLTexture.cpp b/Source/Core/VideoBackends/OGL/OGLTexture.cpp index 1efb650eeb..fbe7f576c7 100644 --- a/Source/Core/VideoBackends/OGL/OGLTexture.cpp +++ b/Source/Core/VideoBackends/OGL/OGLTexture.cpp @@ -4,7 +4,6 @@ #include "Common/Assert.h" #include "Common/CommonTypes.h" -#include "Common/GL/GLInterfaceBase.h" #include "Common/MsgHandler.h" #include "VideoBackends/OGL/FramebufferManager.h" diff --git a/Source/Core/VideoBackends/OGL/PerfQuery.cpp b/Source/Core/VideoBackends/OGL/PerfQuery.cpp index b3b5df2265..30a6e1781b 100644 --- a/Source/Core/VideoBackends/OGL/PerfQuery.cpp +++ b/Source/Core/VideoBackends/OGL/PerfQuery.cpp @@ -6,7 +6,7 @@ #include "Common/CommonFuncs.h" #include "Common/CommonTypes.h" -#include "Common/GL/GLInterfaceBase.h" +#include "Common/GL/GLContext.h" #include "Common/GL/GLUtil.h" #include "VideoBackends/OGL/PerfQuery.h" @@ -17,11 +17,10 @@ namespace OGL { std::unique_ptr<PerfQueryBase> GetPerfQuery() { - if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3 && - GLExtensions::Supports("GL_NV_occlusion_query_samples")) + if (g_main_gl_context->IsGLES() && GLExtensions::Supports("GL_NV_occlusion_query_samples")) return std::make_unique<PerfQueryGLESNV>(); - if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) + if (g_main_gl_context->IsGLES()) return std::make_unique<PerfQueryGL>(GL_ANY_SAMPLES_PASSED); return std::make_unique<PerfQueryGL>(GL_SAMPLES_PASSED); @@ -266,4 +265,4 @@ void PerfQueryGLESNV::FlushResults() FlushOne(); } -} // namespace +} // namespace OGL diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 2d284ae4ef..ae930dddab 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -12,7 +12,7 @@ #include "Common/Assert.h" #include "Common/CommonTypes.h" #include "Common/FileUtil.h" -#include "Common/GL/GLInterfaceBase.h" +#include "Common/GL/GLContext.h" #include "Common/Logging/Log.h" #include "Common/MsgHandler.h" #include "Common/StringUtil.h" @@ -805,7 +805,7 @@ void ProgramShaderCache::CreateHeader() bool SharedContextAsyncShaderCompiler::WorkerThreadInitMainThread(void** param) { - std::unique_ptr<cInterfaceBase> context = GLInterface->CreateSharedContext(); + std::unique_ptr<GLContext> context = g_main_gl_context->CreateSharedContext(); if (!context) { PanicAlert("Failed to create shared context for shader compiling."); @@ -818,7 +818,7 @@ bool SharedContextAsyncShaderCompiler::WorkerThreadInitMainThread(void** param) bool SharedContextAsyncShaderCompiler::WorkerThreadInitWorkerThread(void* param) { - cInterfaceBase* context = static_cast<cInterfaceBase*>(param); + GLContext* context = static_cast<GLContext*>(param); if (!context->MakeCurrent()) return false; @@ -831,7 +831,7 @@ bool SharedContextAsyncShaderCompiler::WorkerThreadInitWorkerThread(void* param) void SharedContextAsyncShaderCompiler::WorkerThreadExit(void* param) { - cInterfaceBase* context = static_cast<cInterfaceBase*>(param); + GLContext* context = static_cast<GLContext*>(param); context->ClearCurrent(); delete context; } diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 27113a6b8b..18f9fbf322 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -16,7 +16,7 @@ #include "Common/Assert.h" #include "Common/Atomic.h" #include "Common/CommonTypes.h" -#include "Common/GL/GLInterfaceBase.h" +#include "Common/GL/GLContext.h" #include "Common/GL/GLUtil.h" #include "Common/Logging/LogManager.h" #include "Common/MathUtil.h" @@ -354,8 +354,8 @@ static void InitDriverInfo() // Init functions Renderer::Renderer() - : ::Renderer(static_cast<int>(std::max(GLInterface->GetBackBufferWidth(), 1u)), - static_cast<int>(std::max(GLInterface->GetBackBufferHeight(), 1u))) + : ::Renderer(static_cast<int>(std::max(g_main_gl_context->GetBackBufferWidth(), 1u)), + static_cast<int>(std::max(g_main_gl_context->GetBackBufferHeight(), 1u))) { bool bSuccess = true; @@ -365,7 +365,7 @@ Renderer::Renderer() InitDriverInfo(); - if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGL) + if (!g_main_gl_context->IsGLES()) { if (!GLExtensions::Supports("GL_ARB_framebuffer_object")) { @@ -500,7 +500,7 @@ Renderer::Renderer() g_Config.backend_info.bSupportsBPTCTextures = GLExtensions::Supports("GL_ARB_texture_compression_bptc"); - if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) + if (g_main_gl_context->IsGLES()) { g_ogl_config.SupportedESPointSize = GLExtensions::Supports("GL_OES_geometry_point_size") ? @@ -730,10 +730,9 @@ Renderer::Renderer() if (!g_ogl_config.bSupportsGLBufferStorage && !g_ogl_config.bSupportsGLPinnedMemory) { - OSD::AddMessage( - StringFromFormat("Your OpenGL driver does not support %s_buffer_storage.", - GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3 ? "EXT" : "ARB"), - 60000); + OSD::AddMessage(StringFromFormat("Your OpenGL driver does not support %s_buffer_storage.", + g_main_gl_context->IsGLES() ? "EXT" : "ARB"), + 60000); OSD::AddMessage("This device's performance will be terrible.", 60000); OSD::AddMessage("Please ask your device vendor for an updated OpenGL driver.", 60000); } @@ -761,7 +760,7 @@ Renderer::Renderer() // Handle VSync on/off s_vsync = g_ActiveConfig.IsVSync(); if (!DriverDetails::HasBug(DriverDetails::BUG_BROKEN_VSYNC)) - GLInterface->SwapInterval(s_vsync); + g_main_gl_context->SwapInterval(s_vsync); // Because of the fixed framebuffer size we need to disable the resolution // options while running @@ -1044,7 +1043,7 @@ u32 Renderer::AccessEFB(EFBAccessType type, u32 x, u32 y, u32 poke_data) std::unique_ptr<u32[]> colorMap(new u32[targetPixelRcWidth * targetPixelRcHeight]); - if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) + if (g_main_gl_context->IsGLES()) // XXX: Swap colours glReadPixels(targetPixelRc.left, targetPixelRc.bottom, targetPixelRcWidth, targetPixelRcHeight, GL_RGBA, GL_UNSIGNED_BYTE, colorMap.get()); @@ -1351,7 +1350,7 @@ void Renderer::ApplyBlendingState(const BlendingState state, bool force) GL_XOR, GL_OR, GL_NOR, GL_EQUIV, GL_INVERT, GL_OR_REVERSE, GL_COPY_INVERTED, GL_OR_INVERTED, GL_NAND, GL_SET}; - if (GLInterface->GetMode() != GLInterfaceMode::MODE_OPENGL) + if (g_main_gl_context->IsGLES()) { // Logic ops aren't available in GLES3 } @@ -1421,7 +1420,7 @@ void Renderer::SwapImpl(AbstractTexture* texture, const EFBRectangle& xfb_region OSD::DrawMessages(); // Swap the back and front buffers, presenting the image. - GLInterface->Swap(); + g_main_gl_context->Swap(); } else { @@ -1466,7 +1465,7 @@ void Renderer::SwapImpl(AbstractTexture* texture, const EFBRectangle& xfb_region { s_vsync = g_ActiveConfig.IsVSync(); if (!DriverDetails::HasBug(DriverDetails::BUG_BROKEN_VSYNC)) - GLInterface->SwapInterval(s_vsync); + g_main_gl_context->SwapInterval(s_vsync); } // Clean out old stuff from caches. It's not worth it to clean out the shader caches. @@ -1502,12 +1501,11 @@ void Renderer::CheckForSurfaceChange() m_surface_handle = m_new_surface_handle; m_new_surface_handle = nullptr; - GLInterface->UpdateHandle(m_surface_handle); - GLInterface->UpdateSurface(); + g_main_gl_context->UpdateSurface(m_surface_handle); // With a surface change, the window likely has new dimensions. - m_backbuffer_width = GLInterface->GetBackBufferWidth(); - m_backbuffer_height = GLInterface->GetBackBufferHeight(); + m_backbuffer_width = g_main_gl_context->GetBackBufferWidth(); + m_backbuffer_height = g_main_gl_context->GetBackBufferHeight(); } void Renderer::CheckForSurfaceResize() @@ -1515,7 +1513,7 @@ void Renderer::CheckForSurfaceResize() if (!m_surface_resized.TestAndClear()) return; - GLInterface->Update(); + g_main_gl_context->Update(); m_backbuffer_width = m_new_backbuffer_width; m_backbuffer_height = m_new_backbuffer_height; } @@ -1538,7 +1536,7 @@ void Renderer::ResetAPIState() glDisable(GL_DEPTH_TEST); glDisable(GL_CULL_FACE); glDisable(GL_BLEND); - if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGL) + if (!g_main_gl_context->IsGLES()) glDisable(GL_COLOR_LOGIC_OP); if (g_ActiveConfig.backend_info.bSupportsDepthClamp) { @@ -1717,4 +1715,4 @@ std::unique_ptr<VideoCommon::AsyncShaderCompiler> Renderer::CreateAsyncShaderCom { return std::make_unique<SharedContextAsyncShaderCompiler>(); } -} +} // namespace OGL diff --git a/Source/Core/VideoBackends/OGL/SamplerCache.cpp b/Source/Core/VideoBackends/OGL/SamplerCache.cpp index 32be0ac4d9..ae848e8d29 100644 --- a/Source/Core/VideoBackends/OGL/SamplerCache.cpp +++ b/Source/Core/VideoBackends/OGL/SamplerCache.cpp @@ -7,7 +7,7 @@ #include <memory> #include "Common/CommonTypes.h" -#include "Common/GL/GLInterfaceBase.h" +#include "Common/GL/GLContext.h" #include "VideoCommon/SamplerCommon.h" #include "VideoCommon/VideoConfig.h" @@ -99,7 +99,7 @@ void SamplerCache::SetParameters(GLuint sampler_id, const SamplerState& params) glSamplerParameterf(sampler_id, GL_TEXTURE_MIN_LOD, params.min_lod / 16.f); glSamplerParameterf(sampler_id, GL_TEXTURE_MAX_LOD, params.max_lod / 16.f); - if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGL) + if (!g_main_gl_context->IsGLES()) glSamplerParameterf(sampler_id, GL_TEXTURE_LOD_BIAS, params.lod_bias / 256.f); if (params.anisotropic_filtering && g_ogl_config.bSupportsAniso) @@ -117,4 +117,4 @@ void SamplerCache::Clear() p.second = 0; m_cache.clear(); } -} +} // namespace OGL diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp index 95a3d30e1a..10f191448e 100644 --- a/Source/Core/VideoBackends/OGL/TextureCache.cpp +++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp @@ -10,7 +10,6 @@ #include <vector> #include "Common/Assert.h" -#include "Common/GL/GLInterfaceBase.h" #include "Common/MsgHandler.h" #include "Common/StringUtil.h" diff --git a/Source/Core/VideoBackends/OGL/main.cpp b/Source/Core/VideoBackends/OGL/main.cpp index d2e37f07a9..130669c28e 100644 --- a/Source/Core/VideoBackends/OGL/main.cpp +++ b/Source/Core/VideoBackends/OGL/main.cpp @@ -39,7 +39,7 @@ Make AA apply instantly during gameplay if possible #include <vector> #include "Common/Common.h" -#include "Common/GL/GLInterfaceBase.h" +#include "Common/GL/GLContext.h" #include "Common/GL/GLUtil.h" #include "Common/MsgHandler.h" @@ -66,7 +66,7 @@ std::string VideoBackend::GetName() const std::string VideoBackend::GetDisplayName() const { - if (GLInterface != nullptr && GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) + if (g_main_gl_context && g_main_gl_context->GetMode() == GLContext::Mode::OpenGLES) return _trans("OpenGL ES"); else return _trans("OpenGL"); @@ -161,12 +161,12 @@ bool VideoBackend::Initialize(void* window_handle) { InitializeShared(); - GLUtil::InitInterface(); - GLInterface->SetMode(GLInterfaceMode::MODE_DETECT); - if (!GLInterface->Create(window_handle, g_ActiveConfig.stereo_mode == StereoMode::QuadBuffer)) + g_main_gl_context = + GLContext::Create(window_handle, g_ActiveConfig.stereo_mode == StereoMode::QuadBuffer); + if (!g_main_gl_context) return false; - GLInterface->MakeCurrent(); + g_main_gl_context->MakeCurrent(); if (!InitializeGLExtensions() || !FillBackendInfo()) return false; @@ -196,9 +196,9 @@ void VideoBackend::Shutdown() g_perf_query.reset(); g_vertex_manager.reset(); g_renderer.reset(); - GLInterface->ClearCurrent(); - GLInterface->Shutdown(); - GLInterface.reset(); + g_main_gl_context->ClearCurrent(); + g_main_gl_context->Shutdown(); + g_main_gl_context.reset(); ShutdownShared(); } -} +} // namespace OGL diff --git a/Source/Core/VideoBackends/Software/SWOGLWindow.cpp b/Source/Core/VideoBackends/Software/SWOGLWindow.cpp index 695f58cc1d..dd390bc6dc 100644 --- a/Source/Core/VideoBackends/Software/SWOGLWindow.cpp +++ b/Source/Core/VideoBackends/Software/SWOGLWindow.cpp @@ -4,7 +4,7 @@ #include <memory> -#include "Common/GL/GLInterfaceBase.h" +#include "Common/GL/GLContext.h" #include "Common/GL/GLUtil.h" #include "Common/Logging/Log.h" @@ -15,9 +15,8 @@ std::unique_ptr<SWOGLWindow> SWOGLWindow::s_instance; void SWOGLWindow::Init(void* window_handle) { - GLUtil::InitInterface(); - GLInterface->SetMode(GLInterfaceMode::MODE_DETECT); - if (!GLInterface->Create(window_handle)) + g_main_gl_context = GLContext::Create(window_handle); + if (!g_main_gl_context) { ERROR_LOG(VIDEO, "GLInterface::Create failed."); } @@ -27,8 +26,8 @@ void SWOGLWindow::Init(void* window_handle) void SWOGLWindow::Shutdown() { - GLInterface->Shutdown(); - GLInterface.reset(); + g_main_gl_context->Shutdown(); + g_main_gl_context.reset(); s_instance.reset(); } @@ -66,10 +65,9 @@ void SWOGLWindow::Prepare() " TexCoord = vec2(rawpos.x, -rawpos.y);\n" "}\n"; - std::string header = GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGL ? - "#version 140\n" : - "#version 300 es\n" - "precision highp float;\n"; + std::string header = g_main_gl_context->IsGLES() ? "#version 300 es\n" + "precision highp float;\n" : + "#version 140\n"; m_image_program = GLUtil::CompileProgram(header + vertex_shader, header + frag_shader); @@ -93,10 +91,10 @@ void SWOGLWindow::PrintText(const std::string& text, int x, int y, u32 color) void SWOGLWindow::ShowImage(AbstractTexture* image, const EFBRectangle& xfb_region) { SW::SWTexture* sw_image = static_cast<SW::SWTexture*>(image); - GLInterface->Update(); // just updates the render window position and the backbuffer size + g_main_gl_context->Update(); // just updates the render window position and the backbuffer size - GLsizei glWidth = (GLsizei)GLInterface->GetBackBufferWidth(); - GLsizei glHeight = (GLsizei)GLInterface->GetBackBufferHeight(); + GLsizei glWidth = (GLsizei)g_main_gl_context->GetBackBufferWidth(); + GLsizei glHeight = (GLsizei)g_main_gl_context->GetBackBufferHeight(); glViewport(0, 0, glWidth, glHeight); @@ -123,10 +121,5 @@ void SWOGLWindow::ShowImage(AbstractTexture* image, const EFBRectangle& xfb_regi // } m_text.clear(); - GLInterface->Swap(); -} - -int SWOGLWindow::PeekMessages() -{ - return GLInterface->PeekMessages(); + g_main_gl_context->Swap(); } diff --git a/Source/Core/VideoBackends/Software/SWOGLWindow.h b/Source/Core/VideoBackends/Software/SWOGLWindow.h index 64ee2414bc..eadf3171cb 100644 --- a/Source/Core/VideoBackends/Software/SWOGLWindow.h +++ b/Source/Core/VideoBackends/Software/SWOGLWindow.h @@ -26,8 +26,6 @@ public: // Image to show, will be swapped immediately void ShowImage(AbstractTexture* image, const EFBRectangle& xfb_region); - int PeekMessages(); - static std::unique_ptr<SWOGLWindow> s_instance; private: diff --git a/Source/Core/VideoBackends/Software/SWmain.cpp b/Source/Core/VideoBackends/Software/SWmain.cpp index 6ca183b57c..8781a2da9b 100644 --- a/Source/Core/VideoBackends/Software/SWmain.cpp +++ b/Source/Core/VideoBackends/Software/SWmain.cpp @@ -9,7 +9,7 @@ #include "Common/Common.h" #include "Common/CommonTypes.h" -#include "Common/GL/GLInterfaceBase.h" +#include "Common/GL/GLContext.h" #include "VideoBackends/Software/Clipper.h" #include "VideoBackends/Software/DebugUtil.h" @@ -88,7 +88,7 @@ bool VideoSoftware::Initialize(void* window_handle) Rasterizer::Init(); DebugUtil::Init(); - GLInterface->MakeCurrent(); + g_main_gl_context->MakeCurrent(); SWOGLWindow::s_instance->Prepare(); g_renderer = std::make_unique<SWRenderer>(); @@ -116,4 +116,4 @@ void VideoSoftware::Shutdown() g_renderer.reset(); ShutdownShared(); } -} +} // namespace SW |
