diff --git a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs index 685987ae80..ccfc03241b 100644 --- a/src/Skia/Avalonia.Skia/DrawingContextImpl.cs +++ b/src/Skia/Avalonia.Skia/DrawingContextImpl.cs @@ -26,6 +26,7 @@ namespace Avalonia.Skia private readonly Stack _opacityStack = new Stack(); 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. /// public bool DisableTextLcdRendering; + + /// + /// Optional GPU context. + /// + public GRContext GrContext; } /// @@ -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); diff --git a/src/Skia/Avalonia.Skia/GlRenderTarget.cs b/src/Skia/Avalonia.Skia/GlRenderTarget.cs index 17470d91b6..608d418fd0 100644 --- a/src/Skia/Avalonia.Skia/GlRenderTarget.cs +++ b/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(() => diff --git a/src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs b/src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs index 88200dcfbe..c5562e1912 100644 --- a/src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs +++ b/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; + /// /// Create new surface render target. /// @@ -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 /// Height. /// Format. /// - 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); } /// @@ -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. /// public bool DisableTextLcdRendering; + + /// + /// Optional GPU context. + /// + public GRContext GrContext; } } } \ No newline at end of file