OpenGL: Added option to build without WxWidgets in Windows to, if it has anything to do with the FreeLibrary() hanging. It doesn't seem to do, but now it's easier to compile without it at least.

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2358 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
John Peterson 2009-02-22 05:21:54 +00:00
parent db691a4f0d
commit 2a94635523
7 changed files with 54 additions and 29 deletions

View File

@ -36,8 +36,11 @@
// This may remove sound artifacts in Wario Land Shake It and perhaps other games
//#define SETUP_AVOID_SOUND_ARTIFACTS
// This may fix a problem with Stop and Start that I described in the comments to revision 2,139
//#define SETUP_FREE_PLUGIN_ON_BOOT
/* This may fix a problem with Stop and Start that I described in the comments to revision 2,139,
and in the comments in the File Description for PluginManager.cpp */
//#define SETUP_FREE_VIDEO_PLUGIN_ON_BOOT
//#define SETUP_FREE_DSP_PLUGIN_ON_BOOT
//#define SETUP_DONT_FREE_PLUGIN_ON_STOP
/* This will avoid deleting the g_EmuThread after Stop, that may hang when we are rendering to a child
window, however, I didn't seem to need this any more */

View File

@ -335,8 +335,8 @@ THREAD_RETURN EmuThread(void *pArg)
VideoInitialize.pKeyPress = Callback_KeyPress;
VideoInitialize.bWii = _CoreParameter.bWii;
VideoInitialize.bUseDualCore = _CoreParameter.bUseDualCore;
// Needed for Stop and Start
#ifdef SETUP_FREE_PLUGIN_ON_BOOT
// May be needed for Stop and Start
#ifdef SETUP_FREE_VIDEO_PLUGIN_ON_BOOT
Plugins.FreeVideo();
#endif
Plugins.GetVideo()->Initialize(&VideoInitialize); // Call the dll
@ -359,8 +359,8 @@ THREAD_RETURN EmuThread(void *pArg)
dspInit.pGetAudioStreaming = AudioInterface::Callback_GetStreaming;
dspInit.pEmulatorState = (int *)PowerPC::GetStatePtr();
dspInit.bWii = _CoreParameter.bWii;
// Needed for Stop and Start
#ifdef SETUP_FREE_PLUGIN_ON_BOOT
// May be needed for Stop and Start
#ifdef SETUP_FREE_DSP_PLUGIN_ON_BOOT
Plugins.FreeDSP();
#endif
Plugins.GetDSP()->Initialize((void *)&dspInit);

View File

@ -190,7 +190,8 @@ bool CPluginManager::InitPlugins()
void CPluginManager::ShutdownPlugins()
{
for (int i = 0; i < MAXPADS; i++) {
if (m_pad[i]) {
if (m_pad[i])
{
m_pad[i]->Shutdown();
//delete m_pad[i];
}
@ -200,8 +201,10 @@ void CPluginManager::ShutdownPlugins()
for (int i = 0; i < MAXWIIMOTES; i++)
{
if (m_wiimote[i])
{
m_wiimote[i]->Shutdown();
//delete m_wiimote[i];
}
//m_wiimote[i] = NULL;
}
@ -209,7 +212,7 @@ void CPluginManager::ShutdownPlugins()
{
m_video->Shutdown();
// With this option, this is done on boot instead
#ifndef SETUP_FREE_PLUGIN_ON_BOOT
#ifndef SETUP_DONT_FREE_PLUGIN_ON_STOP
delete m_video;
m_video = NULL;
#endif
@ -220,7 +223,7 @@ void CPluginManager::ShutdownPlugins()
{
m_dsp->Shutdown();
// With this option, this is done on boot instead
#ifndef SETUP_FREE_PLUGIN_ON_BOOT
#ifndef SETUP_DONT_FREE_PLUGIN_ON_STOP
delete m_dsp;
m_dsp = NULL;
#endif

View File

@ -22,7 +22,6 @@
#define _GLOBALS_H
#include "Common.h"
#include "Setup.h" // Build with music modification. Define MUSICMOD here.
// Constant Colors
const unsigned long COLOR_GRAY = 0xDCDCDC;

View File

@ -26,6 +26,9 @@
#include "ConsoleWindow.h"
// Compile without WxWidgets in Windows to, for debugging purposes
//#define HAVE_WX 0
// Turns file logging on and off
extern bool LocalLogFile;

View File

@ -46,17 +46,21 @@ void CloseConsole();
HINSTANCE g_hInstance;
class wxDLLApp : public wxApp
{
// ------------------------------------------------------
// WxWidgets
// ---------------
#if defined(HAVE_WX) && HAVE_WX
class wxDLLApp : public wxApp
{
bool OnInit()
{
return true;
}
};
IMPLEMENT_APP_NO_MAIN(wxDLLApp)
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
};
IMPLEMENT_APP_NO_MAIN(wxDLLApp)
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
#endif
// ------------------
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
DWORD dwReason, // reason called
@ -65,19 +69,32 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
switch (dwReason)
{
case DLL_PROCESS_ATTACH:
{ // Use wxInitialize() if you don't want GUI instead of the following 12 lines
{
#if defined(HAVE_WX) && HAVE_WX
// Use wxInitialize() if you don't want GUI instead of the following 12 lines
wxSetInstance((HINSTANCE)hinstDLL);
int argc = 0;
char **argv = NULL;
wxEntryStart(argc, argv);
if (!wxTheApp || !wxTheApp->CallOnInit())
return FALSE;
#endif
}
break;
case DLL_PROCESS_DETACH:
#if defined(HAVE_WX) && HAVE_WX
// This causes a "stop hang", if the gfx config dialog has been opened.
wxEntryCleanup(); // Use wxUninitialize() if you don't want GUI
/* JP: Are you sure? Because I tried to debug that for hours with countless Stop and Start
and I frequently gor the stop hang even if I did not open the wxDialog
Update: Howwver, compiling with 'HAVE_WX 0' seems to have reduced the number of hangins,
it only hanged once with that option. And that was when I stopped Starfox Assault that
by the way doesn't work now (it has a black screen).
Update again: No it was probably related to something else, now I had the same luck
with WxWidgets in it to. */
// Old comment: "Use wxUninitialize() if you don't want GUI"
wxEntryCleanup();
#endif
break;
default:
break;

View File

@ -118,13 +118,16 @@ void DllConfig(HWND _hParent)
//Console::Open();
#if defined(_WIN32)
#if defined(_WIN32) && defined(HAVE_WX) && HAVE_WX
wxWindow *win = new wxWindow();
win->SetHWND((WXHWND)_hParent);
win->AdoptAttributesFromHWND();
ConfigDialog *config_dialog = new ConfigDialog(win);
// ---------------------------------------------------------------
// Search for avaliable resolutions
// ---------------------
DWORD iModeNum = 0;
DEVMODE dmi;
ZeroMemory(&dmi, sizeof(dmi));
@ -133,9 +136,6 @@ void DllConfig(HWND _hParent)
resos.reserve(20);
int i = 0;
// ---------------------------------------------------------------
// Search for avaliable resolutions
// ---------------------
while (EnumDisplaySettings(NULL, iModeNum++, &dmi) != 0)
{
char szBuffer[100];
@ -309,7 +309,7 @@ void Shutdown(void)
// This cause some kind of crash, at least in the Release build and with this setup option
// If there wasn't so little explanations and comments in this code I would be more interested
// in trying to fix this function, now I'll just leave it like this, because it works
#ifndef SETUP_FREE_PLUGIN_ON_BOOT
#ifndef SETUP_FREE_VIDEO_PLUGIN_ON_BOOT
TextureMngr::Shutdown();
#endif
OpcodeDecoder_Shutdown();