Browse Source

wip

feature/wmt
Nikita Tsukanov 2 years ago
parent
commit
305b124646
  1. 4
      src/Browser/Avalonia.Browser/BrowserTopLevelImpl.cs
  2. 5
      src/Browser/Avalonia.Browser/Rendering/BrowserGlSurface.cs
  3. 5
      src/Browser/Avalonia.Browser/Rendering/BrowserRasterSurface.cs
  4. 13
      src/Browser/Avalonia.Browser/Rendering/BrowserSurface.cs
  5. 12
      src/Browser/Avalonia.Browser/Rendering/RenderTargetBrowserSurface.cs

4
src/Browser/Avalonia.Browser/BrowserTopLevelImpl.cs

@ -61,9 +61,7 @@ namespace Avalonia.Browser
_surface.ScalingChanged += OnScalingChanged;
Surfaces = new[] { _surface };
Compositor = _surface.IsWebGl ?
BrowserCompositor.WebGlUiCompositor :
BrowserCompositor.SoftwareUiCompositor;
Compositor = _surface.Compositor;
}
private void OnScalingChanged()

5
src/Browser/Avalonia.Browser/Rendering/BrowserGlSurface.cs

@ -3,6 +3,7 @@ using System.Runtime.InteropServices.JavaScript;
using Avalonia.Browser.Interop;
using Avalonia.Browser.Skia;
using Avalonia.Platform;
using Avalonia.Rendering.Composition;
using SkiaSharp;
namespace Avalonia.Browser.Rendering;
@ -12,8 +13,8 @@ internal sealed class BrowserGlSurface : BrowserSurface
private readonly GRGlInterface _glInterface;
public BrowserGlSurface(JSObject canvasSurface, GLInfo glInfo, PixelFormat pixelFormat,
BrowserRenderingMode renderingMode)
: base(canvasSurface, renderingMode)
Compositor compositor)
: base(canvasSurface, compositor)
{
var skiaOptions = AvaloniaLocator.Current.GetService<SkiaOptions>();
_glInterface = GRGlInterface.Create() ?? throw new InvalidOperationException("Unable to create GRGlInterface.");

5
src/Browser/Avalonia.Browser/Rendering/BrowserRasterSurface.cs

@ -5,6 +5,7 @@ using System.Runtime.InteropServices.JavaScript;
using Avalonia.Browser.Interop;
using Avalonia.Controls.Platform.Surfaces;
using Avalonia.Platform;
using Avalonia.Rendering.Composition;
namespace Avalonia.Browser.Skia;
@ -16,8 +17,8 @@ internal sealed class BrowserRasterSurface : BrowserSurface, IFramebufferPlatfor
private readonly Action _onDisposeAction;
private readonly int _bytesPerPixel;
public BrowserRasterSurface(JSObject canvasSurface, PixelFormat pixelFormat, BrowserRenderingMode renderingMode)
: base(canvasSurface, renderingMode)
public BrowserRasterSurface(JSObject canvasSurface, PixelFormat pixelFormat, Compositor compositor)
: base(canvasSurface, compositor)
{
PixelFormat = pixelFormat;
_onDisposeAction = Blit;

13
src/Browser/Avalonia.Browser/Rendering/BrowserSurface.cs

@ -9,25 +9,24 @@ using Avalonia.Browser.Rendering;
using Avalonia.Logging;
using Avalonia.Platform;
using Avalonia.Rendering;
using Avalonia.Rendering.Composition;
using Avalonia.Threading;
namespace Avalonia.Browser.Skia;
internal abstract class BrowserSurface : IDisposable
{
private readonly BrowserRenderingMode _renderingMode;
protected BrowserSurface(JSObject jsSurface, BrowserRenderingMode renderingMode)
protected BrowserSurface(JSObject jsSurface, Compositor compositor)
{
_renderingMode = renderingMode;
JsSurface = jsSurface;
Compositor = compositor;
Scaling = 1;
ClientSize = new Size(1, 1);
RenderSize = new PixelSize(1, 1);
}
public bool IsWebGl => _renderingMode is BrowserRenderingMode.WebGL1 or BrowserRenderingMode.WebGL2;
public Compositor Compositor { get; }
public JSObject JsSurface { get; private set; }
public double Scaling { get; private set; }
@ -55,8 +54,8 @@ internal abstract class BrowserSurface : IDisposable
{
var (jsSurface, jsGlInfo) = CanvasHelper.CreateSurface(container, mode);
surface = jsGlInfo != null
? new BrowserGlSurface(jsSurface, jsGlInfo, pixelFormat, mode)
: new BrowserRasterSurface(jsSurface, pixelFormat, mode);
? new BrowserGlSurface(jsSurface, jsGlInfo, pixelFormat, BrowserCompositor.WebGlUiCompositor)
: new BrowserRasterSurface(jsSurface, pixelFormat, BrowserCompositor.SoftwareUiCompositor);
break;
}
catch (Exception ex)

12
src/Browser/Avalonia.Browser/Rendering/RenderTargetBrowserSurface.cs

@ -0,0 +1,12 @@
using System.Runtime.InteropServices.JavaScript;
using Avalonia.Browser.Skia;
using Avalonia.Rendering.Composition;
namespace Avalonia.Browser.Rendering;
internal class RenderTargetBrowserSurface : BrowserSurface
{
public RenderTargetBrowserSurface(JSObject jsSurface, Compositor compositor) : base(jsSurface, compositor)
{
}
}
Loading…
Cancel
Save