Browse Source

Force RenderComposite on UI thread

pull/2108/head
Nikita Tsukanov 8 years ago
parent
commit
ec628116f6
  1. 27
      src/Avalonia.Visuals/Rendering/DeferredRenderer.cs

27
src/Avalonia.Visuals/Rendering/DeferredRenderer.cs

@ -144,7 +144,7 @@ namespace Avalonia.Rendering
var t = (IRenderLoopTask)this;
if(t.NeedsUpdate)
UpdateScene();
t.Render();
Render(true);
}
/// <inheritdoc/>
@ -176,12 +176,7 @@ namespace Avalonia.Rendering
void IRenderLoopTask.Update(TimeSpan time) => UpdateScene();
void IRenderLoopTask.Render()
{
using (var l = _lock.TryLock())
if (l != null)
Render();
}
void IRenderLoopTask.Render() => Render(false);
/// <inheritdoc/>
Size IVisualBrushRenderer.GetRenderTargetSize(IVisualBrush brush)
@ -202,17 +197,19 @@ namespace Avalonia.Rendering
internal void UnitTestUpdateScene() => UpdateScene();
internal void UnitTestRender() => Render(_scene.Item);
internal void UnitTestRender() => Render(_scene.Item, false);
private void Render()
private void Render(bool forceComposite)
{
using (var scene = _scene?.Clone())
{
Render(scene?.Item);
}
using (var l = _lock.TryLock())
if (l != null)
using (var scene = _scene?.Clone())
{
Render(scene?.Item, forceComposite);
}
}
private void Render(Scene scene)
private void Render(Scene scene, bool forceComposite)
{
bool renderOverlay = DrawDirtyRects || DrawFps;
bool composite = false;
@ -256,7 +253,7 @@ namespace Avalonia.Rendering
RenderOverlay(scene, context);
RenderComposite(scene, context);
}
else if (composite)
else if (composite || forceComposite)
{
context = context ?? RenderTarget.CreateDrawingContext(this);
RenderComposite(scene, context);

Loading…
Cancel
Save