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

Loading…
Cancel
Save