Example #1
0
        /// <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;
        }
Example #2
0
        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);
            }
        }
Example #3
0
 public ISkiaSurface TryCreateSurface(PixelSize size, ISkiaGpuRenderSession session)
 {
     return(null);
 }
Example #4
0
 public ISkiaSurface TryCreateSurface(PixelSize size, ISkiaGpuRenderSession session)
 {
     return(new GenericSkiaSurface(size));
 }