private static void RunFrame() { PerfProfiler.FrameStart(); // Run the GLThread queued commands. PerfProfiler.FrameEventStart("GLThread.Run"); GLThread.Run(); PerfProfiler.FrameEventEnd("GLThread.Run"); PerfProfiler.FrameEventStart("StartFrame"); Renderer.StartFrame(); PerfProfiler.FrameEventEnd("StartFrame"); PerfProfiler.FrameEventStart("Scene.Draw"); SceneManager.Draw(Renderer); PerfProfiler.FrameEventEnd("Scene.Draw"); PerfProfiler.FrameEventStart("EndFrame"); Renderer.EndFrame(); PerfProfiler.FrameEventEnd("EndFrame"); PerfProfiler.FrameEventStart("BufferSwap"); Host.Window.Context.SwapBuffers(); PerfProfiler.FrameEventEnd("BufferSwap"); #if TIMING_DEBUG _frameId++; Console.Write(_curUpdateC); #endif PerfProfiler.FrameEnd(); }
/// <summary> /// Is run every frame by the host. /// </summary> private static void LoopDraw(float frameTime) { // If not focused, or the renderer tells us not to render the frame - don't draw. if (!Host.Focused || !Renderer.RenderFrame()) { Task.Delay(1).Wait(); return; } // Run the thread manager. GLThread.Run(); // Get frame time and increment total time. FrameTime = frameTime; TotalTime += frameTime; // Clear the screen. Renderer.Clear(); Helpers.CheckError("renderer clear"); // Draw the layers. LayerManager.Draw(); Helpers.CheckError("layer draw"); // Finish rendering. Renderer.End(); Helpers.CheckError("renderer end"); // Draw debug. Debugger.Draw(); // Swap buffers. Host.SwapBuffers(); }