Example #1
0
		public OpenAdvancedChooser(MainForm mainForm)
		{
			this.mainForm = mainForm;

			InitializeComponent();

			RefreshLibretroCore(true);
		}
Example #2
0
		static int SubMain(string[] args)
		{
			// this check has to be done VERY early.  i stepped through a debug build with wrong .dll versions purposely used,
			// and there was a TypeLoadException before the first line of SubMain was reached (some static ColorType init?)
			// zero 25-dec-2012 - only do for public builds. its annoying during development
			if (!VersionInfo.DeveloperBuild)
			{
				var thisversion = typeof(Program).Assembly.GetName().Version;
				var utilversion = Assembly.Load(new AssemblyName("Bizhawk.Client.Common")).GetName().Version;
				var emulversion = Assembly.Load(new AssemblyName("Bizhawk.Emulation.Cores")).GetName().Version;

				if (thisversion != utilversion || thisversion != emulversion)
				{
					MessageBox.Show("Conflicting revisions found!  Don't mix .dll versions!");
					return -1;
				}
			}

			BizHawk.Common.TempFileCleaner.Start();
			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);

			HawkFile.ArchiveHandlerFactory = new SevenZipSharpArchiveHandler();
		
			string iniPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "config.ini");
			Global.Config = ConfigService.Load<Config>(iniPath);
			Global.Config.ResolveDefaults();
			BizHawk.Client.Common.StringLogUtil.DefaultToDisk = Global.Config.MoviesOnDisk;

			//super hacky! this needs to be done first. still not worth the trouble to make this system fully proper
			for (int i = 0; i < args.Length; i++)
			{
				var arg = args[i].ToLower();
				if (arg.StartsWith("--gdi"))
				{
					Global.Config.DispMethod = Config.EDispMethod.GdiPlus;
				}
			}

			//create IGL context. we do this whether or not the user has selected OpenGL, so that we can run opengl-based emulator cores
			GlobalWin.IGL_GL = new Bizware.BizwareGL.Drivers.OpenTK.IGL_TK();

			//setup the GL context manager, needed for coping with multiple opengl cores vs opengl display method
			GLManager.CreateInstance();
			GlobalWin.GLManager = GLManager.Instance;
			GlobalWin.CR_GL = GlobalWin.GLManager.GetContextForIGL(GlobalWin.GL);

			//now create the "GL" context for the display method. we can reuse the IGL_TK context if opengl display method is chosen
		REDO_DISPMETHOD:
			if (Global.Config.DispMethod == Config.EDispMethod.GdiPlus)
				GlobalWin.GL = new Bizware.BizwareGL.Drivers.GdiPlus.IGL_GdiPlus();
			else if (Global.Config.DispMethod == Config.EDispMethod.SlimDX9)
				GlobalWin.GL = new Bizware.BizwareGL.Drivers.SlimDX.IGL_SlimDX9();
			else
			{
				GlobalWin.GL = GlobalWin.IGL_GL;
				//check the opengl version and dont even try to boot this crap up if its too old
				int version = GlobalWin.IGL_GL.Version;
				if (version < 200)
				{
					//fallback
					Global.Config.DispMethod = Config.EDispMethod.GdiPlus;
					goto REDO_DISPMETHOD;
				}
			}

			//WHY do we have to do this? some intel graphics drivers (ig7icd64.dll 10.18.10.3304 on an unknown chip on win8.1) are calling SetDllDirectory() for the process, which ruins stuff.
			//The relevant initialization happened just before in "create IGL context".
			//It isn't clear whether we need the earlier SetDllDirectory(), but I think we do.
			//note: this is pasted instead of being put in a static method due to this initialization code being sensitive to things like that, and not wanting to cause it to break
			//pasting should be safe (not affecting the jit order of things)
			string dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll");
			SetDllDirectory(dllDir);

			if (System.Diagnostics.Debugger.IsAttached)
			{ // Let the debugger handle errors
#if WINDOWS
				if (Global.Config.SingleInstanceMode)
				{
					try
					{
						new SingleInstanceController(args).Run(args);
					}
					catch (ObjectDisposedException)
					{
						/*Eat it, MainForm disposed itself and Run attempts to dispose of itself.  Eventually we would want to figure out a way to prevent that, but in the meantime it is harmless, so just eat the error*/
					}
				}
				else
#endif
				{
					using (var mf = new MainForm(args))
					{
						var title = mf.Text;
						mf.Show();
						mf.Text = title;

						GlobalWin.ExitCode = mf.ProgramRunLoop();
					}
				}
			}
			else
			{ // Display error message windows
				try
				{
#if WINDOWS
					if (Global.Config.SingleInstanceMode)
					{
						try
						{
							new SingleInstanceController(args).Run(args);
						}
						catch (ObjectDisposedException)
						{
							/*Eat it, MainForm disposed itself and Run attempts to dispose of itself.  Eventually we would want to figure out a way to prevent that, but in the meantime it is harmless, so just eat the error*/
						}
					}
					else
#endif
					{
						using (var mf = new MainForm(args))
						{
							var title = mf.Text;
							mf.Show();
							mf.Text = title;

							if (System.Diagnostics.Debugger.IsAttached)
							{
								GlobalWin.ExitCode = mf.ProgramRunLoop();
							}
							else
							{
								try
								{
									GlobalWin.ExitCode = mf.ProgramRunLoop();
								}
								catch (Exception e)
								{
#if WINDOWS
									if (!VersionInfo.DeveloperBuild && Global.MovieSession.Movie.IsActive)
									{
										var result = MessageBox.Show(
											"EmuHawk has thrown a fatal exception and is about to close.\nA movie has been detected. Would you like to try to save?\n(Note: Depending on what caused this error, this may or may succeed)",
											"Fatal error: " + e.GetType().Name,
											MessageBoxButtons.YesNo,
											MessageBoxIcon.Exclamation
											);
										if (result == DialogResult.Yes)
										{
											Global.MovieSession.Movie.Save();
										}
									}
#endif
									throw;
								}
							}
						}
					}
				}
				catch (Exception e)
				{
					new ExceptionBox(e).ShowDialog();
				}
#if WINDOWS
				finally
				{
					if (GlobalWin.Sound != null)
					{
						GlobalWin.Sound.Dispose();
						GlobalWin.Sound = null;
					}
					GlobalWin.GL.Dispose();
					GamePad.CloseAll();
				}
#endif
			}

			//cleanup:
			//cleanup IGL stuff so we can get better refcounts when exiting process, for debugging
			//DOESNT WORK FOR SOME REASON
			//GlobalWin.IGL_GL = new Bizware.BizwareGL.Drivers.OpenTK.IGL_TK();
			//GLManager.Instance.Dispose();
			//if (GlobalWin.IGL_GL != GlobalWin.GL)
			//  GlobalWin.GL.Dispose();
			//((IDisposable)GlobalWin.IGL_GL).Dispose();

			//return 0 assuming things have gone well, non-zero values could be used as error codes or for scripting purposes
			return GlobalWin.ExitCode;
		} //SubMain
Example #3
0
			protected override void OnCreateMainForm()
			{
				MainForm = new MainForm(cmdArgs);
				var title = MainForm.Text;
				MainForm.Show();
				MainForm.Text = title;
				GlobalWin.ExitCode = (MainForm as MainForm).ProgramRunLoop();
			}
Example #4
0
		static void SubMain(string[] args)
		{
			// this check has to be done VERY early.  i stepped through a debug build with wrong .dll versions purposely used,
			// and there was a TypeLoadException before the first line of SubMain was reached (some static ColorType init?)
			// zero 25-dec-2012 - only do for public builds. its annoying during development
			if (!VersionInfo.DeveloperBuild)
			{
				var thisversion = typeof(Program).Assembly.GetName().Version;
				var utilversion = Assembly.LoadWithPartialName("Bizhawk.Client.Common").GetName().Version;
				var emulversion = Assembly.LoadWithPartialName("Bizhawk.Emulation.Cores").GetName().Version;

				if (thisversion != utilversion || thisversion != emulversion)
				{
					MessageBox.Show("Conflicting revisions found!  Don't mix .dll versions!");
					return;
				}
			}

			Application.EnableVisualStyles();
			Application.SetCompatibleTextRenderingDefault(false);
			string iniPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "config.ini");
			Global.Config = ConfigService.Load<Config>(iniPath);
			Global.Config.ResolveDefaults();
			HawkFile.ArchiveHandlerFactory = new SevenZipSharpArchiveHandler();

#if WINDOWS
			try { GlobalWin.DSound = SoundEnumeration.Create(); }
			catch
			{
				MessageBox.Show("Couldn't initialize DirectSound! Things may go poorly for you. Try changing your sound driver to 41khz instead of 48khz in mmsys.cpl.", "Initialization Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
			}
#endif

			//create IGL context.
			//at some point in the future, we may need to select from several drivers
			GlobalWin.GL = new Bizware.BizwareGL.Drivers.OpenTK.IGL_TK();
			GlobalWin.GLManager = new GLManager();
			GlobalWin.CR_GL = GlobalWin.GLManager.GetContextForIGL(GlobalWin.GL);

			//WHY do we have to do this? some intel graphics drivers (ig7icd64.dll 10.18.10.3304 on an unknown chip on win8.1) are calling SetDllDirectory() for the process, which ruins stuff.
			//The relevant initialization happened just before in "create IGL context".
			//It isn't clear whether we need the earlier SetDllDirectory(), but I think we do.
			//note: this is pasted instead of being put in a static method due to this initialization code being sensitive to things like that, and not wanting to cause it to break
			//pasting should be safe (not affecting the jit order of things)
			string dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll");
			SetDllDirectory(dllDir);

			try
			{
#if WINDOWS
				if (Global.Config.SingleInstanceMode)
				{
					try
					{
						new SingleInstanceController(args).Run(args);
					}
					catch (ObjectDisposedException)
					{
						/*Eat it, MainForm disposed itself and Run attempts to dispose of itself.  Eventually we would want to figure out a way to prevent that, but in the meantime it is harmless, so just eat the error*/
					}
				}
				else
				{
#endif
					using (var mf = new MainForm(args))
					{
						var title = mf.Text;
						mf.Show();
						mf.Text = title;
						try
						{
							mf.ProgramRunLoop();
						}
						catch (Exception e)
						{
#if WINDOWS
							if (!VersionInfo.DeveloperBuild && Global.MovieSession.Movie.IsActive)
							{
								var result = MessageBox.Show(
									"EmuHawk has thrown a fatal exception and is about to close.\nA movie has been detected. Would you like to try to save?\n(Note: Depending on what caused this error, this may or may succeed)",
									"Fatal error: " + e.GetType().Name,
									MessageBoxButtons.YesNo,
									MessageBoxIcon.Exclamation
									);
								if (result == DialogResult.Yes)
								{
									Global.MovieSession.Movie.Save();
								}
							}
#endif
							throw;
						}
					}
#if WINDOWS
				}
#endif
			}
			catch (Exception e)
			{
				string message = e.ToString();
				if (e.InnerException != null)
				{
					message += "\n\nInner Exception:\n\n" + e.InnerException;
				}

				message += "\n\nStackTrace:\n" + e.StackTrace;
				MessageBox.Show(message);
			}
#if WINDOWS
			finally
			{
				if (GlobalWin.DSound != null && GlobalWin.DSound.Disposed == false)
					GlobalWin.DSound.Dispose();
				GlobalWin.GL.Dispose();
				GamePad.CloseAll();
			}
#endif
		}
Example #5
0
 private void OnPauseChanged(object sender, MainForm.PauseChangedEventArgs e)
 {
     if (e.Paused)
         FullUpdate();
 }
Example #6
0
        static void SubMain(string[] args)
        {
            // this check has to be done VERY early.  i stepped through a debug build with wrong .dll versions purposely used,
            // and there was a TypeLoadException before the first line of SubMain was reached (some static ColorType init?)
            // zero 25-dec-2012 - only do for public builds. its annoying during development
            if (!VersionInfo.DeveloperBuild)
            {
                var thisversion = typeof(Program).Assembly.GetName().Version;
                var utilversion = Assembly.Load(new AssemblyName("Bizhawk.Client.Common")).GetName().Version;
                var emulversion = Assembly.Load(new AssemblyName("Bizhawk.Emulation.Cores")).GetName().Version;

                if (thisversion != utilversion || thisversion != emulversion)
                {
                    MessageBox.Show("Conflicting revisions found!  Don't mix .dll versions!");
                    return;
                }
            }

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            string iniPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "config.ini");

            Global.Config = ConfigService.Load <Config>(iniPath);
            Global.Config.ResolveDefaults();
            HawkFile.ArchiveHandlerFactory = new SevenZipSharpArchiveHandler();

            //super hacky! this needs to be done first. still not worth the trouble to make this system fully proper
            for (int i = 0; i < args.Length; i++)
            {
                var arg = args[i].ToLower();
                if (arg.StartsWith("--gdi"))
                {
                    Global.Config.DispMethod = Config.EDispMethod.GdiPlus;
                }
            }

            //create IGL context. we do this whether or not the user has selected OpenGL, so that we can run opengl-based emulator cores
            GlobalWin.IGL_GL = new Bizware.BizwareGL.Drivers.OpenTK.IGL_TK();

            //setup the GL context manager, needed for coping with multiple opengl cores vs opengl display method
            GLManager.CreateInstance();
            GlobalWin.GLManager = GLManager.Instance;
            GlobalWin.CR_GL     = GlobalWin.GLManager.GetContextForIGL(GlobalWin.GL);

            //now create the "GL" context for the display method. we can reuse the IGL_TK context if opengl display method is chosen
REDO_DISPMETHOD:
            if (Global.Config.DispMethod == Config.EDispMethod.GdiPlus)
            {
                GlobalWin.GL = new Bizware.BizwareGL.Drivers.GdiPlus.IGL_GdiPlus();
            }
            else if (Global.Config.DispMethod == Config.EDispMethod.SlimDX9)
            {
                GlobalWin.GL = new Bizware.BizwareGL.Drivers.SlimDX.IGL_SlimDX9();
            }
            else
            {
                GlobalWin.GL = GlobalWin.IGL_GL;
                //check the opengl version and dont even try to boot this crap up if its too old
                int version = GlobalWin.IGL_GL.Version;
                if (version < 200)
                {
                    //fallback
                    Global.Config.DispMethod = Config.EDispMethod.GdiPlus;
                    goto REDO_DISPMETHOD;
                }
            }

            //WHY do we have to do this? some intel graphics drivers (ig7icd64.dll 10.18.10.3304 on an unknown chip on win8.1) are calling SetDllDirectory() for the process, which ruins stuff.
            //The relevant initialization happened just before in "create IGL context".
            //It isn't clear whether we need the earlier SetDllDirectory(), but I think we do.
            //note: this is pasted instead of being put in a static method due to this initialization code being sensitive to things like that, and not wanting to cause it to break
            //pasting should be safe (not affecting the jit order of things)
            string dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll");

            SetDllDirectory(dllDir);

            if (System.Diagnostics.Debugger.IsAttached)
            {             // Let the debugger handle errors
#if WINDOWS
                if (Global.Config.SingleInstanceMode)
                {
                    try
                    {
                        new SingleInstanceController(args).Run(args);
                    }
                    catch (ObjectDisposedException)
                    {
                        /*Eat it, MainForm disposed itself and Run attempts to dispose of itself.  Eventually we would want to figure out a way to prevent that, but in the meantime it is harmless, so just eat the error*/
                    }
                }
                else
#endif
                {
                    using (var mf = new MainForm(args))
                    {
                        var title = mf.Text;
                        mf.Show();
                        mf.Text = title;

                        mf.ProgramRunLoop();
                    }
                }
            }
            else
            {             // Display error message windows
                try
                {
#if WINDOWS
                    if (Global.Config.SingleInstanceMode)
                    {
                        try
                        {
                            new SingleInstanceController(args).Run(args);
                        }
                        catch (ObjectDisposedException)
                        {
                            /*Eat it, MainForm disposed itself and Run attempts to dispose of itself.  Eventually we would want to figure out a way to prevent that, but in the meantime it is harmless, so just eat the error*/
                        }
                    }
                    else
#endif
                    {
                        using (var mf = new MainForm(args))
                        {
                            var title = mf.Text;
                            mf.Show();
                            mf.Text = title;

                            if (System.Diagnostics.Debugger.IsAttached)
                            {
                                mf.ProgramRunLoop();
                            }
                            else
                            {
                                try
                                {
                                    mf.ProgramRunLoop();
                                }
                                catch (Exception e)
                                {
#if WINDOWS
                                    if (!VersionInfo.DeveloperBuild && Global.MovieSession.Movie.IsActive)
                                    {
                                        var result = MessageBox.Show(
                                            "EmuHawk has thrown a fatal exception and is about to close.\nA movie has been detected. Would you like to try to save?\n(Note: Depending on what caused this error, this may or may succeed)",
                                            "Fatal error: " + e.GetType().Name,
                                            MessageBoxButtons.YesNo,
                                            MessageBoxIcon.Exclamation
                                            );
                                        if (result == DialogResult.Yes)
                                        {
                                            Global.MovieSession.Movie.Save();
                                        }
                                    }
#endif
                                    throw;
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    string message = e.ToString();
                    if (e.InnerException != null)
                    {
                        message += "\n\nInner Exception:\n\n" + e.InnerException;
                    }

                    message += "\n\nStackTrace:\n" + e.StackTrace;
                    MessageBox.Show(message);
                }
#if WINDOWS
                finally
                {
                    if (GlobalWin.Sound != null)
                    {
                        GlobalWin.Sound.Dispose();
                        GlobalWin.Sound = null;
                    }
                    GlobalWin.GL.Dispose();
                    GamePad.CloseAll();
                }
#endif
            }
        }