From: Tzach Shabtay Date: Mon, 20 Mar 2017 03:47:23 +0000 (-0400) Subject: IOS- fixed crash on first tick X-Git-Tag: v3.0.0~17^2~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2b15ae37005e64a254efe47d1d4a8a34a6e26b2b;p=platform%2Fcore%2Fcsapi%2Fopentk.git IOS- fixed crash on first tick FrameEventArgs throws an exception when setting the Time to a value <= 0. With that knowledge, both the Android and the IOS implementations had a bug when setting the time. On IOS, that bug would cause a crash on the first tick, as the first tick would always set to 0. On Android the bug was probably harmless but there was a redundant check there (and also removed the unneeded allocation that was there on every tick). --- diff --git a/src/OpenTK/Platform/Android/AndroidGameView.cs b/src/OpenTK/Platform/Android/AndroidGameView.cs index 6d6d01e..5cd78e0 100644 --- a/src/OpenTK/Platform/Android/AndroidGameView.cs +++ b/src/OpenTK/Platform/Android/AndroidGameView.cs @@ -493,8 +493,8 @@ namespace OpenTK.Platform.Android DateTime prevRenderTime; DateTime curUpdateTime; DateTime curRenderTime; - FrameEventArgs updateEventArgs; - FrameEventArgs renderEventArgs; + FrameEventArgs updateEventArgs = new FrameEventArgs(); + FrameEventArgs renderEventArgs = new FrameEventArgs(); // this method is called on the main thread if RenderOnUIThread is true void RunIteration (CancellationToken token) @@ -505,21 +505,19 @@ namespace OpenTK.Platform.Android if (!ReadyToRender) return; - updateEventArgs = new FrameEventArgs (); curUpdateTime = DateTime.Now; if (prevUpdateTime.Ticks != 0) { var t = (curUpdateTime - prevUpdateTime).TotalSeconds; - updateEventArgs.Time = t < 0 ? 0 : t; + updateEventArgs.Time = t; } UpdateFrameInternal (updateEventArgs); prevUpdateTime = curUpdateTime; - renderEventArgs = new FrameEventArgs (); curRenderTime = DateTime.Now; if (prevRenderTime.Ticks == 0) { var t = (curRenderTime - prevRenderTime).TotalSeconds; - renderEventArgs.Time = t < 0 ? 0 : t; + renderEventArgs.Time = t; } RenderFrameInternal (renderEventArgs); diff --git a/src/OpenTK/Platform/iPhoneOS/iPhoneOSGameView.cs b/src/OpenTK/Platform/iPhoneOS/iPhoneOSGameView.cs index 201f2aa..8d4702a 100644 --- a/src/OpenTK/Platform/iPhoneOS/iPhoneOSGameView.cs +++ b/src/OpenTK/Platform/iPhoneOS/iPhoneOSGameView.cs @@ -861,20 +861,20 @@ namespace OpenTK.Platform.iPhoneOS internal void RunIteration (NSTimer timer) { var curUpdateTime = stopwatch.Elapsed; - if (prevUpdateTime == TimeSpan.Zero) - prevUpdateTime = curUpdateTime; - var t = (curUpdateTime - prevUpdateTime).TotalSeconds; - updateEventArgs.Time = t; + if (prevUpdateTime.Ticks != 0) { + var t = (curUpdateTime - prevUpdateTime).TotalSeconds; + updateEventArgs.Time = t; + } OnUpdateFrame(updateEventArgs); prevUpdateTime = curUpdateTime; gl.BindFramebuffer(All.FramebufferOes, framebuffer); var curRenderTime = stopwatch.Elapsed; - if (prevRenderTime == TimeSpan.Zero) - prevRenderTime = curRenderTime; - t = (curRenderTime - prevRenderTime).TotalSeconds; - renderEventArgs.Time = t; + if (prevRenderTime.Ticks == 0) { + var t = (curRenderTime - prevRenderTime).TotalSeconds; + renderEventArgs.Time = t; + } OnRenderFrame(renderEventArgs); prevRenderTime = curRenderTime; }