From f2951828335654d0993ead998b3c547f903501dd Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 20 Dec 2015 21:49:49 -0500 Subject: [PATCH] VideoBackends: Simplify initialization and deinitialization of resources Approximately three or four times now, the issue of pointers being in an inconsistent state been an issue in the video backend renderers with regards to tripping up other developers. Global (ugh) resources are put into a unique_ptr and will always have a well-defined state of being - null or not null --- .../Common/GL/GLInterface/GLInterface.cpp | 14 +++-- Source/Core/Common/GL/GLInterfaceBase.h | 5 +- Source/Core/Common/GL/GLUtil.cpp | 4 +- .../Core/VideoBackends/D3D/TextureCache.cpp | 9 +-- .../Core/VideoBackends/D3D/VertexManager.cpp | 6 +- Source/Core/VideoBackends/D3D/main.cpp | 21 +++---- .../VideoBackends/OGL/NativeVertexFormat.cpp | 2 +- Source/Core/VideoBackends/OGL/PerfQuery.cpp | 15 +++-- Source/Core/VideoBackends/OGL/PerfQuery.h | 2 +- Source/Core/VideoBackends/OGL/Render.cpp | 2 +- .../Core/VideoBackends/OGL/SamplerCache.cpp | 4 +- Source/Core/VideoBackends/OGL/SamplerCache.h | 3 +- Source/Core/VideoBackends/OGL/TextureCache.h | 4 +- .../Core/VideoBackends/OGL/VertexManager.cpp | 2 +- Source/Core/VideoBackends/OGL/main.cpp | 61 +++++++++---------- .../VideoBackends/Software/SWOGLWindow.cpp | 7 ++- Source/Core/VideoCommon/PerfQueryBase.cpp | 3 +- Source/Core/VideoCommon/PerfQueryBase.h | 3 +- Source/Core/VideoCommon/RenderBase.cpp | 3 +- Source/Core/VideoCommon/RenderBase.h | 3 +- Source/Core/VideoCommon/TextureCacheBase.cpp | 3 +- Source/Core/VideoCommon/TextureCacheBase.h | 3 +- Source/Core/VideoCommon/VertexManagerBase.cpp | 4 +- Source/Core/VideoCommon/VertexManagerBase.h | 4 +- Source/UnitTests/TestUtils/StubHost.cpp | 3 +- 25 files changed, 104 insertions(+), 86 deletions(-) diff --git a/Source/Core/Common/GL/GLInterface/GLInterface.cpp b/Source/Core/Common/GL/GLInterface/GLInterface.cpp index 8abe67dc71..b9a05fd30a 100644 --- a/Source/Core/Common/GL/GLInterface/GLInterface.cpp +++ b/Source/Core/Common/GL/GLInterface/GLInterface.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include + #include "Common/GL/GLInterfaceBase.h" #ifdef ANDROID @@ -20,19 +22,19 @@ #error Platform doesnt have a GLInterface #endif -cInterfaceBase* HostGL_CreateGLInterface() +std::unique_ptr HostGL_CreateGLInterface() { #ifdef ANDROID - return new cInterfaceEGLAndroid; + return std::make_unique(); #elif defined(__APPLE__) - return new cInterfaceAGL; + return std::make_unique(); #elif defined(_WIN32) - return new cInterfaceWGL; + return std::make_unique(); #elif defined(HAVE_X11) && HAVE_X11 #if defined(USE_EGL) && USE_EGL - return new cInterfaceEGLX11; + return std::make_unique(); #else - return new cInterfaceGLX; + return std::make_unique(); #endif #else return nullptr; diff --git a/Source/Core/Common/GL/GLInterfaceBase.h b/Source/Core/Common/GL/GLInterfaceBase.h index 84d4be9a79..8fed61f0d4 100644 --- a/Source/Core/Common/GL/GLInterfaceBase.h +++ b/Source/Core/Common/GL/GLInterfaceBase.h @@ -4,6 +4,7 @@ #pragma once +#include #include #include "Common/CommonTypes.h" @@ -42,8 +43,8 @@ public: virtual bool PeekMessages() { return false; } }; -extern cInterfaceBase *GLInterface; +extern std::unique_ptr GLInterface; // This function has to be defined along the Host_ functions from Core/Host.h. // Current canonical implementation: DolphinWX/GLInterface/GLInterface.cpp. -cInterfaceBase* HostGL_CreateGLInterface(); +std::unique_ptr HostGL_CreateGLInterface(); diff --git a/Source/Core/Common/GL/GLUtil.cpp b/Source/Core/Common/GL/GLUtil.cpp index 7f7161aab4..6c3072ab54 100644 --- a/Source/Core/Common/GL/GLUtil.cpp +++ b/Source/Core/Common/GL/GLUtil.cpp @@ -2,12 +2,14 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include + #include "Common/Assert.h" #include "Common/GL/GLInterfaceBase.h" #include "Common/GL/GLUtil.h" #include "Common/Logging/Log.h" -cInterfaceBase *GLInterface; +std::unique_ptr GLInterface; static GLuint attributelessVAO = 0; static GLuint attributelessVBO = 0; diff --git a/Source/Core/VideoBackends/D3D/TextureCache.cpp b/Source/Core/VideoBackends/D3D/TextureCache.cpp index 0de91068c7..ff2bd39cc5 100644 --- a/Source/Core/VideoBackends/D3D/TextureCache.cpp +++ b/Source/Core/VideoBackends/D3D/TextureCache.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include + #include "VideoBackends/D3D/D3DBase.h" #include "VideoBackends/D3D/D3DShader.h" #include "VideoBackends/D3D/D3DState.h" @@ -21,7 +23,7 @@ namespace DX11 { -static TextureEncoder* g_encoder = nullptr; +static std::unique_ptr g_encoder; const size_t MAX_COPY_BUFFERS = 32; ID3D11Buffer* efbcopycbuf[MAX_COPY_BUFFERS] = { 0 }; @@ -377,7 +379,7 @@ ID3D11PixelShader *GetConvertShader(const char* Type) TextureCache::TextureCache() { // FIXME: Is it safe here? - g_encoder = new PSTextureEncoder; + g_encoder = std::make_unique(); g_encoder->Init(); palette_buf = nullptr; @@ -407,8 +409,7 @@ TextureCache::~TextureCache() SAFE_RELEASE(efbcopycbuf[k]); g_encoder->Shutdown(); - delete g_encoder; - g_encoder = nullptr; + g_encoder.reset(); SAFE_RELEASE(palette_buf); SAFE_RELEASE(palette_buf_srv); diff --git a/Source/Core/VideoBackends/D3D/VertexManager.cpp b/Source/Core/VideoBackends/D3D/VertexManager.cpp index 1312933726..fce46f1b44 100644 --- a/Source/Core/VideoBackends/D3D/VertexManager.cpp +++ b/Source/Core/VideoBackends/D3D/VertexManager.cpp @@ -129,11 +129,11 @@ void VertexManager::Draw(u32 stride) { case PRIMITIVE_POINTS: D3D::stateman->SetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_POINTLIST); - ((DX11::Renderer*)g_renderer)->ApplyCullDisable(); + static_cast(g_renderer.get())->ApplyCullDisable(); break; case PRIMITIVE_LINES: D3D::stateman->SetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST); - ((DX11::Renderer*)g_renderer)->ApplyCullDisable(); + static_cast(g_renderer.get())->ApplyCullDisable(); break; case PRIMITIVE_TRIANGLES: D3D::stateman->SetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); @@ -146,7 +146,7 @@ void VertexManager::Draw(u32 stride) INCSTAT(stats.thisFrame.numDrawCalls); if (current_primitive_type != PRIMITIVE_TRIANGLES) - ((DX11::Renderer*)g_renderer)->RestoreCull(); + static_cast(g_renderer.get())->RestoreCull(); } void VertexManager::vFlush(bool useDstAlpha) diff --git a/Source/Core/VideoBackends/D3D/main.cpp b/Source/Core/VideoBackends/D3D/main.cpp index 8d2aa59f0f..22af42c5d9 100644 --- a/Source/Core/VideoBackends/D3D/main.cpp +++ b/Source/Core/VideoBackends/D3D/main.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include #include #include "Common/FileUtil.h" @@ -176,10 +177,10 @@ bool VideoBackend::Initialize(void *window_handle) void VideoBackend::Video_Prepare() { // internal interfaces - g_renderer = new Renderer(m_window_handle); - g_texture_cache = new TextureCache; - g_vertex_manager = new VertexManager; - g_perf_query = new PerfQuery; + g_renderer = std::make_unique(m_window_handle); + g_texture_cache = std::make_unique(); + g_vertex_manager = std::make_unique(); + g_perf_query = std::make_unique(); VertexShaderCache::Init(); PixelShaderCache::Init(); GeometryShaderCache::Init(); @@ -225,14 +226,10 @@ void VideoBackend::Shutdown() GeometryShaderCache::Shutdown(); BBox::Shutdown(); - delete g_perf_query; - delete g_vertex_manager; - delete g_texture_cache; - delete g_renderer; - g_renderer = nullptr; - g_texture_cache = nullptr; - g_vertex_manager = nullptr; - g_perf_query = nullptr; + g_perf_query.reset(); + g_vertex_manager.reset(); + g_texture_cache.reset(); + g_renderer.reset(); } } diff --git a/Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp b/Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp index 004692999f..68b8e1b2d6 100644 --- a/Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp +++ b/Source/Core/VideoBackends/OGL/NativeVertexFormat.cpp @@ -55,7 +55,7 @@ GLVertexFormat::GLVertexFormat(const PortableVertexDeclaration& _vtx_decl) if (vertex_stride & 3) PanicAlert("Uneven vertex stride: %i", vertex_stride); - VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; + VertexManager* const vm = static_cast(g_vertex_manager.get()); glGenVertexArrays(1, &VAO); glBindVertexArray(VAO); diff --git a/Source/Core/VideoBackends/OGL/PerfQuery.cpp b/Source/Core/VideoBackends/OGL/PerfQuery.cpp index a3e9fde0dc..770a082782 100644 --- a/Source/Core/VideoBackends/OGL/PerfQuery.cpp +++ b/Source/Core/VideoBackends/OGL/PerfQuery.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include + #include "Common/GL/GLInterfaceBase.h" #include "Common/GL/GLUtil.h" @@ -10,15 +12,16 @@ namespace OGL { -PerfQueryBase* GetPerfQuery() +std::unique_ptr GetPerfQuery() { if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3 && GLExtensions::Supports("GL_NV_occlusion_query_samples")) - return new PerfQueryGLESNV(); - else if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) - return new PerfQueryGL(GL_ANY_SAMPLES_PASSED); - else - return new PerfQueryGL(GL_SAMPLES_PASSED); + return std::make_unique(); + + if (GLInterface->GetMode() == GLInterfaceMode::MODE_OPENGLES3) + return std::make_unique(GL_ANY_SAMPLES_PASSED); + + return std::make_unique(GL_SAMPLES_PASSED); } PerfQuery::PerfQuery() diff --git a/Source/Core/VideoBackends/OGL/PerfQuery.h b/Source/Core/VideoBackends/OGL/PerfQuery.h index 4afd41928b..de9fc9ad19 100644 --- a/Source/Core/VideoBackends/OGL/PerfQuery.h +++ b/Source/Core/VideoBackends/OGL/PerfQuery.h @@ -13,7 +13,7 @@ namespace OGL { -PerfQueryBase* GetPerfQuery(); +std::unique_ptr GetPerfQuery(); class PerfQuery : public PerfQueryBase { diff --git a/Source/Core/VideoBackends/OGL/Render.cpp b/Source/Core/VideoBackends/OGL/Render.cpp index 4720925304..6b852c3823 100644 --- a/Source/Core/VideoBackends/OGL/Render.cpp +++ b/Source/Core/VideoBackends/OGL/Render.cpp @@ -1599,7 +1599,7 @@ void Renderer::RestoreAPIState() SetLogicOpMode(); SetViewport(); - VertexManager *vm = (OGL::VertexManager*)g_vertex_manager; + const VertexManager* const vm = static_cast(g_vertex_manager.get()); glBindBuffer(GL_ARRAY_BUFFER, vm->m_vertex_buffers); if (vm->m_last_vao) glBindVertexArray(vm->m_last_vao); diff --git a/Source/Core/VideoBackends/OGL/SamplerCache.cpp b/Source/Core/VideoBackends/OGL/SamplerCache.cpp index 3c9a258ffb..3c811a0109 100644 --- a/Source/Core/VideoBackends/OGL/SamplerCache.cpp +++ b/Source/Core/VideoBackends/OGL/SamplerCache.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include + #include "Common/GL/GLInterfaceBase.h" #include "VideoBackends/OGL/SamplerCache.h" #include "VideoCommon/DriverDetails.h" @@ -10,7 +12,7 @@ namespace OGL { -SamplerCache *g_sampler_cache; +std::unique_ptr g_sampler_cache; SamplerCache::SamplerCache() : m_last_max_anisotropy() diff --git a/Source/Core/VideoBackends/OGL/SamplerCache.h b/Source/Core/VideoBackends/OGL/SamplerCache.h index bb4a7353ab..920835ef03 100644 --- a/Source/Core/VideoBackends/OGL/SamplerCache.h +++ b/Source/Core/VideoBackends/OGL/SamplerCache.h @@ -5,6 +5,7 @@ #pragma once #include +#include #include "Common/CommonTypes.h" #include "Common/NonCopyable.h" @@ -80,6 +81,6 @@ private: u32 m_sampler_id[2]; }; -extern SamplerCache *g_sampler_cache; +extern std::unique_ptr g_sampler_cache; } diff --git a/Source/Core/VideoBackends/OGL/TextureCache.h b/Source/Core/VideoBackends/OGL/TextureCache.h index 5460e1be09..7c857da127 100644 --- a/Source/Core/VideoBackends/OGL/TextureCache.h +++ b/Source/Core/VideoBackends/OGL/TextureCache.h @@ -19,6 +19,8 @@ class TextureCache : public TextureCacheBase { public: TextureCache(); + ~TextureCache(); + static void DisableStage(unsigned int stage); static void SetStage(); @@ -49,8 +51,6 @@ private: bool Save(const std::string& filename, unsigned int level) override; }; - ~TextureCache(); - TCacheEntryBase* CreateTexture(const TCacheEntryConfig& config) override; void ConvertTexture(TCacheEntryBase* entry, TCacheEntryBase* unconverted, void* palette, TlutFormat format) override; diff --git a/Source/Core/VideoBackends/OGL/VertexManager.cpp b/Source/Core/VideoBackends/OGL/VertexManager.cpp index 82f9763808..5f5ddc4104 100644 --- a/Source/Core/VideoBackends/OGL/VertexManager.cpp +++ b/Source/Core/VideoBackends/OGL/VertexManager.cpp @@ -137,7 +137,7 @@ void VertexManager::Draw(u32 stride) INCSTAT(stats.thisFrame.numDrawCalls); if (current_primitive_type != PRIMITIVE_TRIANGLES) - ((OGL::Renderer*)g_renderer)->SetGenerationMode(); + static_cast(g_renderer.get())->SetGenerationMode(); } void VertexManager::vFlush(bool useDstAlpha) diff --git a/Source/Core/VideoBackends/OGL/main.cpp b/Source/Core/VideoBackends/OGL/main.cpp index 6580116315..e1bd630356 100644 --- a/Source/Core/VideoBackends/OGL/main.cpp +++ b/Source/Core/VideoBackends/OGL/main.cpp @@ -38,6 +38,7 @@ Make AA apply instantly during gameplay if possible #include #include +#include #include "Common/Atomic.h" #include "Common/CommonPaths.h" @@ -182,13 +183,13 @@ void VideoBackend::Video_Prepare() { GLInterface->MakeCurrent(); - g_renderer = new Renderer; + g_renderer = std::make_unique(); CommandProcessor::Init(); PixelEngine::Init(); BPInit(); - g_vertex_manager = new VertexManager; + g_vertex_manager = std::make_unique(); g_perf_query = GetPerfQuery(); Fifo_Init(); // must be done before OpcodeDecoder_Init() OpcodeDecoder_Init(); @@ -197,8 +198,8 @@ void VideoBackend::Video_Prepare() PixelShaderManager::Init(); GeometryShaderManager::Init(); ProgramShaderCache::Init(); - g_texture_cache = new TextureCache(); - g_sampler_cache = new SamplerCache(); + g_texture_cache = std::make_unique(); + g_sampler_cache = std::make_unique(); Renderer::Init(); VertexLoaderManager::Init(); TextureConverter::Init(); @@ -216,39 +217,35 @@ void VideoBackend::Shutdown() OSD::DoCallbacks(OSD::OSD_SHUTDOWN); GLInterface->Shutdown(); - delete GLInterface; - GLInterface = nullptr; + GLInterface.reset(); } void VideoBackend::Video_Cleanup() { - if (g_renderer) - { - Fifo_Shutdown(); + if (!g_renderer) + return; - // The following calls are NOT Thread Safe - // And need to be called from the video thread - Renderer::Shutdown(); - BoundingBox::Shutdown(); - TextureConverter::Shutdown(); - VertexLoaderManager::Shutdown(); - delete g_sampler_cache; - g_sampler_cache = nullptr; - delete g_texture_cache; - g_texture_cache = nullptr; - ProgramShaderCache::Shutdown(); - VertexShaderManager::Shutdown(); - PixelShaderManager::Shutdown(); - GeometryShaderManager::Shutdown(); - delete g_perf_query; - g_perf_query = nullptr; - delete g_vertex_manager; - g_vertex_manager = nullptr; - OpcodeDecoder_Shutdown(); - delete g_renderer; - g_renderer = nullptr; - GLInterface->ClearCurrent(); - } + Fifo_Shutdown(); + + // The following calls are NOT Thread Safe + // And need to be called from the video thread + Renderer::Shutdown(); + BoundingBox::Shutdown(); + TextureConverter::Shutdown(); + VertexLoaderManager::Shutdown(); + g_sampler_cache.reset(); + g_texture_cache.reset(); + ProgramShaderCache::Shutdown(); + VertexShaderManager::Shutdown(); + PixelShaderManager::Shutdown(); + GeometryShaderManager::Shutdown(); + + g_perf_query.reset(); + g_vertex_manager.reset(); + + OpcodeDecoder_Shutdown(); + g_renderer.reset(); + GLInterface->ClearCurrent(); } } diff --git a/Source/Core/VideoBackends/Software/SWOGLWindow.cpp b/Source/Core/VideoBackends/Software/SWOGLWindow.cpp index be4ee68e32..cd411610ed 100644 --- a/Source/Core/VideoBackends/Software/SWOGLWindow.cpp +++ b/Source/Core/VideoBackends/Software/SWOGLWindow.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include + #include "Common/GL/GLInterfaceBase.h" #include "Common/GL/GLUtil.h" #include "Common/Logging/Log.h" @@ -25,10 +27,9 @@ void SWOGLWindow::Init(void *window_handle) void SWOGLWindow::Shutdown() { GLInterface->Shutdown(); - delete GLInterface; - GLInterface = nullptr; + GLInterface.reset(); - SWOGLWindow::s_instance.release(); + s_instance.reset(); } void SWOGLWindow::Prepare() diff --git a/Source/Core/VideoCommon/PerfQueryBase.cpp b/Source/Core/VideoCommon/PerfQueryBase.cpp index 76bec0ef46..fc5e9dd38e 100644 --- a/Source/Core/VideoCommon/PerfQueryBase.cpp +++ b/Source/Core/VideoCommon/PerfQueryBase.cpp @@ -2,10 +2,11 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include #include "VideoCommon/PerfQueryBase.h" #include "VideoCommon/VideoConfig.h" -PerfQueryBase* g_perf_query = nullptr; +std::unique_ptr g_perf_query; bool PerfQueryBase::ShouldEmulate() { diff --git a/Source/Core/VideoCommon/PerfQueryBase.h b/Source/Core/VideoCommon/PerfQueryBase.h index ca9243d1d0..705a81621c 100644 --- a/Source/Core/VideoCommon/PerfQueryBase.h +++ b/Source/Core/VideoCommon/PerfQueryBase.h @@ -4,6 +4,7 @@ #pragma once +#include #include "Common/CommonTypes.h" enum PerfQueryType @@ -65,4 +66,4 @@ protected: volatile u32 m_results[PQG_NUM_MEMBERS]; }; -extern PerfQueryBase* g_perf_query; +extern std::unique_ptr g_perf_query; diff --git a/Source/Core/VideoCommon/RenderBase.cpp b/Source/Core/VideoCommon/RenderBase.cpp index 89bfa4dce1..40b6dd5bae 100644 --- a/Source/Core/VideoCommon/RenderBase.cpp +++ b/Source/Core/VideoCommon/RenderBase.cpp @@ -14,6 +14,7 @@ #include #include +#include #include #include "Common/Atomic.h" @@ -51,7 +52,7 @@ int frameCount; int OSDChoice; static int OSDTime; -Renderer *g_renderer = nullptr; +std::unique_ptr g_renderer; std::mutex Renderer::s_criticalScreenshot; std::string Renderer::s_sScreenshotName; diff --git a/Source/Core/VideoCommon/RenderBase.h b/Source/Core/VideoCommon/RenderBase.h index ad53f2f20c..b411b2d14f 100644 --- a/Source/Core/VideoCommon/RenderBase.h +++ b/Source/Core/VideoCommon/RenderBase.h @@ -14,6 +14,7 @@ #pragma once +#include #include #include @@ -182,5 +183,5 @@ private: static unsigned int efb_scale_denominatorY; }; -extern Renderer *g_renderer; +extern std::unique_ptr g_renderer; diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp index 80b8b12ea6..341977d7a8 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/TextureCacheBase.cpp @@ -3,6 +3,7 @@ // Refer to the license.txt file included. #include +#include #include #include "Common/FileUtil.h" @@ -28,7 +29,7 @@ static const int TEXTURE_KILL_THRESHOLD = 64; // Sonic the Fighters (inside Soni static const int TEXTURE_POOL_KILL_THRESHOLD = 3; static const int FRAMECOUNT_INVALID = 0; -TextureCacheBase* g_texture_cache; +std::unique_ptr g_texture_cache; alignas(16) u8* TextureCacheBase::temp = nullptr; size_t TextureCacheBase::temp_size; diff --git a/Source/Core/VideoCommon/TextureCacheBase.h b/Source/Core/VideoCommon/TextureCacheBase.h index 9435447c9b..26cec83659 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.h +++ b/Source/Core/VideoCommon/TextureCacheBase.h @@ -6,6 +6,7 @@ #include #include +#include #include #include "Common/CommonTypes.h" @@ -179,4 +180,4 @@ private: } backup_config; }; -extern TextureCacheBase* g_texture_cache; +extern std::unique_ptr g_texture_cache; diff --git a/Source/Core/VideoCommon/VertexManagerBase.cpp b/Source/Core/VideoCommon/VertexManagerBase.cpp index 84f24cd6e2..0c9f96cae5 100644 --- a/Source/Core/VideoCommon/VertexManagerBase.cpp +++ b/Source/Core/VideoCommon/VertexManagerBase.cpp @@ -2,6 +2,8 @@ // Licensed under GPLv2+ // Refer to the license.txt file included. +#include + #include "Common/CommonTypes.h" #include "VideoCommon/BPStructs.h" @@ -22,7 +24,7 @@ #include "VideoCommon/VideoConfig.h" #include "VideoCommon/XFMemory.h" -VertexManagerBase* g_vertex_manager; +std::unique_ptr g_vertex_manager; u8* VertexManagerBase::s_pCurBufferPointer; u8* VertexManagerBase::s_pBaseBufferPointer; diff --git a/Source/Core/VideoCommon/VertexManagerBase.h b/Source/Core/VideoCommon/VertexManagerBase.h index 26b02ae122..0e6c0efefb 100644 --- a/Source/Core/VideoCommon/VertexManagerBase.h +++ b/Source/Core/VideoCommon/VertexManagerBase.h @@ -4,7 +4,9 @@ #pragma once +#include #include + #include "Common/CommonFuncs.h" #include "Common/CommonTypes.h" #include "VideoCommon/DataReader.h" @@ -82,4 +84,4 @@ private: virtual void DestroyDeviceObjects() {} }; -extern VertexManagerBase* g_vertex_manager; +extern std::unique_ptr g_vertex_manager; diff --git a/Source/UnitTests/TestUtils/StubHost.cpp b/Source/UnitTests/TestUtils/StubHost.cpp index 2cf0d60396..ac83093b9f 100644 --- a/Source/UnitTests/TestUtils/StubHost.cpp +++ b/Source/UnitTests/TestUtils/StubHost.cpp @@ -5,6 +5,7 @@ // Stub implementation of the Host_* callbacks for tests. These implementations // do nothing except return default values when required. +#include #include #include "Common/GL/GLInterfaceBase.h" @@ -26,4 +27,4 @@ bool Host_RendererIsFullscreen() { return false; } void Host_ConnectWiimote(int, bool) {} void Host_SetWiiMoteConnectionState(int) {} void Host_ShowVideoConfig(void*, const std::string&, const std::string&) {} -cInterfaceBase* HostGL_CreateGLInterface() { return nullptr; } +std::unique_ptr HostGL_CreateGLInterface() { return nullptr; }