From 3c4a73d5a65f40792b0b7dadd6a81ef5ed179c09 Mon Sep 17 00:00:00 2001 From: John Peterson Date: Mon, 26 Jan 2009 01:14:04 +0000 Subject: [PATCH] Core and PluginManager: Fixed Stop and Start again, the video plugin needed to be completely reset git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2012 8ced0084-cf51-0410-be5f-012b33b47a6e --- Source/Core/Common/Src/DynamicLibrary.cpp | 2 +- Source/Core/Core/Src/Core.cpp | 1 + Source/Core/Core/Src/PluginManager.cpp | 11 +++++++++++ Source/Core/Core/Src/PluginManager.h | 1 + Source/Plugins/Plugin_Wiimote/Plugin_Wiimote.vcproj | 4 ++++ 5 files changed, 18 insertions(+), 1 deletion(-) diff --git a/Source/Core/Common/Src/DynamicLibrary.cpp b/Source/Core/Common/Src/DynamicLibrary.cpp index 628cf5324b..1d18bef1e1 100644 --- a/Source/Core/Common/Src/DynamicLibrary.cpp +++ b/Source/Core/Common/Src/DynamicLibrary.cpp @@ -130,7 +130,7 @@ int DynamicLibrary::Unload() } #ifdef _WIN32 - Console::Print("FreeLibrary: %i\n", library); + Console::Print("FreeLibrary: %i\n", library_file.c_str()); retval = FreeLibrary(library); #else retval = dlclose(library)?0:1; diff --git a/Source/Core/Core/Src/Core.cpp b/Source/Core/Core/Src/Core.cpp index 565a47d1ae..34fbfd68ee 100644 --- a/Source/Core/Core/Src/Core.cpp +++ b/Source/Core/Core/Src/Core.cpp @@ -318,6 +318,7 @@ THREAD_RETURN EmuThread(void *pArg) VideoInitialize.pMemoryBase = Memory::base; VideoInitialize.pKeyPress = Callback_KeyPress; VideoInitialize.bWii = _CoreParameter.bWii; + Plugins.FreeVideo(); // This is needed for Stop and Start Plugins.GetVideo()->Initialize(&VideoInitialize); // Call the dll // Under linux, this is an X11 Display, not an HWND! diff --git a/Source/Core/Core/Src/PluginManager.cpp b/Source/Core/Core/Src/PluginManager.cpp index 86599d8a9b..97aec817d8 100644 --- a/Source/Core/Core/Src/PluginManager.cpp +++ b/Source/Core/Core/Src/PluginManager.cpp @@ -342,12 +342,23 @@ Common::PluginVideo *CPluginManager::GetVideo() return m_video; } +// ---------------------------------------- +// Free plugins to completely reset all variables and potential DLLs loaded by the plugins in turn +// ------------- +Common::PluginVideo *CPluginManager::FreeVideo() +{ + delete m_video; + m_video = NULL; + m_video = (Common::PluginVideo*)LoadPlugin(m_params.m_strVideoPlugin.c_str(), 0); + return m_video; +} Common::PluginPAD *CPluginManager::FreePad() { delete m_pad[0]; m_pad[0] = NULL; m_pad[1] = NULL; m_pad[2] = NULL; m_pad[3] = NULL; m_pad[0] = (Common::PluginPAD*)LoadPlugin(m_params.m_strPadPlugin[0].c_str(), 0); return m_pad[0]; + } /////////////////////////////////////////// diff --git a/Source/Core/Core/Src/PluginManager.h b/Source/Core/Core/Src/PluginManager.h index 4eb39a8ff5..87a7b91ed9 100644 --- a/Source/Core/Core/Src/PluginManager.h +++ b/Source/Core/Core/Src/PluginManager.h @@ -51,6 +51,7 @@ public: Common::PluginDSP *GetDSP(); Common::PluginVideo *GetVideo(); Common::PluginPAD *FreePad(); + Common::PluginVideo *FreeVideo(); bool InitPlugins(); void ShutdownPlugins(); diff --git a/Source/Plugins/Plugin_Wiimote/Plugin_Wiimote.vcproj b/Source/Plugins/Plugin_Wiimote/Plugin_Wiimote.vcproj index 6ff346bb9e..591a460718 100644 --- a/Source/Plugins/Plugin_Wiimote/Plugin_Wiimote.vcproj +++ b/Source/Plugins/Plugin_Wiimote/Plugin_Wiimote.vcproj @@ -623,6 +623,10 @@ RelativePath="..\..\PluginSpecs\pluginspecs_wiimote.h" > + +