private void Graphics_ContextDestroying(object sender, EventArgs e) { timer.Pause = true; // terminate application _app.Terminate(); // write kernel performance report Profiler.WriteReport(new ConsoleLogger(), "kernel main loop"); // some logging... Logger.Log(LogLevels.Info, "Eresys normally terminated."); Logger.Log(LogLevels.Info, $"Running time: {timer.Time.ToString("F4")} seconds"); Logger.Log(LogLevels.Info, $"Frames rendered: {FramesDrawn}"); Logger.Log(LogLevels.Info, $"Average FPS: {AverageFPS.ToString("F4")}"); Logger.Log(LogLevels.Info, $"Last Measured FPS: {FPS.ToString("F4")}"); }
/// <summary> /// Start de kernel /// </summary> /// <param name="app">De applicatie, een object van een klasse die IApplication implementeerd</param> /// <param name="logFileName">logbestand</param> /// <param name="iniFileName">inibestand</param> /// <returns></returns> public static int Startup(IApplication app, string logFileName, string iniFileName) { try { // init log log = new Log(logFileName); log.WriteHeader("Eresys.Log", true, true); // init form form = new Form(); form.Activated += new EventHandler(Activate); form.Deactivate += new EventHandler(Deactivate); // init settings settings = new Settings(iniFileName); // init kernel (=main) timer timer = new Timer(); // init graphics switch (settings["graphics"]) { case "directx": graphics = new DXGraphics(); break; default: throw new Exception("Graphics renderer " + settings["graphics"] + " invalid!"); } // init controls switch (settings["controls"]) { case "directx": controls = new DXControls(); break; default: throw new Exception("Controls manager " + settings["controls"] + " invalid!"); } // init scene scene = new Scene(); // init profiler Profiler.Enabled = Boolean.Parse(settings["profiler"]); profiler = new Profiler(); // start application app.Startup(); // start main loop log.WriteLine(); log.WriteLine("Entering Main Loop..."); log.WriteLine(); running = true; timer.Pause = false; while (running) { profiler.StartSample("MAIN"); if (active) { // render frame profiler.StartSample("rendering"); profiler.StartSample("begin frame"); graphics.BeginFrame(); profiler.StopSample(); profiler.StartSample("render scene"); scene.Render(); profiler.StopSample(); profiler.StartSample("render app"); app.Render(); profiler.StopSample(); profiler.StartSample("end frame"); graphics.EndFrame(); profiler.StopSample(); profiler.StopSample(); // frame timing profiler.StartSample("frame timing"); timer.Update(); fps = 1.0f / (float)timer.Interval; if (frames == fpsMeasDelay) { fpsOfsTime = timer.Time; } frames++; profiler.StopSample(); } // process application events System.Windows.Forms.Application.DoEvents(); if (active) { // upate controls profiler.StartSample("update controls"); controls.Update(); profiler.StopSample(); // update gamestate profiler.StartSample("update app"); app.Update(); profiler.StopSample(); // update scene profiler.StartSample("update scene"); scene.Update(); profiler.StopSample(); } profiler.StopSample(); } timer.Pause = true; // terminate application app.Terminate(); // finish some business graphics.Dispose(); form.Dispose(); // write kernel performance report profiler.WriteReport(new Log("kernel-profile.log"), "kernel main loop"); // some logging... log.WriteLine("Eresys normally terminated."); log.WriteLine(); log.WriteLine("Running time: " + timer.Time.ToString("F4") + " seconds"); log.WriteLine("Frames rendered: " + frames); log.WriteLine("Average FPS: " + AverageFPS.ToString("F4")); log.WriteLine("Last Measured FPS: " + fps.ToString("F4")); } catch (Exception e) { // als er een exceptie is opgedoken sluit deze code de engine af running = false; Cursor.Show(); form.Hide(); string message = "Eresys terminated due to fatal exception!\r\n\r\nException:\r\n" + e; log.WriteLine(message); MessageBox.Show(message, "Eresys.FatalException", MessageBoxButtons.OK, MessageBoxIcon.Error); return(e.GetHashCode()); // geef een waarde terug. Dit geeft aan dat de toepassing is beëindigt door een fout } return(0); // geef nul terug. Dit geeft aan dat de toepassing normaal is beëindigt }