Browse Source

Create SKSurfaces with a GRContext if one is provided.

thread-issue-repro
Nelson Carrillo 8 years ago
parent
commit
fd6bc602c2
  1. 10
      src/Skia/Avalonia.Skia/DrawingContextImpl.cs
  2. 3
      src/Skia/Avalonia.Skia/GlRenderTarget.cs
  3. 19
      src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs

10
src/Skia/Avalonia.Skia/DrawingContextImpl.cs

@ -26,6 +26,7 @@ namespace Avalonia.Skia
private readonly Stack<double> _opacityStack = new Stack<double>();
private readonly Matrix? _postTransform;
private readonly IVisualBrushRenderer _visualBrushRenderer;
private readonly GRContext _grContext;
private double _currentOpacity = 1.0f;
private readonly bool _canTextUseLcdRendering;
private Matrix _currentTransform;
@ -54,6 +55,11 @@ namespace Avalonia.Skia
/// Render text without Lcd rendering.
/// </summary>
public bool DisableTextLcdRendering;
/// <summary>
/// Optional GPU context.
/// </summary>
public GRContext GrContext;
}
/// <summary>
@ -65,6 +71,7 @@ namespace Avalonia.Skia
{
_dpi = createInfo.Dpi;
_visualBrushRenderer = createInfo.VisualBrushRenderer;
_grContext = createInfo.GrContext;
_disposables = disposables;
_canTextUseLcdRendering = !createInfo.DisableTextLcdRendering;
@ -615,7 +622,8 @@ namespace Avalonia.Skia
Height = height,
Dpi = dpi,
Format = format,
DisableTextLcdRendering = !_canTextUseLcdRendering
DisableTextLcdRendering = !_canTextUseLcdRendering,
GrContext = _grContext
};
return new SurfaceRenderTarget(createInfo);

3
src/Skia/Avalonia.Skia/GlRenderTarget.cs

@ -66,7 +66,8 @@ namespace Avalonia.Skia
Canvas = _canvas,
Dpi = new Vector(dpiX * SkiaPlatform.DefaultDpi.X, dpiY * SkiaPlatform.DefaultDpi.Y),
VisualBrushRenderer = visualBrushRenderer,
DisableTextLcdRendering = true
DisableTextLcdRendering = true,
GrContext = _grContext
};
return new DrawingContextImpl(createInfo, Disposable.Create(() =>

19
src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs

@ -19,7 +19,8 @@ namespace Avalonia.Skia
private readonly SKSurface _surface;
private readonly SKCanvas _canvas;
private readonly bool _disableLcdRendering;
private readonly GRContext _grContext;
/// <summary>
/// Create new surface render target.
/// </summary>
@ -30,8 +31,8 @@ namespace Avalonia.Skia
PixelHeight = createInfo.Height;
_dpi = createInfo.Dpi;
_disableLcdRendering = createInfo.DisableTextLcdRendering;
_surface = CreateSurface(PixelWidth, PixelHeight, createInfo.Format);
_grContext = createInfo.GrContext;
_surface = CreateSurface(PixelWidth, PixelHeight, createInfo.GrContext, createInfo.Format);
_canvas = _surface?.Canvas;
@ -48,11 +49,10 @@ namespace Avalonia.Skia
/// <param name="height">Height.</param>
/// <param name="format">Format.</param>
/// <returns></returns>
private static SKSurface CreateSurface(int width, int height, PixelFormat? format)
private static SKSurface CreateSurface(int width, int height, GRContext grContext, PixelFormat? format)
{
var imageInfo = MakeImageInfo(width, height, format);
return SKSurface.Create(imageInfo);
return grContext != null ? SKSurface.Create(grContext, false, imageInfo) : SKSurface.Create(imageInfo);
}
/// <inheritdoc />
@ -73,7 +73,7 @@ namespace Avalonia.Skia
Canvas = _canvas,
Dpi = _dpi,
VisualBrushRenderer = visualBrushRenderer,
DisableTextLcdRendering = _disableLcdRendering
DisableTextLcdRendering = true
};
return new DrawingContextImpl(createInfo);
@ -164,6 +164,11 @@ namespace Avalonia.Skia
/// Render text without Lcd rendering.
/// </summary>
public bool DisableTextLcdRendering;
/// <summary>
/// Optional GPU context.
/// </summary>
public GRContext GrContext;
}
}
}
Loading…
Cancel
Save