Browse Source

tmp allow manual fbo to work with win ui comp.

tmp-winuicomp_with_manual_fbo
Dan Walmsley 5 years ago
parent
commit
82b39bad7b
  1. 2
      src/Skia/Avalonia.Skia/Gpu/OpenGl/FboSkiaSurface.cs
  2. 16
      src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs

2
src/Skia/Avalonia.Skia/Gpu/OpenGl/FboSkiaSurface.cs

@ -121,7 +121,7 @@ namespace Avalonia.Skia
var gl = _glContext.GlInterface;
gl.GetIntegerv(GL_READ_FRAMEBUFFER_BINDING, out var oldRead);
gl.BindFramebuffer(GL_READ_FRAMEBUFFER, _fbo);
gl.BlitFramebuffer(0, 0, _pixelSize.Width, _pixelSize.Height, 0, 0, _pixelSize.Width, _pixelSize.Height,
gl.BlitFramebuffer(0, _pixelSize.Height, _pixelSize.Width, 0, 0, 0, _pixelSize.Width, _pixelSize.Height,
GL_COLOR_BUFFER_BIT, GL_LINEAR);
gl.BindFramebuffer(GL_READ_FRAMEBUFFER, oldRead);
}

16
src/Skia/Avalonia.Skia/SurfaceRenderTarget.cs

@ -38,7 +38,7 @@ namespace Avalonia.Skia
ReadSurface = null;
}
}
/// <summary>
/// Create new surface render target.
/// </summary>
@ -93,7 +93,7 @@ namespace Avalonia.Skia
{
_canvas.RestoreToCount(-1);
_canvas.ResetMatrix();
var createInfo = new DrawingContextImpl.CreateInfo
{
Surface = _surface.Surface,
@ -136,17 +136,21 @@ namespace Avalonia.Skia
/// <inheritdoc />
public void Draw(DrawingContextImpl context, SKRect sourceRect, SKRect destRect, SKPaint paint)
{
using (var image = SnapshotImage())
if (_surface.CanBlit)
{
_surface.Surface.Canvas.Flush();
if (context.Canvas.TotalMatrix.IsIdentity && _surface.CanBlit && destRect.Top == 0 &&
destRect.Left == 0)
if (true)
_surface.Blit();
else
_surface.Surface.Draw(context.Canvas, destRect.Left, destRect.Top, paint);
}
else
using (var image = SnapshotImage())
{
context.Canvas.DrawImage(image, sourceRect, destRect, paint);
}
}
/// <summary>
/// Create Skia image snapshot from a surface.
/// </summary>

Loading…
Cancel
Save