/// <summary> /// Create new drawing context. /// </summary> /// <param name="createInfo">Create info.</param> /// <param name="disposables">Array of elements to dispose after drawing has finished.</param> public DrawingContextImpl(CreateInfo createInfo, params IDisposable[] disposables) { _dpi = createInfo.Dpi; _visualBrushRenderer = createInfo.VisualBrushRenderer; _disposables = disposables; _canTextUseLcdRendering = !createInfo.DisableTextLcdRendering; _grContext = createInfo.GrContext; _gpu = createInfo.Gpu; if (_grContext != null) { Monitor.Enter(_grContext); } Surface = createInfo.Surface; Canvas = createInfo.Canvas ?? createInfo.Surface?.Canvas; _session = createInfo.CurrentSession; if (Canvas == null) { throw new ArgumentException("Invalid create info - no Canvas provided", nameof(createInfo)); } if (!_dpi.NearlyEquals(SkiaPlatform.DefaultDpi)) { _postTransform = Matrix.CreateScale(_dpi.X / SkiaPlatform.DefaultDpi.X, _dpi.Y / SkiaPlatform.DefaultDpi.Y); } Transform = Matrix.Identity; }
public ISkiaSurface TryCreateSurface(PixelSize size, ISkiaGpuRenderSession session) { // Only windows platform needs our FBO trickery if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { return(null); } // Blit feature requires glBlitFramebuffer if (!_glContext.GlInterface.IsBlitFramebufferAvailable) { return(null); } size = new PixelSize(Math.Max(size.Width, 1), Math.Max(size.Height, 1)); if (_canCreateSurfaces == false) { return(null); } try { var surface = new FboSkiaSurface(_grContext, _glContext, size, session?.SurfaceOrigin ?? GRSurfaceOrigin.TopLeft); _canCreateSurfaces = true; return(surface); } catch (Exception) { Logger.TryGet(LogEventLevel.Error, "OpenGL") ?.Log(this, "Unable to create a Skia-compatible FBO manually"); _canCreateSurfaces ??= false; return(null); } }
public ISkiaSurface TryCreateSurface(PixelSize size, ISkiaGpuRenderSession session) { return(null); }
public ISkiaSurface TryCreateSurface(PixelSize size, ISkiaGpuRenderSession session) { return(new GenericSkiaSurface(size)); }