protected override void OnOpenGlRender(GlInterface gl, int fb)
        {
            var elapsed = _stopwatch.ElapsedMilliseconds / 1000.0;

            if (elapsed <= 0)
            {
                if (!_stopwatch.IsRunning)
                {
                    _stopwatch.Start();
                    Dispatcher.UIThread.Post(InvalidateVisual, DispatcherPriority.Background);
                }
                return;
            }
            _stopwatch.Restart();
            try
            {
                UpdateFrame?.Invoke(new FrameEventArgs(elapsed));
                RenderFrame?.Invoke(new FrameEventArgs(elapsed));
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }


            Dispatcher.UIThread.Post(InvalidateVisual, DispatcherPriority.Background);
        }
Example #2
0
        void FrameHandler(Frame frame)
        {
            Frame previous = new Frame();

            previous.Image     = _state.Image;
            previous.TimeStamp = _state.TimeStamp;

            _state.Image     = frame.Image;
            _state.TimeStamp = frame.TimeStamp;

            if (previous.Image != null)
            {
                if (_streamPort != null)
                {
                    _streamPort.Post(previous);
                }
                else
                {
                    previous.Image.Dispose();
                }
            }

            UpdateFrameRequest request = new UpdateFrameRequest();

            request.TimeStamp = frame.TimeStamp;

            UpdateFrame update = new UpdateFrame();

            update.Body         = request;
            update.ResponsePort = null;

            _fwdPort.Post(update);
        }
Example #3
0
        IEnumerator <ITask> UpdateFrameHandler(UpdateFrame update)
        {
            update.ResponsePort.Post(DefaultUpdateResponseType.Instance);

            SendNotification(_submgrPort, update);
            yield break;
        }
Example #4
0
        private void OnInternalUpdate(object sender, OpenTK.FrameEventArgs e)
        {
            UpdateFrameEventArgs args = new UpdateFrameEventArgs(e.Time * 1000D);

            Time = args.Time;

            OnUpdateFrame(this, args);
            UpdateFrame?.Invoke(this, args);
        }
Example #5
0
        private void OnUpdateFrameInternal(FrameEventArgs e)
        {
            UpdateReady = true;

            if (Enabled)
            {
                UpdateFrame?.Invoke(e);
            }
        }
Example #6
0
 private void ApplicationOnIdle(object sender, EventArgs eventArgs)
 {
     // no guard needed -- we hooked into the event in Load handler
     while (IsIdle)
     {
         var milliseconds = ComputeTimeSlice();
         Accumulate(milliseconds);
         UpdateFrame?.Invoke(this, new FrameEventArgs(milliseconds));
         Invalidate();
     }
 }
Example #7
0
        private void DispatchUpdateFrame()
        {
            double timestamp = UpdateWatch.Elapsed.TotalSeconds;
            double elapsed   = ClampElapsed(timestamp - LastUpdate);

            if (elapsed > 0.0 /* && elapsed >= TargetUpdatePeriod*/)
            {
                UpdateFrequency = 1d / elapsed;
                LastUpdate      = timestamp;
                UpdateFrame?.Invoke(elapsed / 1000.0);
            }
        }
Example #8
0
        public AndroidPlatformGameWindow(AndroidPlatformGameView gameView)
        {
            this.gameView = gameView;

            gameView.Load               += (o, e) => Load?.Invoke(o, e);
            gameView.Unload             += (o, e) => Unload?.Invoke(o, e);
            gameView.UpdateFrame        += (o, e) => UpdateFrame?.Invoke(o, e);
            gameView.RenderFrame        += (o, e) => RenderFrame?.Invoke(o, e);
            gameView.Resize             += (o, e) => Resize?.Invoke(o, e);
            gameView.Closed             += (o, e) => Closed?.Invoke(o, e);
            gameView.Disposed           += (o, e) => Disposed?.Invoke(o, e);
            gameView.TitleChanged       += (o, e) => TitleChanged?.Invoke(o, e);
            gameView.VisibleChanged     += (o, e) => VisibleChanged?.Invoke(o, e);
            gameView.WindowStateChanged += (o, e) => WindowStateChanged?.Invoke(o, e);
        }
Example #9
0
        private void RunIteration(NSTimer timer)
        {
            var curUpdateTime = stopwatch.Elapsed;

            if (prevUpdateTime == TimeSpan.Zero)
            {
                prevUpdateTime = curUpdateTime;
            }
            var delta = (float)(curUpdateTime - prevUpdateTime).TotalSeconds;

            UpdateFrame?.Invoke(delta);
            prevUpdateTime = curUpdateTime;
            GL.BindFramebuffer(FramebufferTarget.Framebuffer, framebuffer);
            renderContext.Begin(framebuffer);
            RenderFrame?.Invoke();
            renderContext.End();
        }
Example #10
0
        public void Draw(MTKView view)
        {
            if (vkContext == null)
            {
                vkContext = new Graphics.Platform.Vulkan.PlatformRenderContext();
                PlatformRenderer.Initialize(vkContext);
            }
            if (vkSwapChain == null)
            {
                shouldUpdateMetalLayerSize = true;
            }
            if (shouldUpdateMetalLayerSize)
            {
                var screen       = Window?.Screen ?? UIScreen.MainScreen;
                var drawableSize = Bounds.Size;
                drawableSize.Width     *= screen.NativeScale;
                drawableSize.Height    *= screen.NativeScale;
                metalLayer.DrawableSize = drawableSize;
                if (vkSwapChain == null)
                {
                    vkSwapChain = new Graphics.Platform.Vulkan.Swapchain(vkContext, this.Handle, (int)metalLayer.DrawableSize.Width, (int)metalLayer.DrawableSize.Height);
                }
                else
                {
                    vkSwapChain.Resize((int)metalLayer.DrawableSize.Width, (int)metalLayer.DrawableSize.Height);
                }
                shouldUpdateMetalLayerSize = false;
            }
            shouldUpdateMetalLayerSize = false;
            var curUpdateTime = stopwatch.Elapsed;

            if (prevUpdateTime == TimeSpan.Zero)
            {
                prevUpdateTime = curUpdateTime;
            }
            var delta = (float)(curUpdateTime - prevUpdateTime).TotalSeconds;

            UpdateFrame?.Invoke(delta);
            prevUpdateTime = curUpdateTime;
            RenderFrame?.Invoke();
        }