Browse Source
Merge pull request #4380 from AvaloniaUI/ncomp-deps
Expose extra APIs for custom renderers
repro/carousel-not-materializing-content
Nikita Tsukanov
6 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with
26 additions and
10 deletions
-
src/Avalonia.Native/WindowImplBase.cs
-
src/Avalonia.X11/X11Window.cs
-
src/Skia/Avalonia.Skia/DrawingContextImpl.cs
-
src/Skia/Avalonia.Skia/FramebufferRenderTarget.cs
-
src/Skia/Avalonia.Skia/Gpu/ISkiaGpuRenderSession.cs
-
src/Skia/Avalonia.Skia/Gpu/OpenGl/GlRenderTarget.cs
-
src/Skia/Avalonia.Skia/Gpu/SkiaGpuRenderTarget.cs
-
src/Skia/Avalonia.Skia/ISkiaDrawingContextImpl.cs
-
src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs
|
|
|
@ -300,7 +300,15 @@ namespace Avalonia.Native |
|
|
|
public IRenderer CreateRenderer(IRenderRoot root) |
|
|
|
{ |
|
|
|
if (_deferredRendering) |
|
|
|
return new DeferredRenderer(root, AvaloniaLocator.Current.GetService<IRenderLoop>()); |
|
|
|
{ |
|
|
|
var loop = AvaloniaLocator.Current.GetService<IRenderLoop>(); |
|
|
|
var customRendererFactory = AvaloniaLocator.Current.GetService<IRendererFactory>(); |
|
|
|
|
|
|
|
if (customRendererFactory != null) |
|
|
|
return customRendererFactory.Create(root, loop); |
|
|
|
return new DeferredRenderer(root, loop); |
|
|
|
} |
|
|
|
|
|
|
|
return new ImmediateRenderer(root); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -331,6 +331,11 @@ namespace Avalonia.X11 |
|
|
|
public IRenderer CreateRenderer(IRenderRoot root) |
|
|
|
{ |
|
|
|
var loop = AvaloniaLocator.Current.GetService<IRenderLoop>(); |
|
|
|
var customRendererFactory = AvaloniaLocator.Current.GetService<IRendererFactory>(); |
|
|
|
|
|
|
|
if (customRendererFactory != null) |
|
|
|
return customRendererFactory.Create(root, loop); |
|
|
|
|
|
|
|
return _platform.Options.UseDeferredRendering ? |
|
|
|
new DeferredRenderer(root, loop) : |
|
|
|
(IRenderer)new X11ImmediateRendererProxy(root, loop); |
|
|
|
|
|
|
|
@ -42,9 +42,9 @@ namespace Avalonia.Skia |
|
|
|
public struct CreateInfo |
|
|
|
{ |
|
|
|
/// <summary>
|
|
|
|
/// Canvas to draw to.
|
|
|
|
/// Surface to draw to.
|
|
|
|
/// </summary>
|
|
|
|
public SKCanvas Canvas; |
|
|
|
public SKSurface Surface; |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Dpi of drawings.
|
|
|
|
@ -81,8 +81,8 @@ namespace Avalonia.Skia |
|
|
|
_grContext = createInfo.GrContext; |
|
|
|
if (_grContext != null) |
|
|
|
Monitor.Enter(_grContext); |
|
|
|
|
|
|
|
Canvas = createInfo.Canvas; |
|
|
|
Surface = createInfo.Surface; |
|
|
|
Canvas = createInfo.Surface.Canvas; |
|
|
|
|
|
|
|
if (Canvas == null) |
|
|
|
{ |
|
|
|
@ -102,8 +102,10 @@ namespace Avalonia.Skia |
|
|
|
/// Skia canvas.
|
|
|
|
/// </summary>
|
|
|
|
public SKCanvas Canvas { get; } |
|
|
|
public SKSurface Surface { get; } |
|
|
|
|
|
|
|
SKCanvas ISkiaDrawingContextImpl.SkCanvas => Canvas; |
|
|
|
SKSurface ISkiaDrawingContextImpl.SkSurface => Surface; |
|
|
|
GRContext ISkiaDrawingContextImpl.GrContext => _grContext; |
|
|
|
|
|
|
|
/// <inheritdoc />
|
|
|
|
|
|
|
|
@ -52,7 +52,7 @@ namespace Avalonia.Skia |
|
|
|
|
|
|
|
var createInfo = new DrawingContextImpl.CreateInfo |
|
|
|
{ |
|
|
|
Canvas = canvas, |
|
|
|
Surface = _framebufferSurface, |
|
|
|
Dpi = framebuffer.Dpi, |
|
|
|
VisualBrushRenderer = visualBrushRenderer, |
|
|
|
DisableTextLcdRendering = true |
|
|
|
|
|
|
|
@ -16,7 +16,7 @@ namespace Avalonia.Skia |
|
|
|
/// <summary>
|
|
|
|
/// Canvas that will be used to render.
|
|
|
|
/// </summary>
|
|
|
|
SKCanvas Canvas { get; } |
|
|
|
SKSurface SkSurface { get; } |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Scaling factor.
|
|
|
|
|
|
|
|
@ -49,7 +49,7 @@ namespace Avalonia.Skia |
|
|
|
} |
|
|
|
|
|
|
|
public GRContext GrContext { get; } |
|
|
|
public SKCanvas Canvas => _surface.Canvas; |
|
|
|
public SKSurface SkSurface => _surface; |
|
|
|
public double ScaleFactor => _glSession.Scaling; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@ -27,7 +27,7 @@ namespace Avalonia.Skia |
|
|
|
var nfo = new DrawingContextImpl.CreateInfo |
|
|
|
{ |
|
|
|
GrContext = session.GrContext, |
|
|
|
Canvas = session.Canvas, |
|
|
|
Surface = session.SkSurface, |
|
|
|
Dpi = SkiaPlatform.DefaultDpi * session.ScaleFactor, |
|
|
|
VisualBrushRenderer = visualBrushRenderer, |
|
|
|
DisableTextLcdRendering = true |
|
|
|
|
|
|
|
@ -7,5 +7,6 @@ namespace Avalonia.Skia |
|
|
|
{ |
|
|
|
SKCanvas SkCanvas { get; } |
|
|
|
GRContext GrContext { get; } |
|
|
|
SKSurface SkSurface { get; } |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
@ -70,7 +70,7 @@ namespace Avalonia.Skia |
|
|
|
|
|
|
|
var createInfo = new DrawingContextImpl.CreateInfo |
|
|
|
{ |
|
|
|
Canvas = _canvas, |
|
|
|
Surface = _surface, |
|
|
|
Dpi = Dpi, |
|
|
|
VisualBrushRenderer = visualBrushRenderer, |
|
|
|
DisableTextLcdRendering = _disableLcdRendering, |
|
|
|
|