From 5e17a586da5e01ac037203b45a19dc0da839e868 Mon Sep 17 00:00:00 2001
From: Lioncash <mathew1800@gmail.com>
Date: Wed, 30 Dec 2015 08:52:01 -0500
Subject: [PATCH] video_core: Make the renderer global a unique_ptr

---
 src/video_core/video_core.cpp | 11 +++++++----
 src/video_core/video_core.h   |  5 +++--
 2 files changed, 10 insertions(+), 6 deletions(-)

diff --git a/src/video_core/video_core.cpp b/src/video_core/video_core.cpp
index eaddda668..912db91a4 100644
--- a/src/video_core/video_core.cpp
+++ b/src/video_core/video_core.cpp
@@ -2,7 +2,10 @@
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included.
 
+#include <memory>
+
 #include "common/emu_window.h"
+#include "common/make_unique.h"
 #include "common/logging/log.h"
 
 #include "core/core.h"
@@ -18,8 +21,8 @@
 
 namespace VideoCore {
 
-EmuWindow*      g_emu_window    = nullptr;     ///< Frontend emulator window
-RendererBase*   g_renderer      = nullptr;     ///< Renderer plugin
+EmuWindow*                    g_emu_window = nullptr; ///< Frontend emulator window
+std::unique_ptr<RendererBase> g_renderer;             ///< Renderer plugin
 
 std::atomic<bool> g_hw_renderer_enabled;
 std::atomic<bool> g_shader_jit_enabled;
@@ -29,7 +32,7 @@ void Init(EmuWindow* emu_window) {
     Pica::Init();
 
     g_emu_window = emu_window;
-    g_renderer = new RendererOpenGL();
+    g_renderer = Common::make_unique<RendererOpenGL>();
     g_renderer->SetWindow(g_emu_window);
     g_renderer->Init();
 
@@ -40,7 +43,7 @@ void Init(EmuWindow* emu_window) {
 void Shutdown() {
     Pica::Shutdown();
 
-    delete g_renderer;
+    g_renderer.reset();
 
     LOG_DEBUG(Render, "shutdown OK");
 }
diff --git a/src/video_core/video_core.h b/src/video_core/video_core.h
index 2867bf03e..accb0a4eb 100644
--- a/src/video_core/video_core.h
+++ b/src/video_core/video_core.h
@@ -5,6 +5,7 @@
 #pragma once
 
 #include <atomic>
+#include <memory>
 
 class EmuWindow;
 class RendererBase;
@@ -29,8 +30,8 @@ static const int kScreenBottomHeight    = 240;  ///< 3DS bottom screen height
 //  Video core renderer
 // ---------------------
 
-extern RendererBase*   g_renderer;              ///< Renderer plugin
-extern EmuWindow*      g_emu_window;            ///< Emu window
+extern std::unique_ptr<RendererBase> g_renderer;   ///< Renderer plugin
+extern EmuWindow*                    g_emu_window; ///< Emu window
 
 // TODO: Wrap these in a user settings struct along with any other graphics settings (often set from qt ui)
 extern std::atomic<bool> g_hw_renderer_enabled;