|
|
|
@ -29,6 +29,7 @@ namespace Avalonia.Rendering |
|
|
|
private readonly ISceneBuilder _sceneBuilder; |
|
|
|
|
|
|
|
private bool _running; |
|
|
|
private bool _disposed; |
|
|
|
private volatile IRef<Scene> _scene; |
|
|
|
private DirtyVisuals _dirty; |
|
|
|
private IRef<IRenderTargetBitmapImpl> _overlay; |
|
|
|
@ -125,6 +126,9 @@ namespace Avalonia.Rendering |
|
|
|
{ |
|
|
|
lock (_sceneLock) |
|
|
|
{ |
|
|
|
if (_disposed) |
|
|
|
return; |
|
|
|
_disposed = true; |
|
|
|
var scene = _scene; |
|
|
|
_scene = null; |
|
|
|
scene?.Dispose(); |
|
|
|
@ -171,7 +175,7 @@ namespace Avalonia.Rendering |
|
|
|
var t = (IRenderLoopTask)this; |
|
|
|
if(t.NeedsUpdate) |
|
|
|
UpdateScene(); |
|
|
|
if(_scene.Item != null) |
|
|
|
if(_scene?.Item != null) |
|
|
|
Render(true); |
|
|
|
} |
|
|
|
|
|
|
|
@ -481,6 +485,8 @@ namespace Avalonia.Rendering |
|
|
|
Dispatcher.UIThread.VerifyAccess(); |
|
|
|
lock (_sceneLock) |
|
|
|
{ |
|
|
|
if (_disposed) |
|
|
|
return; |
|
|
|
if (_scene?.Item.Generation > _lastSceneId) |
|
|
|
return; |
|
|
|
} |
|
|
|
|