|
|
@@ -20,6 +20,7 @@ namespace Avalonia.Rendering
|
|
|
private ConcurrentQueue<Rect> _renderQueue = new ConcurrentQueue<Rect>();
|
|
|
private bool _needsUpdate;
|
|
|
private bool _updateQueued;
|
|
|
+ private bool _rendering;
|
|
|
|
|
|
private readonly Stopwatch _stopwatch = Stopwatch.StartNew();
|
|
|
private int _totalFrames;
|
|
|
@@ -169,12 +170,19 @@ namespace Avalonia.Rendering
|
|
|
|
|
|
private void OnRenderLoopTick(object sender, EventArgs e)
|
|
|
{
|
|
|
+ if (_rendering)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
if (_needsUpdate && !_updateQueued)
|
|
|
{
|
|
|
Dispatcher.UIThread.InvokeAsync(UpdateScene, DispatcherPriority.Render);
|
|
|
_updateQueued = true;
|
|
|
}
|
|
|
|
|
|
+ _rendering = true;
|
|
|
+
|
|
|
if (!_renderQueue.IsEmpty)
|
|
|
{
|
|
|
if (_renderTarget == null)
|
|
|
@@ -210,6 +218,8 @@ namespace Avalonia.Rendering
|
|
|
_renderTarget = null;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ _rendering = false;
|
|
|
}
|
|
|
}
|
|
|
}
|