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); }
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); }
IEnumerator <ITask> UpdateFrameHandler(UpdateFrame update) { update.ResponsePort.Post(DefaultUpdateResponseType.Instance); SendNotification(_submgrPort, update); yield break; }
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); }
private void OnUpdateFrameInternal(FrameEventArgs e) { UpdateReady = true; if (Enabled) { UpdateFrame?.Invoke(e); } }
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(); } }
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); } }
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); }
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(); }
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(); }