예제 #1
0
파일: Kernel.cs 프로젝트: wtrsltnk/eresys
        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")}");
        }
예제 #2
0
        /// <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
        }