public void Run() { SetupCSharpDefaults(); SetupParamStudioConfig(); //new StudioServer(); long previousFrameTicks = 0; Stopwatch sw = new Stopwatch(); sw.Start(); while (_window.Exists) { bool focused = _window.Focused; if (!focused) { _desiredFrameLengthSeconds = 1.0 / 20.0f; } else { _desiredFrameLengthSeconds = 1.0 / 60.0f; } long currentFrameTicks = sw.ElapsedTicks; double deltaSeconds = (currentFrameTicks - previousFrameTicks) / (double)Stopwatch.Frequency; while (_limitFrameRate && deltaSeconds < _desiredFrameLengthSeconds) { currentFrameTicks = sw.ElapsedTicks; deltaSeconds = (currentFrameTicks - previousFrameTicks) / (double)Stopwatch.Frequency; System.Threading.Thread.Sleep(focused ? 0 : 1); } previousFrameTicks = currentFrameTicks; InputSnapshot snapshot = null; Sdl2Events.ProcessEvents(); snapshot = _window.PumpEvents(); InputTracker.UpdateFrameInput(snapshot, _window); Update((float)deltaSeconds); if (!_window.Exists) { break; } if (_window.Focused) { Draw(); } else { // Flush the background queues Renderer.Frame(null, true); } } //DestroyAllObjects(); _gd.Dispose(); SaveParamStudioConfig(); CFG.Save(); System.Windows.Forms.Application.Exit(); }
public void Run() { /*Task.Run(() => * { * while (true) * { * Thread.Sleep(5000); * GC.Collect(); * GC.WaitForPendingFinalizers(); * * GC.Collect(); * } * });*/ // Flush geometry megabuffers for editor geometry //Renderer.GeometryBufferAllocator.FlushStaging(); long previousFrameTicks = 0; Stopwatch sw = new Stopwatch(); sw.Start(); while (_window.Exists) { bool focused = _window.Focused; if (!focused) { _desiredFrameLengthSeconds = 1.0 / 20.0f; } else { _desiredFrameLengthSeconds = 1.0 / 60.0f; } long currentFrameTicks = sw.ElapsedTicks; double deltaSeconds = (currentFrameTicks - previousFrameTicks) / (double)Stopwatch.Frequency; while (_limitFrameRate && deltaSeconds < _desiredFrameLengthSeconds) { currentFrameTicks = sw.ElapsedTicks; deltaSeconds = (currentFrameTicks - previousFrameTicks) / (double)Stopwatch.Frequency; System.Threading.Thread.Sleep(focused ? 0 : 1); } previousFrameTicks = currentFrameTicks; InputSnapshot snapshot = null; Sdl2Events.ProcessEvents(); snapshot = _window.PumpEvents(); InputTracker.UpdateFrameInput(snapshot, _window); Update((float)deltaSeconds); if (!_window.Exists) { break; } if (_window.Focused) { Draw(); } else { // Flush the background queues Renderer.Frame(null, true); } } //DestroyAllObjects(); Resource.ResourceManager.Shutdown(); _gd.Dispose(); CFG.Save(); System.Windows.Forms.Application.Exit(); }