Browse Source

Don't use manual FBO for RenderTargetBitmap/VisualBrush.

Fixes the first part of #4944.
pull/5024/head
Steven Kirk 6 years ago
parent
commit
59d531b9f3
  1. 12
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs
  2. 3
      src/Skia/Avalonia.Skia/PlatformRenderInterface.cs
  3. 5
      src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs

12
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@ -434,7 +434,7 @@ namespace Avalonia.Skia
/// <inheritdoc />
public IDrawingContextLayerImpl CreateLayer(Size size)
{
return CreateRenderTarget( size);
return CreateRenderTarget(size, true);
}
/// <inheritdoc />
@ -673,7 +673,7 @@ namespace Avalonia.Skia
private void ConfigureTileBrush(ref PaintWrapper paintWrapper, Size targetSize, ITileBrush tileBrush, IDrawableBitmapImpl tileBrushImage)
{
var calc = new TileBrushCalculator(tileBrush, tileBrushImage.PixelSize.ToSizeWithDpi(_dpi), targetSize);
var intermediate = CreateRenderTarget(calc.IntermediateSize);
var intermediate = CreateRenderTarget(calc.IntermediateSize, false);
paintWrapper.AddDisposable(intermediate);
@ -748,7 +748,7 @@ namespace Avalonia.Skia
if (intermediateSize.Width >= 1 && intermediateSize.Height >= 1)
{
var intermediate = CreateRenderTarget(intermediateSize);
var intermediate = CreateRenderTarget(intermediateSize, false);
using (var ctx = intermediate.CreateDrawingContext(visualBrushRenderer))
{
@ -978,9 +978,10 @@ namespace Avalonia.Skia
/// Create new render target compatible with this drawing context.
/// </summary>
/// <param name="size">The size of the render target in DIPs.</param>
/// <param name="isLayer">Whether the render target is being created for a layer.</param>
/// <param name="format">Pixel format.</param>
/// <returns></returns>
private SurfaceRenderTarget CreateRenderTarget(Size size, PixelFormat? format = null)
private SurfaceRenderTarget CreateRenderTarget(Size size, bool isLayer, PixelFormat? format = null)
{
var pixelSize = PixelSize.FromSizeWithDpi(size, _dpi);
var createInfo = new SurfaceRenderTarget.CreateInfo
@ -992,7 +993,8 @@ namespace Avalonia.Skia
DisableTextLcdRendering = !_canTextUseLcdRendering,
GrContext = _grContext,
Gpu = _gpu,
Session = _session
Session = _session,
DisableManualFbo = !isLayer,
};
return new SurfaceRenderTarget(createInfo);

3
src/Skia/Avalonia.Skia/PlatformRenderInterface.cs

@ -124,7 +124,8 @@ namespace Avalonia.Skia
Width = size.Width,
Height = size.Height,
Dpi = dpi,
DisableTextLcdRendering = false
DisableTextLcdRendering = false,
DisableManualFbo = true,
};
return new SurfaceRenderTarget(createInfo);

5
src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs

@ -51,7 +51,8 @@ namespace Avalonia.Skia
_grContext = createInfo.GrContext;
_gpu = createInfo.Gpu;
_surface = _gpu?.TryCreateSurface(PixelSize, createInfo.Session);
if (!createInfo.DisableManualFbo)
_surface = _gpu?.TryCreateSurface(PixelSize, createInfo.Session);
if (_surface == null)
_surface = new SkiaSurfaceWrapper(CreateSurface(createInfo.GrContext, PixelSize.Width, PixelSize.Height,
createInfo.Format));
@ -220,6 +221,8 @@ namespace Avalonia.Skia
public ISkiaGpu Gpu;
public ISkiaGpuRenderSession Session;
public bool DisableManualFbo;
}
}
}

Loading…
Cancel
Save