示例#1
0
 private void ReleaseDisplayLink()
 {
     if (_isAttachedToLooper)
     {
         //Detach the _displayLink to the MainLoop (uiThread).
         _displayLink?.RemoveFromRunLoop(NSRunLoop.Main, NSRunLoop.NSDefaultRunLoopMode);                //detaches from the UI thread
         _displayLink?.RemoveFromRunLoop(NSRunLoop.Main, NSRunLoop.UITrackingRunLoopMode);
         _displayLink        = null;
         _isAttachedToLooper = false;
     }
 }
示例#2
0
 public void StopAnimation()
 {
     if (dl != null)
     {
         dl.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
     }
 }
        private void ReleaseDisplayLink()
        {
            if (_isAttachedToLooper)
            {
                //Detach the _displayLink to the MainLoop (uiThread).
#if __IOS__
#if NET6_0_OR_GREATER
                _displayLink?.RemoveFromRunLoop(NSRunLoop.Main, NSRunLoopMode.Default);                //detaches from the UI thread
                _displayLink?.RemoveFromRunLoop(NSRunLoop.Main, NSRunLoopMode.UITracking);
#else
                _displayLink?.RemoveFromRunLoop(NSRunLoop.Main, NSRunLoop.NSDefaultRunLoopMode);                //detaches from the UI thread
                _displayLink?.RemoveFromRunLoop(NSRunLoop.Main, NSRunLoop.UITrackingRunLoopMode);
#endif
                _displayLink = null;
#endif
                _isAttachedToLooper = false;
            }
        }
 protected override void DisableTimer()
 {
     if (_link != null)
     {
         _link.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoop.NSRunLoopCommonModes);
         _link.Dispose();
     }
     _link = null;
 }
示例#5
0
 partial void OnCancel()
 {
     if (displayLink != null)
     {
         displayLink.RemoveFromRunLoop(Foundation.NSRunLoop.Main, Foundation.NSRunLoopMode.Common);
         displayLink = null;
         OnStop();
     }
 }
示例#6
0
 public override void Stop()
 {
     if (link == null)
     {
         return;
     }
     link?.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoop.NSRunLoopCommonModes);
     link?.Dispose();
     link = null;
 }
示例#7
0
        public override void Stop()
        {
            if (_link == null)
            {
                return;
            }

            _link?.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoopMode.Common);
            _link?.Dispose();
            _link = null;
        }
 protected override void Dispose(bool disposing)
 {
     if (_disposed)
     {
         return;
     }
     if (disposing)
     {
         _displayLink.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoopMode.Default);
         GraphicsDevice.Dispose();
     }
     _disposed = true;
     base.Dispose(disposing);
 }
        private void CreateDisplayLink()
        {
            if (_displayLink != null)
            {
                _displayLink.RemoveFromRunLoop(NSRunLoop.Main, NSRunLoop.NSDefaultRunLoopMode);
            }

            _displayLink = UIScreen.MainScreen.CreateDisplayLink(_viewController.View as iOSGameView, new Selector("doTick"));

            // FrameInterval represents how many frames must pass before the selector
            // is called again. We calculate this by dividing our target elapsed time by
            // the duration of a frame on iOS (Which is 1/60.0f at the time of writing this).
            _displayLink.FrameInterval = (int)Math.Round(60f * Game.TargetElapsedTime.TotalSeconds);

            _displayLink.AddToRunLoop(NSRunLoop.Main, NSRunLoop.NSDefaultRunLoopMode);
        }
示例#10
0
        void OnUpdate()
        {
            bool lowMem = false;

            while (_events.Count > 0)
            {
                EventBase e;
                _events.TryDequeue(out e);
                _frame.Enqueue(e);

                if (e is Pause)
                {
                    DoUpdate();
                    _link.RemoveFromRunLoop(NSRunLoop.Current, NSRunLoop.NSDefaultRunLoopMode);
                    _link.Dispose();
                    return;
                }
                else if (e is LowMemory)
                {
                    lowMem = true;
                }
                else if (e is Resize)
                {
                    this.InvokeOnMainThread(() => {
                        EAGLContext.SetCurrentContext(_glContext);
                        this.Initialize(false);
                    });
                }
            }

            DoUpdate();
            _frame.ClearEvents();

            if (lowMem)
            {
                _lowMemHandled = true;
            }
        }