OpenTK.GameWindow.RaiseRenderFrame C# (CSharp) Method

RaiseRenderFrame() private method

private RaiseRenderFrame ( Stopwatch render_watch, double &next_render, FrameEventArgs render_args ) : void
render_watch Stopwatch
next_render double
render_args FrameEventArgs
return void
        void RaiseRenderFrame(Stopwatch render_watch, ref double next_render, FrameEventArgs render_args)
        {
            // Cap the maximum time drift to 1 second (e.g. when the process is suspended).
            double time = render_watch.Elapsed.TotalSeconds;
            if (time <= 0)
            {
                // Protect against negative Stopwatch.Elapsed values.
                // See http://connect.microsoft.com/VisualStudio/feedback/details/94083/stopwatch-returns-negative-elapsed-time
                render_watch.Reset();
                render_watch.Start();
                return;
            }
            if (time > 1.0)
                time = 1.0;
            double time_left = next_render - time;

            if (time_left <= 0.0 && time > 0)
            {
                // Schedule next render event. The 1 second cap ensures
                // the process does not appear to hang.
                next_render = time_left + TargetRenderPeriod;
                if (next_render < -1.0)
                    next_render = -1.0;

                render_watch.Reset();
                render_watch.Start();

                if (time > 0)
                {
                    render_period = render_args.Time = time;
                    OnRenderFrameInternal(render_args);
                    render_time = render_watch.Elapsed.TotalSeconds;
                }
            }
        }