From 634e7aae195688cce412b407e06890c3aa55218a Mon Sep 17 00:00:00 2001 From: flabbet Date: Thu, 6 Aug 2026 10:27:30 +0200 Subject: [PATCH 01/55] wip drawie 2 --- .../DrawiEngine.Browser.csproj | 2 +- .../DesktopDrawingEngine.cs | 4 +- .../DrawiEngine.Desktop.csproj | 2 +- src/DrawiEngine/DrawiEngine.csproj | 2 +- .../Drawie.AvaloniaInterop.csproj | 2 +- .../MainWindow.axaml.cs | 12 +-- .../ColorsImpl/Paintables/TexturePaintable.cs | 10 +-- .../Drawie.Backend.Core.csproj | 3 +- .../{Texture.cs => NativeTexture.cs} | 76 +++++++++---------- .../Generation/Expressions/SurfaceSampler.cs | 2 +- .../Drawie.Backend.Skia.csproj | 3 +- .../Controls/DrawieControl.cs | 4 +- .../Controls/DrawieTextureControl.cs | 40 +++++----- .../Drawie.Interop.Avalonia.Core.csproj | 2 +- .../Drawie.Interop.Avalonia.OpenGl.csproj | 2 +- .../Drawie.Interop.Avalonia.Vulkan.csproj | 4 +- .../Drawie.Interop.Avalonia.csproj | 2 +- src/Drawie.JSInterop/Drawie.JSInterop.csproj | 2 +- src/Drawie.Numerics/Drawie.Numerics.csproj | 2 +- .../Drawie.RenderApi.OpenGl.csproj | 2 +- .../OpenGlGraphicsContext.cs | 20 +++++ .../OpenGlWindowRenderApi.cs | 11 ++- .../Drawie.RenderApi.Vulkan.csproj | 2 +- .../VulkanWindowRenderApi.cs | 2 + .../Drawie.RenderApi.Web.Common.csproj | 2 +- .../Drawie.RenderApi.WebGl.csproj | 2 +- .../WebGlGraphicsContext.cs | 27 +++++++ .../WebGlWindowRenderApi.cs | 19 +++-- src/Drawie.RenderApi/Drawie.RenderApi.csproj | 2 +- src/Drawie.RenderApi/IGraphicsContext.cs | 6 ++ src/Drawie.RenderApi/IWindowRenderApi.cs | 1 + src/Drawie.Rendering/Drawie.Rendering.csproj | 13 ++++ .../Exceptions/FramebufferNotOpenException.cs | 7 ++ src/Drawie.Rendering/IGraphicsStore.cs | 39 ++++++++++ src/Drawie.Rendering/RenderingContext.cs | 38 ++++++++++ src/Drawie.Rendering/Texture.cs | 29 +++++++ src/Drawie.Rendering/TextureFramebuffer.cs | 56 ++++++++++++++ src/Drawie.Tests/Drawie.Tests.csproj | 3 +- src/Drawie.Windowing.Browser/BrowserWindow.cs | 20 ++--- .../Drawie.Windowing.Browser.csproj | 2 +- .../Drawie.Windowing.Glfw.csproj | 8 +- src/Drawie.Windowing.Glfw/GlfwWindow.cs | 23 +++--- src/Drawie.Windowing/Drawie.Windowing.csproj | 3 +- src/Drawie.Windowing/IWindow.cs | 3 +- src/Drawie.sln | 28 +++++-- src/Drawie.sln.DotSettings.user | 14 ++-- src/Drawie2Sample/Drawie2Sample.csproj | 14 ++++ src/Drawie2Sample/Drawie2SampleApp.cs | 28 +++++++ .../DrawieSample.Browser.csproj | 4 +- src/DrawieSample.Browser/Program.cs | 4 +- src/DrawieSample.Browser/wwwroot/main.js | 4 +- .../wwwroot/scripts/drawie.js | 19 +++-- .../DrawieSample.Desktop.csproj | 4 +- src/DrawieSample.Desktop/Program.cs | 8 +- src/DrawieSample/DrawieSample.csproj | 2 +- src/DrawieSample/DrawieSampleApp.cs | 38 +++++----- 56 files changed, 495 insertions(+), 188 deletions(-) rename src/Drawie.Backend.Core/{Texture.cs => NativeTexture.cs} (82%) create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs create mode 100644 src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs create mode 100644 src/Drawie.RenderApi/IGraphicsContext.cs create mode 100644 src/Drawie.Rendering/Drawie.Rendering.csproj create mode 100644 src/Drawie.Rendering/Exceptions/FramebufferNotOpenException.cs create mode 100644 src/Drawie.Rendering/IGraphicsStore.cs create mode 100644 src/Drawie.Rendering/RenderingContext.cs create mode 100644 src/Drawie.Rendering/Texture.cs create mode 100644 src/Drawie.Rendering/TextureFramebuffer.cs create mode 100644 src/Drawie2Sample/Drawie2Sample.csproj create mode 100644 src/Drawie2Sample/Drawie2SampleApp.cs diff --git a/src/DrawiEngine.Browser/DrawiEngine.Browser.csproj b/src/DrawiEngine.Browser/DrawiEngine.Browser.csproj index ce76d37..924ea43 100644 --- a/src/DrawiEngine.Browser/DrawiEngine.Browser.csproj +++ b/src/DrawiEngine.Browser/DrawiEngine.Browser.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs b/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs index 58fed86..2c855b0 100644 --- a/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs +++ b/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs @@ -8,9 +8,9 @@ namespace DrawiEngine.Desktop; public static class DesktopDrawingEngine { - public static DrawingEngine CreateDefaultDesktop() + public static DrawingEngine CreateDefaultDesktop(bool preferVulkan = true) { - IRenderApi renderApi = new VulkanRenderApi(); + IRenderApi renderApi = preferVulkan ? new VulkanRenderApi() : new OpenGlRenderApi(); if (OperatingSystem.IsMacOS()) { diff --git a/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj b/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj index 9bd2407..0bc3df7 100644 --- a/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj +++ b/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/DrawiEngine/DrawiEngine.csproj b/src/DrawiEngine/DrawiEngine.csproj index b131288..d7395b9 100644 --- a/src/DrawiEngine/DrawiEngine.csproj +++ b/src/DrawiEngine/DrawiEngine.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.AvaloniaInterop/Drawie.AvaloniaInterop.csproj b/src/Drawie.AvaloniaInterop/Drawie.AvaloniaInterop.csproj index 3baba41..aa6a770 100644 --- a/src/Drawie.AvaloniaInterop/Drawie.AvaloniaInterop.csproj +++ b/src/Drawie.AvaloniaInterop/Drawie.AvaloniaInterop.csproj @@ -1,7 +1,7 @@  WinExe - net8.0 + net10.0 enable true app.manifest diff --git a/src/Drawie.AvaloniaInterop/MainWindow.axaml.cs b/src/Drawie.AvaloniaInterop/MainWindow.axaml.cs index 2a987e8..08e2423 100644 --- a/src/Drawie.AvaloniaInterop/MainWindow.axaml.cs +++ b/src/Drawie.AvaloniaInterop/MainWindow.axaml.cs @@ -23,15 +23,15 @@ public MainWindow() protected override void OnLoaded(RoutedEventArgs e) { - Texture texture = new Texture(new VecI(128, 128)); + NativeTexture nativeTexture = new NativeTexture(new VecI(128, 128)); using Paint paint = new Paint(); paint.Color = Colors.Red; - texture.DrawingSurface.Canvas.DrawRect(0, 0, 128, 128, paint); + nativeTexture.DrawingSurface.Canvas.DrawRect(0, 0, 128, 128, paint); paint.Color = Colors.Blue; - texture.DrawingSurface.Canvas.DrawCircle(64, 64, 64, paint); + nativeTexture.DrawingSurface.Canvas.DrawCircle(64, 64, 64, paint); - DrawieControl.Texture = texture; + DrawieControl.NativeTexture = nativeTexture; base.OnLoaded(e); } @@ -45,7 +45,7 @@ public override void Render(DrawingContext context) byte green = (byte)(Math.Sin(time / 1000.0 + 2) * 127 + 128); byte blue = (byte)(Math.Sin(time / 1000.0 + 4) * 127 + 128); - DrawieControl.Texture?.DrawingSurface.Canvas.DrawRect(0, 0, 128, 128, new Paint() + DrawieControl.NativeTexture?.DrawingSurface.Canvas.DrawRect(0, 0, 128, 128, new Paint() { Color = new Color(red, green, blue, 255), Style = PaintStyle.StrokeAndFill @@ -53,7 +53,7 @@ public override void Render(DrawingContext context) // test transparency - DrawieControl.Texture?.DrawingSurface.Canvas.DrawCircle(64, 64, 64, new Paint() + DrawieControl.NativeTexture?.DrawingSurface.Canvas.DrawCircle(64, 64, 64, new Paint() { Color = new Color(255, 255, 255, 128), Style = PaintStyle.Fill diff --git a/src/Drawie.Backend.Core/ColorsImpl/Paintables/TexturePaintable.cs b/src/Drawie.Backend.Core/ColorsImpl/Paintables/TexturePaintable.cs index 20cf17d..9cdc347 100644 --- a/src/Drawie.Backend.Core/ColorsImpl/Paintables/TexturePaintable.cs +++ b/src/Drawie.Backend.Core/ColorsImpl/Paintables/TexturePaintable.cs @@ -9,23 +9,23 @@ namespace Drawie.Backend.Core.ColorsImpl.Paintables; public class TexturePaintable : Paintable { - public Texture Image { get; private set; } + public NativeTexture Image { get; private set; } public override bool AnythingVisible => Image is { Size: {X: > 0, Y: > 0 }}; public SamplingOptions SamplingOptions { get; set; } = SamplingOptions.Bilinear; public override RectD LocalBounds => new RectD(0, 0, Image.Size.X, Image.Size.Y); - private Image lastSnapshot; + private Image? lastSnapshot; private bool disposeAfterUse; - public TexturePaintable(Texture image) + public TexturePaintable(NativeTexture image) { Image = image; Image.LockDispose(this); } - public TexturePaintable(Texture image, bool disposeAfterUse) + public TexturePaintable(NativeTexture image, bool disposeAfterUse) { Image = image; Image.LockDispose(this); @@ -74,7 +74,7 @@ public override void DisposeShaderElements() public override void ApplyOpacity(double opacity) { - Texture surf = new Texture(Image.Size); + NativeTexture surf = new NativeTexture(Image.Size); using Paint paint = new Paint { Color = Colors.White.WithAlpha((byte)(opacity * 255)), diff --git a/src/Drawie.Backend.Core/Drawie.Backend.Core.csproj b/src/Drawie.Backend.Core/Drawie.Backend.Core.csproj index be3b2d5..a0f8478 100644 --- a/src/Drawie.Backend.Core/Drawie.Backend.Core.csproj +++ b/src/Drawie.Backend.Core/Drawie.Backend.Core.csproj @@ -1,10 +1,11 @@  - net8.0 + net10.0 enable enable true + diff --git a/src/Drawie.Backend.Core/Texture.cs b/src/Drawie.Backend.Core/NativeTexture.cs similarity index 82% rename from src/Drawie.Backend.Core/Texture.cs rename to src/Drawie.Backend.Core/NativeTexture.cs index 7ed123f..d9b5a8e 100644 --- a/src/Drawie.Backend.Core/Texture.cs +++ b/src/Drawie.Backend.Core/NativeTexture.cs @@ -8,7 +8,7 @@ namespace Drawie.Backend.Core; -public class Texture : IDisposable, ICloneable, IPixelsMap +public class NativeTexture : IDisposable, ICloneable, IPixelsMap { public VecI Size { get; } public DrawingSurface DrawingSurface { get; private set; } @@ -34,7 +34,7 @@ public class Texture : IDisposable, ICloneable, IPixelsMap private Paint nearestNeighborReplacingPaint = new() { BlendMode = BlendMode.Src, FilterQuality = FilterQuality.None }; - public Texture(VecI size) + public NativeTexture(VecI size) : this(new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, ColorSpace.CreateSrgb()) { GpuBacked = true @@ -47,31 +47,31 @@ private void OnChanged(RectD? changedRect) cpuSynced = false; } - public static Texture ForDisplay(VecI size) + public static NativeTexture ForDisplay(VecI size) { - return new Texture( + return new NativeTexture( new ImageInfo(size.X, size.Y, ColorType.Rgba8888, AlphaType.Premul, ColorSpace.CreateSrgb()) { GpuBacked = true }); } - public static Texture ForProcessing(VecI size) + public static NativeTexture ForProcessing(VecI size) { - return new Texture( + return new NativeTexture( new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, ColorSpace.CreateSrgbLinear()) { GpuBacked = true }); } - public static Texture ForProcessing(VecI size, ColorSpace colorSpace) + public static NativeTexture ForProcessing(VecI size, ColorSpace colorSpace) { - return new Texture( + return new NativeTexture( new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, colorSpace) { GpuBacked = true }); } - public static Texture? ForProcessing(DrawingSurface copySizeAndMatrixFrom, ColorSpace colorSpace) + public static NativeTexture? ForProcessing(DrawingSurface copySizeAndMatrixFrom, ColorSpace colorSpace) { VecI size = new VecI( copySizeAndMatrixFrom.DeviceClipBounds.Size.X + copySizeAndMatrixFrom.DeviceClipBounds.Pos.X, @@ -79,7 +79,7 @@ public static Texture ForProcessing(VecI size, ColorSpace colorSpace) if (size.X <= 0 || size.Y <= 0) return null; - Texture tex = new Texture( + NativeTexture tex = new NativeTexture( new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, colorSpace) { GpuBacked = true }); tex.DrawingSurface.Canvas.SetMatrix(copySizeAndMatrixFrom.Canvas.TotalMatrix); @@ -87,9 +87,9 @@ public static Texture ForProcessing(VecI size, ColorSpace colorSpace) return tex; } - public static Texture ForProcessing(Canvas copySizeAndMatrixFrom, ColorSpace colorSpace) + public static NativeTexture ForProcessing(Canvas copySizeAndMatrixFrom, ColorSpace colorSpace) { - Texture tex = new Texture( + NativeTexture tex = new NativeTexture( new ImageInfo( copySizeAndMatrixFrom.DeviceClipBounds.Size.X + copySizeAndMatrixFrom.DeviceClipBounds.Pos.X, copySizeAndMatrixFrom.DeviceClipBounds.Size.Y + copySizeAndMatrixFrom.DeviceClipBounds.Pos.Y, @@ -99,7 +99,7 @@ public static Texture ForProcessing(Canvas copySizeAndMatrixFrom, ColorSpace col return tex; } - public Texture(ImageInfo imageImageInfo) + public NativeTexture(ImageInfo imageImageInfo) { Size = new VecI(imageImageInfo.Width, imageImageInfo.Height); if (!imageImageInfo.GpuBacked) @@ -128,13 +128,13 @@ public Texture(ImageInfo imageImageInfo) Changed += OnChanged; } - public Texture(Texture other) : this(other.Size) + public NativeTexture(NativeTexture other) : this(other.Size) { using var ctx = EnsureContext(); DrawingSurface.Canvas.DrawSurface(other.DrawingSurface, 0, 0); } - internal Texture(DrawingSurface drawingSurface) + internal NativeTexture(DrawingSurface drawingSurface) { DrawingSurface = drawingSurface; Size = drawingSurface.DeviceClipBounds.Size; @@ -143,7 +143,7 @@ internal Texture(DrawingSurface drawingSurface) public object Clone() { - return new Texture(this); + return new NativeTexture(this); } private void DrawingSurfaceOnChanged(RectD? changedRect) @@ -152,7 +152,7 @@ private void DrawingSurfaceOnChanged(RectD? changedRect) } - public static Texture Load(string path) + public static NativeTexture Load(string path) { using var ctx = EnsureContext(); if (!File.Exists(path)) @@ -161,13 +161,13 @@ public static Texture Load(string path) if (image is null) throw new ArgumentException($"The image with path {path} couldn't be loaded"); - Texture texture = new Texture(image.Size); - texture.DrawingSurface.Canvas.DrawImage(image, 0, 0); + NativeTexture nativeTexture = new NativeTexture(image.Size); + nativeTexture.DrawingSurface.Canvas.DrawImage(image, 0, 0); - return texture; + return nativeTexture; } - public static Texture Load(byte[] data) + public static NativeTexture Load(byte[] data) { using var ctx = EnsureContext(); using Image image = Image.FromEncodedData(data); @@ -175,30 +175,30 @@ public static Texture Load(byte[] data) if (image is null || image.Size.ShortestAxis <= 0) throw new ArgumentException("The image couldn't be loaded"); - Texture texture = new Texture(image.Size); - texture.DrawingSurface.Canvas.DrawImage(image, 0, 0); + NativeTexture nativeTexture = new NativeTexture(image.Size); + nativeTexture.DrawingSurface.Canvas.DrawImage(image, 0, 0); - return texture; + return nativeTexture; } - public static Texture? Load(byte[] encoded, ColorType colorType, VecI imageSize) + public static NativeTexture? Load(byte[] encoded, ColorType colorType, VecI imageSize) { using var ctx = EnsureContext(); using var image = Image.FromPixels(new ImageInfo(imageSize.X, imageSize.Y, colorType), encoded); if (image is null) return null; - var surface = new Texture(new VecI(image.Width, image.Height)); + var surface = new NativeTexture(new VecI(image.Width, image.Height)); surface.DrawingSurface.Canvas.DrawImage(image, 0, 0); return surface; } - public Texture CreateResized(VecI newSize, ResizeMethod method) + public NativeTexture CreateResized(VecI newSize, ResizeMethod method) { using var ctx = EnsureContext(); using Image image = DrawingSurface.Snapshot(); - Texture newTexture = new(newSize); + NativeTexture newNativeTexture = new(newSize); using Paint paint = new(); FilterQuality filterQuality = method switch @@ -211,12 +211,12 @@ public Texture CreateResized(VecI newSize, ResizeMethod method) paint.FilterQuality = filterQuality; - newTexture.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); + newNativeTexture.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); - return newTexture; + return newNativeTexture; } - public void CopyTo(Texture destination) + public void CopyTo(NativeTexture destination) { destination.DrawingSurface.Canvas.DrawSurface(DrawingSurface, 0, 0); } @@ -231,22 +231,22 @@ public void DrawBytes(VecI surfaceSize, byte[] pixels, ColorType color, AlphaTyp DrawingSurface.Canvas.DrawImage(image, 0, 0); } - public Texture ResizeNearestNeighbor(VecI newSize) + public NativeTexture ResizeNearestNeighbor(VecI newSize) { using Image image = DrawingSurface.Snapshot(); - Texture newSurface = new(newSize); + NativeTexture newSurface = new(newSize); newSurface.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), nearestNeighborReplacingPaint); return newSurface; } - public Texture Resize(VecI newSize, FilterQuality quality) + public NativeTexture Resize(VecI newSize, FilterQuality quality) { using var ctx = EnsureContext(); using Image image = DrawingSurface.Snapshot(); using Paint paint = new(); paint.FilterQuality = quality; - Texture newSurface = new(newSize); + NativeTexture newSurface = new(newSize); newSurface.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); return newSurface; @@ -357,10 +357,10 @@ public void Dispose() nearestNeighborReplacingPaint.Dispose(); } - public static Texture FromExisting(DrawingSurface drawingSurface) + public static NativeTexture FromExisting(DrawingSurface drawingSurface) { - Texture texture = new(drawingSurface); - return texture; + NativeTexture nativeTexture = new(drawingSurface); + return nativeTexture; } private static IDisposable EnsureContext() diff --git a/src/Drawie.Backend.Core/Shaders/Generation/Expressions/SurfaceSampler.cs b/src/Drawie.Backend.Core/Shaders/Generation/Expressions/SurfaceSampler.cs index ea716e5..936fe69 100644 --- a/src/Drawie.Backend.Core/Shaders/Generation/Expressions/SurfaceSampler.cs +++ b/src/Drawie.Backend.Core/Shaders/Generation/Expressions/SurfaceSampler.cs @@ -1,6 +1,6 @@ namespace Drawie.Backend.Core.Shaders.Generation.Expressions; -public class SurfaceSampler : ShaderExpressionVariable +public class SurfaceSampler : ShaderExpressionVariable { public SurfaceSampler(string name, ColorSampleMode sampleMode) : base(name) { diff --git a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj index 113bada..68385a8 100644 --- a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj +++ b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable Drawie.Skia @@ -29,6 +29,7 @@ + diff --git a/src/Drawie.Interop.Avalonia.Core/Controls/DrawieControl.cs b/src/Drawie.Interop.Avalonia.Core/Controls/DrawieControl.cs index a85dbd3..bcde480 100644 --- a/src/Drawie.Interop.Avalonia.Core/Controls/DrawieControl.cs +++ b/src/Drawie.Interop.Avalonia.Core/Controls/DrawieControl.cs @@ -12,7 +12,7 @@ public abstract class DrawieControl : InteropControl { private RenderApiResources resources; private DrawingSurface? framebuffer; - private Texture intermediateSurface; + private NativeTexture intermediateSurface; private PixelSize lastSize = PixelSize.Empty; @@ -87,7 +87,7 @@ protected override void RenderFrame(PixelSize size) if (UseIntermediateSurface) { intermediateSurface?.Dispose(); - intermediateSurface = Texture.ForDisplay(sizeVec); + intermediateSurface = NativeTexture.ForDisplay(sizeVec); } lastSize = size; diff --git a/src/Drawie.Interop.Avalonia.Core/Controls/DrawieTextureControl.cs b/src/Drawie.Interop.Avalonia.Core/Controls/DrawieTextureControl.cs index be45a7a..fbd9bfc 100644 --- a/src/Drawie.Interop.Avalonia.Core/Controls/DrawieTextureControl.cs +++ b/src/Drawie.Interop.Avalonia.Core/Controls/DrawieTextureControl.cs @@ -28,9 +28,9 @@ public Stretch Stretch set => SetValue(StretchProperty, value); } - public static readonly StyledProperty TextureProperty = - AvaloniaProperty.Register( - nameof(Texture)); + public static readonly StyledProperty TextureProperty = + AvaloniaProperty.Register( + nameof(NativeTexture)); public static readonly StyledProperty SamplingOptionsProperty = AvaloniaProperty.Register( @@ -42,7 +42,7 @@ public SampleQuality SamplingOptions set => SetValue(SamplingOptionsProperty, value); } - public Texture Texture + public NativeTexture NativeTexture { get => GetValue(TextureProperty); set => SetValue(TextureProperty, value); @@ -54,10 +54,10 @@ static DrawieTextureControl() TextureProperty.Changed.AddClassHandler((x,e) => { x.QueueNextFrame(); - if (e.OldValue is Texture oldTexture && x.RepaintOnChanged) - oldTexture.Changed -= x.Texture_Changed; - if (e.NewValue is Texture newTexture && x.RepaintOnChanged) - newTexture.Changed += x.Texture_Changed; + if (e.OldValue is NativeTexture oldTexture && x.RepaintOnChanged) + oldTexture.Changed -= x.NativeTextureChanged; + if (e.NewValue is NativeTexture newTexture && x.RepaintOnChanged) + newTexture.Changed += x.NativeTextureChanged; }); SamplingOptionsProperty.Changed.AddClassHandler((x,e) => x.QueueNextFrame()); StretchProperty.Changed.AddClassHandler((x,e) => x.QueueNextFrame()); @@ -66,13 +66,13 @@ static DrawieTextureControl() if (e.NewValue is true) { x.QueueNextFrame(); - if(x.Texture != null) - x.Texture.Changed += x.Texture_Changed; + if(x.NativeTexture != null) + x.NativeTexture.Changed += x.NativeTextureChanged; } else { - if(x.Texture != null) - x.Texture.Changed -= x.Texture_Changed; + if(x.NativeTexture != null) + x.NativeTexture.Changed -= x.NativeTextureChanged; } }); } @@ -84,7 +84,7 @@ static DrawieTextureControl() /// The desired size of the control. protected override Size MeasureOverride(Size availableSize) { - var source = Texture; + var source = NativeTexture; var result = new Size(); if (source != null) @@ -102,7 +102,7 @@ protected override Size MeasureOverride(Size availableSize) /// protected override Size ArrangeOverride(Size finalSize) { - var source = Texture; + var source = NativeTexture; if (source != null) { @@ -118,14 +118,14 @@ protected override Size ArrangeOverride(Size finalSize) return new Size(); } - private void Texture_Changed(RectD? changedRect) + private void NativeTextureChanged(RectD? changedRect) { QueueNextFrame(); } public override void Draw(DrawingSurface surface) { - if (Texture == null || Texture.IsDisposed) + if (NativeTexture == null || NativeTexture.IsDisposed) { return; } @@ -136,11 +136,11 @@ public override void Draw(DrawingSurface surface) ScaleCanvas(surface.Canvas); if (SamplingOptions == SampleQuality.Nearest) { - surface.Canvas.DrawSurface(Texture.DrawingSurface, 0, 0); + surface.Canvas.DrawSurface(NativeTexture.DrawingSurface, 0, 0); } else { - using var snapshot = Texture.DrawingSurface.Snapshot(); + using var snapshot = NativeTexture.DrawingSurface.Snapshot(); surface.Canvas.DrawImage(snapshot, 0, 0, Backend.Core.Surfaces.SamplingOptions.Bilinear); } @@ -149,8 +149,8 @@ public override void Draw(DrawingSurface surface) private void ScaleCanvas(Canvas canvas) { - float x = (float)Texture.Size.X; - float y = (float)Texture.Size.Y; + float x = (float)NativeTexture.Size.X; + float y = (float)NativeTexture.Size.Y; if (Stretch == Stretch.Fill) { diff --git a/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj b/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj index ae66f4e..cf9bae4 100644 --- a/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj +++ b/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable Drawie.Interop.Avalonia.Core diff --git a/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj b/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj index 358fb47..2e64d8d 100644 --- a/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj +++ b/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj index b9367bc..7d45859 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj +++ b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true @@ -18,7 +18,7 @@ - ..\Drawie.AvaloniaInterop\bin\Debug\net8.0\Avalonia.Vulkan.dll + ..\Drawie.AvaloniaInterop\bin\Debug\net10.0\Avalonia.Vulkan.dll diff --git a/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj b/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj index 043e4d4..22e872e 100644 --- a/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj +++ b/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.JSInterop/Drawie.JSInterop.csproj b/src/Drawie.JSInterop/Drawie.JSInterop.csproj index 6feafeb..94cb7dc 100644 --- a/src/Drawie.JSInterop/Drawie.JSInterop.csproj +++ b/src/Drawie.JSInterop/Drawie.JSInterop.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.Numerics/Drawie.Numerics.csproj b/src/Drawie.Numerics/Drawie.Numerics.csproj index 4a24632..2c5fb06 100644 --- a/src/Drawie.Numerics/Drawie.Numerics.csproj +++ b/src/Drawie.Numerics/Drawie.Numerics.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj b/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj index 8f1eca8..6013806 100644 --- a/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj +++ b/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs new file mode 100644 index 0000000..4c09b86 --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs @@ -0,0 +1,20 @@ +using Silk.NET.Core.Contexts; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; + +public class OpenGlGraphicsContext(GL Api, IGLContext GlContext) : IGraphicsContext +{ + private HashSet ownedTextures = new HashSet(); + + public bool OwnsTexture(ITexture nativeTexture) + { + return nativeTexture is OpenGlTexture glTexture && ownedTextures.Contains(glTexture.TextureId); + } + + public OpenGlTexture CreateTexture(uint id) + { + ownedTextures.Add(id); + return new OpenGlTexture(id, Api); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs b/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs index c13cc9a..d109087 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs @@ -1,6 +1,4 @@ -using System.Drawing; -using Drawie.Numerics; -using Drawie.RenderApi.OpenGL.Exceptions; +using Drawie.Numerics; using Silk.NET.Core.Contexts; using Silk.NET.OpenGL; @@ -17,6 +15,8 @@ public class OpenGlWindowRenderApi : IOpenGlWindowRenderApi private OpenGlTexture texture; + public IGraphicsContext GraphicsContext { get; private set; } + public unsafe void CreateInstance(object contextObject, VecI framebufferSize) { if (contextObject is not IGLContext glContext) @@ -24,12 +24,15 @@ public unsafe void CreateInstance(object contextObject, VecI framebufferSize) Context = glContext; Api = GL.GetApi(glContext); - texture = new OpenGlTexture(0, Api); // default framebuffer texture + var graphicsContext = new OpenGlGraphicsContext(Api, glContext); + texture = graphicsContext.CreateTexture(0); // default framebuffer texture + GraphicsContext = graphicsContext; } public void DestroyInstance() { Api = null; + GraphicsContext = null; } public void UpdateFramebufferSize(int width, int height) diff --git a/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj b/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj index 3e989ea..4f5b5f0 100644 --- a/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj +++ b/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs index a9b431b..55ac9e0 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs @@ -75,6 +75,8 @@ public void PrepareTextureToWrite() texture.TransitionLayoutTo(VulkanTexture.ShaderReadOnlyOptimal, VulkanTexture.ColorAttachmentOptimal); } + public IGraphicsContext GraphicsContext { get; } + public void CreateInstance(object contextObject, VecI framebufferSize) { if (contextObject is not IVulkanContextInfo vkContext) throw new VulkanNotSupportedException(); diff --git a/src/Drawie.RenderApi.Web.Common/Drawie.RenderApi.Web.Common.csproj b/src/Drawie.RenderApi.Web.Common/Drawie.RenderApi.Web.Common.csproj index e43df41..5990a50 100644 --- a/src/Drawie.RenderApi.Web.Common/Drawie.RenderApi.Web.Common.csproj +++ b/src/Drawie.RenderApi.Web.Common/Drawie.RenderApi.Web.Common.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.RenderApi.WebGl/Drawie.RenderApi.WebGl.csproj b/src/Drawie.RenderApi.WebGl/Drawie.RenderApi.WebGl.csproj index 96fb79b..cceed28 100644 --- a/src/Drawie.RenderApi.WebGl/Drawie.RenderApi.WebGl.csproj +++ b/src/Drawie.RenderApi.WebGl/Drawie.RenderApi.WebGl.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs b/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs new file mode 100644 index 0000000..3ea6175 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs @@ -0,0 +1,27 @@ +using Drawie.JSInterop; +using Drawie.RenderApi.WebGl.Enums; + +namespace Drawie.RenderApi.WebGl; + +public class WebGlGraphicsContext(int Gl) : IGraphicsContext +{ + private HashSet ownedTextures = new HashSet(); + + public bool OwnsTexture(ITexture nativeTexture) + { + return nativeTexture is WebGlTexture wglTexture && ownedTextures.Contains(wglTexture.TextureId); + } + + public WebGlTexture CreateTexture(int handle, int width, int height) + { + var texture = new WebGlTexture(Gl, JSRuntime.CreateTexture(handle)); + JSRuntime.BindTexture(handle, (int)WebGlTextureType.Texture2D, texture.TextureId); + JSRuntime.TexImage2D(handle, (int)WebGlTextureType.Texture2D, 0, (int)WebGlTextureFormat.Rgba, width, height, 0, (int)WebGlTextureFormat.Rgba, (int)WebGlArrayType.UnsignedByte, 0); + JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureMinFilter, (int)WebGlTextureFilter.Nearest); + JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureMagFilter, (int)WebGlTextureFilter.Nearest); + JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureWrapS, (int)WebGlTextureWrap.ClampToEdge); + JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureWrapT, (int)WebGlTextureWrap.ClampToEdge); + ownedTextures.Add(texture.TextureId); + return texture; + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs b/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs index ad219cd..88d328f 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs @@ -49,6 +49,9 @@ void main(void) { private int texCoordAttrib; private int uSamplerUniform; + public IGraphicsContext GraphicsContext => webglGraphicsContext; + private WebGlGraphicsContext webglGraphicsContext; + public void CreateInstance(object contextObject, VecI framebufferSize) { JSRuntime.InterceptGLObject(); @@ -58,6 +61,7 @@ public void CreateInstance(object contextObject, VecI framebufferSize) canvasObject.SetAttribute("height", framebufferSize.Y.ToString()); gl = JSRuntime.OpenSkiaContext(canvasObject.Id); + webglGraphicsContext = new WebGlGraphicsContext(gl); JSRuntime.MakeContextCurrent(gl); @@ -67,12 +71,13 @@ public void CreateInstance(object contextObject, VecI framebufferSize) program = InitProgram(gl, vertexShader, fragmentShader); posBuffer = InitBuffers(gl); - CreateTexture(gl, framebufferSize.X, framebufferSize.Y); + texture = CreateTexture(gl, framebufferSize.X, framebufferSize.Y); InitTextureBuffer(gl); vertexPosAttrib = JSRuntime.GetAttribLocation(gl, program, "position"); texCoordAttrib = JSRuntime.GetAttribLocation(gl, program, "aTextureCoord"); uSamplerUniform = JSRuntime.GetUniformLocation(gl, program, "uSampler"); + } public void DestroyInstance() @@ -84,7 +89,7 @@ public void UpdateFramebufferSize(int width, int height) canvasObject.SetAttribute("width", width.ToString()); canvasObject.SetAttribute("height", height.ToString()); DisposeTexture(); - CreateTexture(gl, width, height); + texture = CreateTexture(gl, width, height); FramebufferResized?.Invoke(); } @@ -153,15 +158,9 @@ private int InitBuffers(int handle) return positionBuffer; } - private void CreateTexture(int handle, int width, int height) + private WebGlTexture CreateTexture(int handle, int width, int height) { - texture = new WebGlTexture(gl, JSRuntime.CreateTexture(handle)); - JSRuntime.BindTexture(handle, (int)WebGlTextureType.Texture2D, texture.TextureId); - JSRuntime.TexImage2D(handle, (int)WebGlTextureType.Texture2D, 0, (int)WebGlTextureFormat.Rgba, width, height, 0, (int)WebGlTextureFormat.Rgba, (int)WebGlArrayType.UnsignedByte, 0); - JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureMinFilter, (int)WebGlTextureFilter.Nearest); - JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureMagFilter, (int)WebGlTextureFilter.Nearest); - JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureWrapS, (int)WebGlTextureWrap.ClampToEdge); - JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureWrapT, (int)WebGlTextureWrap.ClampToEdge); + return webglGraphicsContext.CreateTexture(handle, width, height); } private void DisposeTexture() diff --git a/src/Drawie.RenderApi/Drawie.RenderApi.csproj b/src/Drawie.RenderApi/Drawie.RenderApi.csproj index fffbb83..12925a6 100644 --- a/src/Drawie.RenderApi/Drawie.RenderApi.csproj +++ b/src/Drawie.RenderApi/Drawie.RenderApi.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.RenderApi/IGraphicsContext.cs b/src/Drawie.RenderApi/IGraphicsContext.cs new file mode 100644 index 0000000..d5b846e --- /dev/null +++ b/src/Drawie.RenderApi/IGraphicsContext.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi; + +public interface IGraphicsContext +{ + public bool OwnsTexture(ITexture nativeTexture); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/IWindowRenderApi.cs b/src/Drawie.RenderApi/IWindowRenderApi.cs index baf7858..f0c32cf 100644 --- a/src/Drawie.RenderApi/IWindowRenderApi.cs +++ b/src/Drawie.RenderApi/IWindowRenderApi.cs @@ -4,6 +4,7 @@ namespace Drawie.RenderApi; public interface IWindowRenderApi { + public IGraphicsContext GraphicsContext { get; } public void CreateInstance(object contextObject, VecI framebufferSize); public void DestroyInstance(); diff --git a/src/Drawie.Rendering/Drawie.Rendering.csproj b/src/Drawie.Rendering/Drawie.Rendering.csproj new file mode 100644 index 0000000..926e672 --- /dev/null +++ b/src/Drawie.Rendering/Drawie.Rendering.csproj @@ -0,0 +1,13 @@ + + + + net10.0 + enable + enable + + + + + + + diff --git a/src/Drawie.Rendering/Exceptions/FramebufferNotOpenException.cs b/src/Drawie.Rendering/Exceptions/FramebufferNotOpenException.cs new file mode 100644 index 0000000..825329b --- /dev/null +++ b/src/Drawie.Rendering/Exceptions/FramebufferNotOpenException.cs @@ -0,0 +1,7 @@ +namespace Drawie.Rendering.Exceptions; + +public class FramebufferNotOpenException : Exception +{ + public FramebufferNotOpenException(string message) : base(message) + {} +} \ No newline at end of file diff --git a/src/Drawie.Rendering/IGraphicsStore.cs b/src/Drawie.Rendering/IGraphicsStore.cs new file mode 100644 index 0000000..0a4b41a --- /dev/null +++ b/src/Drawie.Rendering/IGraphicsStore.cs @@ -0,0 +1,39 @@ +using Drawie.Backend.Core; +using Drawie.Backend.Core.Bridge; +using Drawie.Numerics; +using Drawie.RenderApi; + +namespace Drawie.Rendering; + +/// +/// Represents a structure holding and managing native textures and objects +/// +public class GraphicsStore : IDisposable +{ + public IGraphicsContext GraphicsContext { get; set; } + private List textures = new List(); + + public GraphicsStore(IGraphicsContext graphicsContext) + { + GraphicsContext = graphicsContext; + } + + public Texture CreateNativeRenderSurface(VecI size, ITexture nativeTexture, SurfaceOrigin origin) + { + if (!GraphicsContext.OwnsTexture(nativeTexture)) + { + throw new ArgumentException("The given native texture is not owned by this graphics store."); + } + + textures.Add(new Texture(NativeTexture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, nativeTexture, origin)))); + return textures[^1]; + } + + public void Dispose() + { + foreach (var texture in textures) + { + texture.NativeTexture.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/Drawie.Rendering/RenderingContext.cs b/src/Drawie.Rendering/RenderingContext.cs new file mode 100644 index 0000000..3cdd77b --- /dev/null +++ b/src/Drawie.Rendering/RenderingContext.cs @@ -0,0 +1,38 @@ +namespace Drawie.Rendering; + +/// +/// Represents a context for rendering operations, allowing modifications to textures and other graphics resources. +/// +public class RenderingContext : IDisposable +{ + public bool IsOpen { get; private set; } = false; + private List ownedFramebuffers = new List(); + + public TextureFramebuffer Edit(Texture texture) + { + if (!IsOpen) throw new InvalidOperationException("Rendering Context is not open."); + var fbo = new TextureFramebuffer(texture); + fbo.Open(); + ownedFramebuffers.Add(fbo); + return ownedFramebuffers[^1]; + } + + public IDisposable Open() + { + if (IsOpen) throw new InvalidOperationException("Rendering Context is already open."); + IsOpen = true; + return this; + } + + public void Dispose() + { + foreach (var textureFramebuffer in ownedFramebuffers) + { + if (textureFramebuffer.IsOpen) throw new InvalidOperationException("Framebuffer is in use"); + textureFramebuffer.Dispose(); + } + + IsOpen = false; + ownedFramebuffers.Clear(); + } +} \ No newline at end of file diff --git a/src/Drawie.Rendering/Texture.cs b/src/Drawie.Rendering/Texture.cs new file mode 100644 index 0000000..e2aaa3d --- /dev/null +++ b/src/Drawie.Rendering/Texture.cs @@ -0,0 +1,29 @@ +using Drawie.Backend.Core; + +namespace Drawie.Rendering; + +/// +/// Readonly texture, can be modified with a Rendering Context +/// +public class Texture +{ + internal NativeTexture NativeTexture { get; } + public TextureState State { get; internal set; } = TextureState.Submitted; + public int Width { get; } + public int Height { get; } + + internal Texture(NativeTexture native) + { + NativeTexture = native; + Width = native.Size.X; + Height = native.Size.Y; + } +} + +public enum TextureState +{ + Editing, + WaitingForSubmit, + Submitting, + Submitted, +} \ No newline at end of file diff --git a/src/Drawie.Rendering/TextureFramebuffer.cs b/src/Drawie.Rendering/TextureFramebuffer.cs new file mode 100644 index 0000000..1f009fc --- /dev/null +++ b/src/Drawie.Rendering/TextureFramebuffer.cs @@ -0,0 +1,56 @@ +using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Backend.Core.Surfaces.PaintImpl; +using Drawie.Numerics; +using Drawie.Rendering.Exceptions; + +namespace Drawie.Rendering; + +public class TextureFramebuffer : IDisposable +{ + internal Texture UnderlyingTexture { get; } + public bool IsOpen { get; private set; } + public VecI Size { get; } + + internal TextureFramebuffer(Texture texture) + { + UnderlyingTexture = texture; + Size = new VecI(texture.Width, texture.Height); + } + + internal IDisposable Open() + { + IsOpen = true; + return this; + } + + public void Clear() + { + ThrowIfNotOpen(); + UnderlyingTexture.NativeTexture.DrawingSurface.Canvas.Clear(); + } + + public void DrawRectangle(float x, float y, float width, float height, Paintable paintable) + { + ThrowIfNotOpen(); + + using var paint = new Paint() { Paintable = paintable }; + UnderlyingTexture.NativeTexture.DrawingSurface.Canvas.DrawRect(x, y, width, height, paint); + } + + private void ThrowIfNotOpen() + { + if (!IsOpen) + { + throw new FramebufferNotOpenException("Cannot edit closed framebuffer"); + } + } + + public void Dispose() + { + if (!IsOpen) return; + + IsOpen = false; + UnderlyingTexture.NativeTexture.DrawingSurface.Flush(); + } + +} \ No newline at end of file diff --git a/src/Drawie.Tests/Drawie.Tests.csproj b/src/Drawie.Tests/Drawie.Tests.csproj index 6379522..e6f41ea 100644 --- a/src/Drawie.Tests/Drawie.Tests.csproj +++ b/src/Drawie.Tests/Drawie.Tests.csproj @@ -1,7 +1,7 @@ - net8.0 + net10.0 enable enable @@ -10,7 +10,6 @@ - diff --git a/src/Drawie.Windowing.Browser/BrowserWindow.cs b/src/Drawie.Windowing.Browser/BrowserWindow.cs index f865881..0b41bbf 100644 --- a/src/Drawie.Windowing.Browser/BrowserWindow.cs +++ b/src/Drawie.Windowing.Browser/BrowserWindow.cs @@ -2,6 +2,7 @@ using Drawie.Backend.Core.Bridge; using Drawie.Numerics; using Drawie.RenderApi; +using Drawie.Rendering; using Drawie.Windowing.Browser.Input; using Drawie.Windowing.Input; @@ -42,9 +43,10 @@ public bool IsVisible } public event Action? Update; - public event Action? Render; + public event Action? Render; private Texture renderTexture; + private GraphicsStore store; public void Initialize() { @@ -52,11 +54,12 @@ public void Initialize() RenderApi.FramebufferResized += FramebufferResized; InputController = new InputController(new [] { new BrowserKeyboard() }, []); + store = new GraphicsStore(RenderApi.GraphicsContext); } private void FramebufferResized() { - renderTexture?.Dispose(); + store.Dispose(); renderTexture = CreateRenderTexture(); } @@ -72,9 +75,11 @@ private void OnRender(double dt) double deltaTime = dt / 1000.0; Update?.Invoke(deltaTime); RenderApi.PrepareTextureToWrite(); - renderTexture.DrawingSurface?.Canvas.Clear(); - Render?.Invoke(renderTexture, deltaTime); - renderTexture.DrawingSurface?.Flush(); + RenderingContext ctx = new RenderingContext(); + using var renderingScope = ctx.Open(); + using var fbo = ctx.Edit(renderTexture); + fbo.Clear(); + Render?.Invoke(fbo, dt); BrowserInterop.RequestAnimationFrame(OnRender); } @@ -90,9 +95,6 @@ private void OnWindowResized(int width, int height) private Texture CreateRenderTexture() { - var drawingSurface = - DrawingBackendApi.Current.CreateRenderSurface(UsableWindowSize, RenderApi.RenderTexture, - SurfaceOrigin.BottomLeft); - return Texture.FromExisting(drawingSurface); + return store.CreateNativeRenderSurface(UsableWindowSize, RenderApi.RenderTexture, SurfaceOrigin.BottomLeft); } } diff --git a/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj b/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj index dbfc715..e788a80 100644 --- a/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj +++ b/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj b/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj index 3aa63e5..3715ad3 100644 --- a/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj +++ b/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable Drawie.Silk @@ -9,9 +9,9 @@ - - - + + + diff --git a/src/Drawie.Windowing.Glfw/GlfwWindow.cs b/src/Drawie.Windowing.Glfw/GlfwWindow.cs index f4ba9c6..6e54aab 100644 --- a/src/Drawie.Windowing.Glfw/GlfwWindow.cs +++ b/src/Drawie.Windowing.Glfw/GlfwWindow.cs @@ -2,6 +2,7 @@ using Drawie.Backend.Core.Bridge; using Drawie.Numerics; using Drawie.RenderApi; +using Drawie.Rendering; using Drawie.Silk.Extensions; using Drawie.Silk.Input; using Drawie.Skia; @@ -16,6 +17,7 @@ namespace Drawie.Silk; public class GlfwWindow : Drawie.Windowing.IWindow { + private GraphicsStore store; private IWindow? window; private bool isRunning; @@ -60,11 +62,10 @@ public bool ShowOnTop } public event Action Update; - public event Action Render; + public event Action Render; private SKSurface? surface; private Texture renderTexture; - private GRContext context; private bool initialized; public GlfwWindow(string name, VecI size, IWindowRenderApi renderApi) @@ -105,6 +106,7 @@ public void Initialize() RenderApi.CreateInstance(window.Native, window.Size.ToVecI()); } + store = new GraphicsStore(RenderApi.GraphicsContext); initialized = true; } @@ -155,8 +157,7 @@ public void Show() private void RenderApiOnFramebufferResized() { - renderTexture.Dispose(); - renderTexture = null!; + store.Dispose(); surface = null!; CreateRenderTarget(window!.FramebufferSize.ToVecI(), RenderApi.RenderTexture); @@ -164,9 +165,7 @@ private void RenderApiOnFramebufferResized() private void CreateRenderTarget(VecI size, ITexture nativeRenderTexture) { - var drawingSurface = - DrawingBackendApi.Current.CreateRenderSurface(size, nativeRenderTexture, SurfaceOrigin.TopLeft); - renderTexture = Texture.FromExisting(drawingSurface); + renderTexture = store.CreateNativeRenderSurface(size, nativeRenderTexture, SurfaceOrigin.TopLeft); } private void WindowOnFramebufferResize(Vector2D newSize) @@ -182,16 +181,18 @@ private void OnUpdate(double dt) private void OnRender(double dt) { RenderApi.PrepareTextureToWrite(); - renderTexture.DrawingSurface?.Canvas.Clear(); - Render?.Invoke(renderTexture, dt); - renderTexture.DrawingSurface?.Flush(); + RenderingContext ctx = new RenderingContext(); + using var renderingScope = ctx.Open(); + using var fbo = ctx.Edit(renderTexture); + fbo.Clear(); + Render?.Invoke(fbo, dt); } public void Close() { window.Update -= OnUpdate; window.Render -= OnRender; - renderTexture.Dispose(); + store.Dispose(); RenderApi.DestroyInstance(); window?.Close(); diff --git a/src/Drawie.Windowing/Drawie.Windowing.csproj b/src/Drawie.Windowing/Drawie.Windowing.csproj index b0dcde8..98bd6d0 100644 --- a/src/Drawie.Windowing/Drawie.Windowing.csproj +++ b/src/Drawie.Windowing/Drawie.Windowing.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable @@ -10,6 +10,7 @@ + diff --git a/src/Drawie.Windowing/IWindow.cs b/src/Drawie.Windowing/IWindow.cs index 47fcbaa..4bfcb52 100644 --- a/src/Drawie.Windowing/IWindow.cs +++ b/src/Drawie.Windowing/IWindow.cs @@ -1,6 +1,7 @@ using Drawie.Backend.Core; using Drawie.Numerics; using Drawie.RenderApi; +using Drawie.Rendering; using Drawie.Windowing.Input; namespace Drawie.Windowing; @@ -18,7 +19,7 @@ public interface IWindow public bool IsVisible { get; set; } public event Action Update; - public event Action Render; + public event Action Render; public void Initialize(); public void Show(); diff --git a/src/Drawie.sln b/src/Drawie.sln index 11b1e85..01dc99e 100644 --- a/src/Drawie.sln +++ b/src/Drawie.sln @@ -51,8 +51,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi.WebGl", "D EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi.Web.Common", "Drawie.RenderApi.Web.Common\Drawie.RenderApi.Web.Common.csproj", "{9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi.OpenGl", "Drawie.RenderApi.OpenGL\Drawie.RenderApi.OpenGl.csproj", "{0AD65A3C-895C-4358-AD3F-B2FC1CED531E}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Interop.Avalonia.Core", "Drawie.Interop.Avalonia.Core\Drawie.Interop.Avalonia.Core.csproj", "{D10009DC-D4F1-4A50-A36D-BF38ABBCC148}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Interop.Avalonia", "Drawie.Interop.Avalonia\Drawie.Interop.Avalonia.csproj", "{88F7130B-C1B0-4383-8503-CB7A3960C6A4}" @@ -61,6 +59,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Interop.Avalonia.Ope EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Tests", "Drawie.Tests\Drawie.Tests.csproj", "{5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi.OpenGl", "Drawie.RenderApi.OpenGl\Drawie.RenderApi.OpenGl.csproj", "{40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Rendering", "Drawie.Rendering\Drawie.Rendering.csproj", "{2D889347-CF94-4D67-AC4A-742AD1F1201D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie2Sample", "Drawie2Sample\Drawie2Sample.csproj", "{A9DB4D66-CD25-40E9-8F72-C5341D6C6564}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -146,10 +150,6 @@ Global {9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04}.Debug|Any CPU.Build.0 = Debug|Any CPU {9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04}.Release|Any CPU.ActiveCfg = Release|Any CPU {9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04}.Release|Any CPU.Build.0 = Release|Any CPU - {0AD65A3C-895C-4358-AD3F-B2FC1CED531E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0AD65A3C-895C-4358-AD3F-B2FC1CED531E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0AD65A3C-895C-4358-AD3F-B2FC1CED531E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0AD65A3C-895C-4358-AD3F-B2FC1CED531E}.Release|Any CPU.Build.0 = Release|Any CPU {D10009DC-D4F1-4A50-A36D-BF38ABBCC148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {D10009DC-D4F1-4A50-A36D-BF38ABBCC148}.Debug|Any CPU.Build.0 = Debug|Any CPU {D10009DC-D4F1-4A50-A36D-BF38ABBCC148}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -166,6 +166,18 @@ Global {5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6}.Debug|Any CPU.Build.0 = Debug|Any CPU {5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6}.Release|Any CPU.ActiveCfg = Release|Any CPU {5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6}.Release|Any CPU.Build.0 = Release|Any CPU + {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}.Debug|Any CPU.Build.0 = Debug|Any CPU + {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}.Release|Any CPU.ActiveCfg = Release|Any CPU + {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}.Release|Any CPU.Build.0 = Release|Any CPU + {2D889347-CF94-4D67-AC4A-742AD1F1201D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2D889347-CF94-4D67-AC4A-742AD1F1201D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2D889347-CF94-4D67-AC4A-742AD1F1201D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2D889347-CF94-4D67-AC4A-742AD1F1201D}.Release|Any CPU.Build.0 = Release|Any CPU + {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {645AF54D-D58F-492E-A2A9-12F86EA8C00A} = {239DB1B4-E66F-444A-87DA-B19775F40974} @@ -182,9 +194,11 @@ Global {43F3D61C-5FA8-4F24-ABDC-186E287EC882} = {844D01F5-5C74-4635-9DBB-12303702D4A6} {B5E4E80D-C248-4565-90F9-B3ECDF450EC6} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} {9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} - {0AD65A3C-895C-4358-AD3F-B2FC1CED531E} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} {D10009DC-D4F1-4A50-A36D-BF38ABBCC148} = {844D01F5-5C74-4635-9DBB-12303702D4A6} {88F7130B-C1B0-4383-8503-CB7A3960C6A4} = {844D01F5-5C74-4635-9DBB-12303702D4A6} {EF944C77-D86B-4D6B-B88E-FE06131C70D7} = {844D01F5-5C74-4635-9DBB-12303702D4A6} + {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} + {2D889347-CF94-4D67-AC4A-742AD1F1201D} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} + {A9DB4D66-CD25-40E9-8F72-C5341D6C6564} = {239DB1B4-E66F-444A-87DA-B19775F40974} EndGlobalSection EndGlobal diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 77a6070..4e3650e 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -19,6 +19,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -41,18 +42,19 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded <AssemblyExplorer> <PhysicalFolder Path="C:\Users\flubb\.nuget\packages\silk.net.shaderc.native\2.21.0" Loaded="True" /> </AssemblyExplorer> - C:\Program Files\dotnet\sdk\8.0.405\MSBuild.dll - C:\Program Files\dotnet\dotnet.exe - <SessionState ContinuousTestingMode="0" IsActive="True" Name="TestThatDrawingBackendHasGraphicsContext" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <TestAncestor> - <TestId>xUnit::5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6::net8.0::Drawie.Tests.SkiaDrawingBackendTests</TestId> - </TestAncestor> + /home/flabbet/.dotnet/sdk/10.0.101/MSBuild.dll + /home/flabbet/.dotnet/dotnet + <SessionState ContinuousTestingMode="0" IsActive="True" Name="TestThatDrawingBackendHasGraphicsContext" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <TestAncestor> + <TestId>xUnit::5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6::net10.0::Drawie.Tests.SkiaDrawingBackendTests</TestId> + </TestAncestor> </SessionState> diff --git a/src/Drawie2Sample/Drawie2Sample.csproj b/src/Drawie2Sample/Drawie2Sample.csproj new file mode 100644 index 0000000..1b01305 --- /dev/null +++ b/src/Drawie2Sample/Drawie2Sample.csproj @@ -0,0 +1,14 @@ + + + + net10.0 + enable + enable + Drawie2Sample + + + + + + + diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs new file mode 100644 index 0000000..c8b313e --- /dev/null +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -0,0 +1,28 @@ +using Drawie.Backend.Core.ColorsImpl; +using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Numerics; +using Drawie.Windowing; +using DrawiEngine; + +namespace Drawie2Sample; + +public class Drawie2SampleApp : DrawieApp +{ + private IWindow window; + + public override IWindow CreateMainWindow() + { + window = Engine.WindowingPlatform.CreateWindow("Drawie 2 Sample", new VecI(800, 600)); + return window; + } + + protected override void OnInitialize() + { + window.Render += (targetTexture, deltaTime) => + { + targetTexture.DrawRectangle(0, 0, targetTexture.Size.X, targetTexture.Size.Y, + new ColorPaintable(Colors.Green)); + }; + } +} + diff --git a/src/DrawieSample.Browser/DrawieSample.Browser.csproj b/src/DrawieSample.Browser/DrawieSample.Browser.csproj index a5ac3c1..c5b4e8f 100644 --- a/src/DrawieSample.Browser/DrawieSample.Browser.csproj +++ b/src/DrawieSample.Browser/DrawieSample.Browser.csproj @@ -1,6 +1,6 @@ - net8.0-browser + net10.0-browser true true $(EmccExtraLDFlags) --js-library="$(MSBuildThisFileDirectory)\SkiaSharpGLInterop.js" @@ -9,9 +9,9 @@ + - diff --git a/src/DrawieSample.Browser/Program.cs b/src/DrawieSample.Browser/Program.cs index 33fc9b4..5de4216 100644 --- a/src/DrawieSample.Browser/Program.cs +++ b/src/DrawieSample.Browser/Program.cs @@ -1,6 +1,6 @@ +using Drawie2Sample; using DrawiEngine; using DrawiEngine.Browser; -using DrawieSample; public static class Program { @@ -8,7 +8,7 @@ public static void Main() { DrawingEngine engine = BrowserDrawingEngine.CreateDefaultBrowser(); - DrawieSampleApp sampleApp = new DrawieSampleApp(); + Drawie2SampleApp sampleApp = new Drawie2SampleApp(); engine.RunWithApp(sampleApp); } diff --git a/src/DrawieSample.Browser/wwwroot/main.js b/src/DrawieSample.Browser/wwwroot/main.js index bd3aa1c..5cb4690 100644 --- a/src/DrawieSample.Browser/wwwroot/main.js +++ b/src/DrawieSample.Browser/wwwroot/main.js @@ -4,7 +4,7 @@ import {dotnet} from './_framework/dotnet.js' import {Drawie} from "./scripts/drawie.js"; -const {setModuleImports, getAssemblyExports, getConfig} = await dotnet +const {setModuleImports, getAssemblyExports, getConfig, runMain} = await dotnet .withDiagnosticTracing(false) .withApplicationArgumentsFromQuery() .create(); @@ -15,4 +15,4 @@ drawie.addDrawieImports(); await drawie.addDrawieExports(); const config = getConfig(); -await dotnet.run(); \ No newline at end of file +await runMain(); \ No newline at end of file diff --git a/src/DrawieSample.Browser/wwwroot/scripts/drawie.js b/src/DrawieSample.Browser/wwwroot/scripts/drawie.js index c0d595c..9ddb5f4 100644 --- a/src/DrawieSample.Browser/wwwroot/scripts/drawie.js +++ b/src/DrawieSample.Browser/wwwroot/scripts/drawie.js @@ -114,7 +114,7 @@ }, useProgram: (glHandle, programId) => { const gl = this.canvasContextHandles[glHandle]; - const program = programHandles[programId]; + const program = this.programHandles[programId]; gl.useProgram(program); }, drawArrays: (glHandle, mode, first, count) => { @@ -202,7 +202,16 @@ innerWidth: () => window.innerWidth, innerHeight: () => window.innerHeight, requestAnimationFrame: () => this.invokeRequestAnimationFrame(), - subscribeWindowResize: () => window.addEventListener('resize', this.invokeWindowResize) + subscribeWindowResize: () => window.addEventListener('resize', (evt) => this.exports.Drawie.JSInterop.JSRuntime.WindowResized(window.innerWidth, window.innerHeight)) + + }, + input: { + subscribeKeyDown: () => { + window.addEventListener('keydown', (evt) => this.exports.Drawie.JSInterop.JSRuntime.OnKeyDown(evt.code)); + }, + subscribeKeyUp: () => { + window.addEventListener('keyup', (evt) => this.exports.Drawie.JSInterop.JSRuntime.OnKeyUp(evt.code)); + } } }); } @@ -218,12 +227,6 @@ return requestId; } - invokeWindowResize() { - if(this.exports) { - this.exports.Drawie.JSInterop.JSRuntime.WindowResized(window.innerWidth, window.innerHeight); - } - } - async addDrawieExports() { this.exports = await globalThis.getDotnetRuntime(0).getAssemblyExports("Drawie.JSInterop"); }} \ No newline at end of file diff --git a/src/DrawieSample.Desktop/DrawieSample.Desktop.csproj b/src/DrawieSample.Desktop/DrawieSample.Desktop.csproj index 0535ac6..772ff18 100644 --- a/src/DrawieSample.Desktop/DrawieSample.Desktop.csproj +++ b/src/DrawieSample.Desktop/DrawieSample.Desktop.csproj @@ -2,15 +2,15 @@ Exe - net8.0 + net10.0 enable enable DrawieSample + - diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index 217953f..eaa24cb 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -1,9 +1,9 @@ -using DrawiEngine; +using Drawie2Sample; +using DrawiEngine; using DrawiEngine.Desktop; -using DrawieSample; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); -DrawieSampleApp app = new DrawieSampleApp(); +Drawie2SampleApp app = new Drawie2SampleApp(); engine.RunWithApp(app); diff --git a/src/DrawieSample/DrawieSample.csproj b/src/DrawieSample/DrawieSample.csproj index f380892..8672b41 100644 --- a/src/DrawieSample/DrawieSample.csproj +++ b/src/DrawieSample/DrawieSample.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/DrawieSample/DrawieSampleApp.cs b/src/DrawieSample/DrawieSampleApp.cs index 0397cf6..cceca60 100644 --- a/src/DrawieSample/DrawieSampleApp.cs +++ b/src/DrawieSample/DrawieSampleApp.cs @@ -24,15 +24,15 @@ protected override void OnInitialize() { Paint paint = new Paint() { IsAntiAliased = true }; - Texture testTexture = new Texture(new VecI(800, 600)); - DrawHorizontalColorStrips(testTexture, paint); + NativeTexture testNativeTexture = new NativeTexture(new VecI(800, 600)); + DrawHorizontalColorStrips(testNativeTexture, paint); - DrawBlendTestHorizontalStrips(testTexture, paint); + DrawBlendTestHorizontalStrips(testNativeTexture, paint); - DrawingSurface srgbSurface = DrawingSurface.Create(new ImageInfo(testTexture.Size.X, testTexture.Size.Y, + DrawingSurface srgbSurface = DrawingSurface.Create(new ImageInfo(testNativeTexture.Size.X, testNativeTexture.Size.Y, ColorType.Rgba8888, AlphaType.Premul, ColorSpace.CreateSrgb()) { GpuBacked = true }); - srgbSurface.Canvas.DrawSurface(testTexture.DrawingSurface, 0, 0); + srgbSurface.Canvas.DrawSurface(testNativeTexture.DrawingSurface, 0, 0); window.Render += (targetTexture, deltaTime) => { @@ -42,25 +42,25 @@ protected override void OnInitialize() }; } - private void DrawReferenceColors(Texture targetTexture, Paint paint) + private void DrawReferenceColors(NativeTexture targetNativeTexture, Paint paint) { using Paint referencePaint = new Paint() { IsAntiAliased = true }; referencePaint.Color = Colors.Black; - targetTexture.DrawingSurface.Canvas.DrawRect(0, 0, 5, 5, referencePaint); + targetNativeTexture.DrawingSurface.Canvas.DrawRect(0, 0, 5, 5, referencePaint); referencePaint.Color = Colors.White; - targetTexture.DrawingSurface.Canvas.DrawRect(5, 0, 5, 5, referencePaint); + targetNativeTexture.DrawingSurface.Canvas.DrawRect(5, 0, 5, 5, referencePaint); referencePaint.Color = Color.FromRgb(255, 0, 0); - targetTexture.DrawingSurface.Canvas.DrawRect(10, 0, 5, 5, referencePaint); + targetNativeTexture.DrawingSurface.Canvas.DrawRect(10, 0, 5, 5, referencePaint); referencePaint.Color = Color.FromRgb(0, 255, 0); - targetTexture.DrawingSurface.Canvas.DrawRect(15, 0, 5, 5, referencePaint); + targetNativeTexture.DrawingSurface.Canvas.DrawRect(15, 0, 5, 5, referencePaint); referencePaint.Color = Color.FromRgb(0, 0, 255); - targetTexture.DrawingSurface.Canvas.DrawRect(20, 0, 5, 5, referencePaint); + targetNativeTexture.DrawingSurface.Canvas.DrawRect(20, 0, 5, 5, referencePaint); } - private void DrawHorizontalColorStrips(Texture targetTexture, Paint paint) + private void DrawHorizontalColorStrips(NativeTexture targetNativeTexture, Paint paint) { - int stripWidth = targetTexture.Size.X / 4; - int stripHeight = targetTexture.Size.Y; + int stripWidth = targetNativeTexture.Size.X / 4; + int stripHeight = targetNativeTexture.Size.Y; int spacing = 10; @@ -69,15 +69,15 @@ private void DrawHorizontalColorStrips(Texture targetTexture, Paint paint) for (int i = 0; i < 4; i++) { paint.Color = colors[i]; - targetTexture.DrawingSurface.Canvas.DrawRect(i * stripWidth + spacing, spacing, stripWidth - 2 * spacing, + targetNativeTexture.DrawingSurface.Canvas.DrawRect(i * stripWidth + spacing, spacing, stripWidth - 2 * spacing, stripHeight, paint); } } - private void DrawBlendTestHorizontalStrips(Texture targetTexture, Paint paint) + private void DrawBlendTestHorizontalStrips(NativeTexture targetNativeTexture, Paint paint) { - int stripWidth = targetTexture.Size.X; - int stripHeight = targetTexture.Size.Y / 3; + int stripWidth = targetNativeTexture.Size.X; + int stripHeight = targetNativeTexture.Size.Y / 3; int spacing = 50; @@ -87,7 +87,7 @@ private void DrawBlendTestHorizontalStrips(Texture targetTexture, Paint paint) { paint.Color = colors[i].WithAlpha(128); paint.Style = PaintStyle.Fill; - targetTexture.DrawingSurface.Canvas.DrawRect(0, i * stripHeight + spacing, stripWidth, + targetNativeTexture.DrawingSurface.Canvas.DrawRect(0, i * stripHeight + spacing, stripWidth, stripHeight - 2 * spacing, paint); } } From 2f15f5bc801328a2e4aae469cd2dff0b9dbce7d9 Mon Sep 17 00:00:00 2001 From: flabbet Date: Thu, 6 Aug 2026 14:18:19 +0200 Subject: [PATCH 02/55] Fixed browser --- src/Drawie.Backend.Core/Text/RichText.cs | 2 +- src/Drawie.JSInterop/JSRuntime.WebGl.cs | 21 +++ .../OpenGlGraphicsContext.cs | 7 +- .../Enums/WebGlError.cs | 11 ++ .../Enums/WebGlFramebufferAttachment.cs | 24 +++ .../Enums/WebGlFramebufferStatus.cs | 10 ++ .../Enums/WebGlFramebufferTarget.cs | 8 + .../WebGlGraphicsContext.cs | 14 ++ src/Drawie.RenderApi.WebGl/WebGlTexture.cs | 7 +- .../WebGlWindowRenderApi.cs | 148 ++++-------------- src/Drawie.RenderApi/IGraphicsContext.cs | 1 + src/Drawie.Rendering/IGraphicsStore.cs | 56 ++++++- src/Drawie.Rendering/RenderingContext.cs | 10 +- src/Drawie.Rendering/Texture.cs | 2 + src/Drawie.Rendering/TextureFramebuffer.cs | 3 + src/Drawie.Windowing.Browser/BrowserWindow.cs | 30 +++- src/Drawie.Windowing.Glfw/GlfwWindow.cs | 4 +- src/Drawie.sln.DotSettings.user | 1 + src/Drawie2Sample/Drawie2SampleApp.cs | 23 ++- .../wwwroot/scripts/drawie.js | 37 +++++ src/DrawieSample.Browser/wwwroot/styles.css | 6 +- 21 files changed, 284 insertions(+), 141 deletions(-) create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlError.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferAttachment.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferStatus.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferTarget.cs diff --git a/src/Drawie.Backend.Core/Text/RichText.cs b/src/Drawie.Backend.Core/Text/RichText.cs index 26ecd2b..df11431 100644 --- a/src/Drawie.Backend.Core/Text/RichText.cs +++ b/src/Drawie.Backend.Core/Text/RichText.cs @@ -36,7 +36,7 @@ public RichText(string text, double maxWidth = double.MaxValue) FormattedText = text.Replace('\n', ' '); Lines = text.Split('\n'); } - + public void Paint(Canvas canvas, VecD position, Font font, Paint paint, VectorPath? onPath, VecD? pathOffset = null) { if (pathOffset == null) diff --git a/src/Drawie.JSInterop/JSRuntime.WebGl.cs b/src/Drawie.JSInterop/JSRuntime.WebGl.cs index 450a182..f0a46a1 100644 --- a/src/Drawie.JSInterop/JSRuntime.WebGl.cs +++ b/src/Drawie.JSInterop/JSRuntime.WebGl.cs @@ -88,4 +88,25 @@ public static partial void TexImage2D(int handle, int type, int level, int forma [JSImport("webgl.deleteTexture", "drawie.js")] public static partial void DeleteTexture(int gl, int textureId); + + [JSImport("webgl.viewport", "drawie.js")] + public static partial void Viewport(int gl, int x, int y, int width, int height); + + [JSImport("webgl.bindFramebuffer", "drawie.js")] + public static partial void BindFramebuffer(int gl, int framebuffer); + + [JSImport("webgl.createFramebuffer", "drawie.js")] + public static partial int CreateFramebuffer(int gl); + + [JSImport("webgl.framebufferTexture2D", "drawie.js")] + public static partial void FramebufferTexture2D(int gl, int target, int attachment, int textarget, int texture, int level); + + [JSImport("webgl.checkFramebufferStatus", "drawie.js")] + public static partial int CheckFramebufferStatus(int gl, int target); + + [JSImport("webgl.getError", "drawie.js")] + public static partial int GetError(int gl); + + [JSImport("webgl.deleteFramebuffer", "drawie.js")] + public static partial void DeleteFramebuffer(int gl, int framebuffer); } diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs index 4c09b86..e9880ae 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs @@ -11,7 +11,12 @@ public bool OwnsTexture(ITexture nativeTexture) { return nativeTexture is OpenGlTexture glTexture && ownedTextures.Contains(glTexture.TextureId); } - + + public void MakeCurrent() + { + GlContext.MakeCurrent(); + } + public OpenGlTexture CreateTexture(uint id) { ownedTextures.Add(id); diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlError.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlError.cs new file mode 100644 index 0000000..55798ab --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlError.cs @@ -0,0 +1,11 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlError +{ + NoError = 0, + InvalidEnum = 0x0500, + InvalidValue = 0x0501, + InvalidOperation = 0x0502, + OutOfMemory = 0x0505, + ContextLostWebGl = 0x9242 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferAttachment.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferAttachment.cs new file mode 100644 index 0000000..424bfbf --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferAttachment.cs @@ -0,0 +1,24 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlFramebufferAttachment +{ + ColorAttachment0 = 0x8CE0, + DepthAttachment = 0x8D00, + StencilAttachment = 0x8D20, + DepthStencilAttachment = 0x821A, + ColorAttachment1 = 0x8CE1, + ColorAttachment2 = 0x8CE2, + ColorAttachment3 = 0x8CE3, + ColorAttachment4 = 0x8CE4, + ColorAttachment5 = 0x8CE5, + ColorAttachment6 = 0x8CE6, + ColorAttachment7 = 0x8CE7, + ColorAttachment8 = 0x8CE8, + ColorAttachment9 = 0x8CE9, + ColorAttachment10 = 0x8CEA, + ColorAttachment11 = 0x8CEB, + ColorAttachment12 = 0x8CEC, + ColorAttachment13 = 0x8CED, + ColorAttachment14 = 0x8CEE, + ColorAttachment15 = 0x8CEF +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferStatus.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferStatus.cs new file mode 100644 index 0000000..518d95d --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferStatus.cs @@ -0,0 +1,10 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlFramebufferStatus +{ + FramebufferComplete = 0x8CD5, + FramebufferIncompleteAttachment = 0x8CD6, + FramebufferIncompleteMissingAttachment = 0x8CD7, + FramebufferIncompleteDimensions = 0x8CD9, + FramebufferUnsupported = 0x8CDD +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferTarget.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferTarget.cs new file mode 100644 index 0000000..df80e18 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlFramebufferTarget.cs @@ -0,0 +1,8 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlFramebufferTarget +{ + Framebuffer = 0x8D40, + DrawFramebuffer = 0x8CA9, + ReadFramebuffer = 0x8CA8 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs b/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs index 3ea6175..a42de23 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs @@ -12,6 +12,11 @@ public bool OwnsTexture(ITexture nativeTexture) return nativeTexture is WebGlTexture wglTexture && ownedTextures.Contains(wglTexture.TextureId); } + public void MakeCurrent() + { + JSRuntime.MakeContextCurrent(Gl); + } + public WebGlTexture CreateTexture(int handle, int width, int height) { var texture = new WebGlTexture(Gl, JSRuntime.CreateTexture(handle)); @@ -24,4 +29,13 @@ public WebGlTexture CreateTexture(int handle, int width, int height) ownedTextures.Add(texture.TextureId); return texture; } + + public void DisposeTexture(WebGlTexture texture) + { + if (ownedTextures.Contains(texture.TextureId)) + { + JSRuntime.DeleteTexture(Gl, texture.TextureId); + ownedTextures.Remove(texture.TextureId); + } + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlTexture.cs b/src/Drawie.RenderApi.WebGl/WebGlTexture.cs index 6c4752d..d54c7e2 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlTexture.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlTexture.cs @@ -2,7 +2,7 @@ namespace Drawie.RenderApi.WebGl; -public class WebGlTexture : IWebGlTexture, IDisposable +public class WebGlTexture : IWebGlTexture { public int Gl { get; private set; } public int TextureId { get; private set; } @@ -14,9 +14,4 @@ public WebGlTexture(int gl, int textureId) TextureId = textureId; Gl = gl; } - - public void Dispose() - { - JSRuntime.DeleteTexture(Gl, TextureId); - } } diff --git a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs b/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs index 88d328f..0d2eae4 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs @@ -8,46 +8,18 @@ namespace Drawie.RenderApi.WebGl; public class WebGlWindowRenderApi : IWindowRenderApi { - private const string vertexSource = """ - #version 300 es - in vec4 position; - in vec2 aTextureCoord; - - out highp vec2 vTextureCoord; - void main() { - gl_Position = position; - vTextureCoord = aTextureCoord; - } - """; - - private const string fragSource = """ - #version 300 es - precision highp float; - in highp vec2 vTextureCoord; - - uniform sampler2D uSampler; - out vec4 fragColor; - - void main(void) { - fragColor = texture(uSampler, vTextureCoord); - } - """; - private HtmlCanvas canvasObject; public event Action? FramebufferResized; public ITexture RenderTexture => texture; public string CanvasId { get; private set; } - private int posBuffer; - private int program; public int gl; private WebGlTexture texture; + private int framebuffer; - private int vertexPosAttrib; - private int texCoordAttrib; - private int uSamplerUniform; + private VecI fbSize; public IGraphicsContext GraphicsContext => webglGraphicsContext; private WebGlGraphicsContext webglGraphicsContext; @@ -65,19 +37,8 @@ public void CreateInstance(object contextObject, VecI framebufferSize) JSRuntime.MakeContextCurrent(gl); - var vertexShader = LoadShader(gl, vertexSource, WebGlShaderType.Vertex); - var fragmentShader = LoadShader(gl, fragSource, WebGlShaderType.Fragment); - - program = InitProgram(gl, vertexShader, fragmentShader); - - posBuffer = InitBuffers(gl); - texture = CreateTexture(gl, framebufferSize.X, framebufferSize.Y); - InitTextureBuffer(gl); - - vertexPosAttrib = JSRuntime.GetAttribLocation(gl, program, "position"); - texCoordAttrib = JSRuntime.GetAttribLocation(gl, program, "aTextureCoord"); - uSamplerUniform = JSRuntime.GetUniformLocation(gl, program, "uSampler"); - + texture = CreateFramebuffer(gl, framebufferSize.X, framebufferSize.Y); + fbSize = framebufferSize; } public void DestroyInstance() @@ -88,8 +49,7 @@ public void UpdateFramebufferSize(int width, int height) { canvasObject.SetAttribute("width", width.ToString()); canvasObject.SetAttribute("height", height.ToString()); - DisposeTexture(); - texture = CreateTexture(gl, width, height); + fbSize = new VecI(width, height); FramebufferResized?.Invoke(); } @@ -99,88 +59,42 @@ public void PrepareTextureToWrite() public void Render(double deltaTime) { - JSRuntime.ClearColor(gl, 0.0f, 0.0f, 0.0f, 1.0f); - JSRuntime.Clear(gl, (int)WebGlBufferMask.ColorBufferBit); - - JSRuntime.BindBuffer(gl, (int)WebGlBufferType.Array, posBuffer); - JSRuntime.VertexAttribPointer(gl, vertexPosAttrib, 2, (int)WebGlArrayType.Float, false, 0, 0); - JSRuntime.EnableVertexAttribArray(gl, vertexPosAttrib); - - SetTextureData(); - - JSRuntime.UseProgram(gl, program); - - JSRuntime.ActiveTexture(gl, 0); - JSRuntime.BindTexture(gl, (int)WebGlTextureType.Texture2D, texture.TextureId); - JSRuntime.Uniform1i(gl, uSamplerUniform, 0); - - JSRuntime.DrawArrays(gl, (int)WebGlDrawMode.TriangleStrip, 0, 4); - } - - private int LoadShader(int handle, string shader, WebGlShaderType type) - { - int shaderHandle = JSRuntime.CreateShader(handle, (int)type); - JSRuntime.ShaderSource(handle, shaderHandle, shader); - string? error = JSRuntime.CompileShader(handle, shaderHandle); - - if (error != null) - { - Console.WriteLine(error); - throw new ShaderCompilationException(type, shader, error); - } - - return shaderHandle; } - private int InitProgram(int handle, int vertexShader, int fragmentShader) + private WebGlTexture CreateFramebuffer(int handle, int width, int height) { - int program = JSRuntime.CreateProgram(handle); - JSRuntime.AttachShader(handle, program, vertexShader); - JSRuntime.AttachShader(handle, program, fragmentShader); - string? error = JSRuntime.LinkProgram(handle, program); + var tex = webglGraphicsContext.CreateTexture(handle, width, height); + framebuffer = JSRuntime.CreateFramebuffer(gl); - if (error != null) + JSRuntime.BindFramebuffer( + gl, + framebuffer); + + JSRuntime.FramebufferTexture2D( + gl, + (int)WebGlFramebufferTarget.Framebuffer, + (int)WebGlFramebufferAttachment.ColorAttachment0, + (int)WebGlTextureType.Texture2D, + tex.TextureId, + 0); + + var status = JSRuntime.CheckFramebufferStatus(gl, (int)WebGlFramebufferTarget.Framebuffer); + + if (status != (int)WebGlFramebufferStatus.FramebufferComplete) { - throw new WebGlException(error); + WebGlError error = (WebGlError)JSRuntime.GetError(gl); + throw new Exception($"Framebuffer invalid: {status}, Error: {error}"); } - return program; - } - - private int InitBuffers(int handle) - { - int positionBuffer = JSRuntime.CreateBuffer(handle); - JSRuntime.BindBuffer(handle, (int)WebGlBufferType.Array, positionBuffer); - double[] vertices = new double[] { 1.0f, 1.0f, -1.0f, 1.0f, 1.0f, -1.0f, -1.0f, -1.0f }; - - JSRuntime.BufferData(handle, (int)WebGlBufferType.Array, vertices, (int)WebGlBufferUsage.StaticDraw); - - return positionBuffer; - } - - private WebGlTexture CreateTexture(int handle, int width, int height) - { - return webglGraphicsContext.CreateTexture(handle, width, height); + return tex; } private void DisposeTexture() { - texture?.Dispose(); - texture = null; - } - - private void InitTextureBuffer(int handle) - { - int texCoordBuffer = JSRuntime.CreateBuffer(handle); - JSRuntime.BindBuffer(handle, (int)WebGlBufferType.Array, texCoordBuffer); - double[] texCoords = new double[] { 1.0f, 1.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f }; - JSRuntime.BufferData(handle, (int)WebGlBufferType.Array, texCoords, (int)WebGlBufferUsage.StaticDraw); - } - - private void SetTextureData() - { - JSRuntime.BindBuffer(gl, (int)WebGlBufferType.Array, texCoordAttrib); - JSRuntime.VertexAttribPointer(gl, texCoordAttrib, 2, (int)WebGlArrayType.Float, false, 0, 0); - JSRuntime.EnableVertexAttribArray(gl, texCoordAttrib); + JSRuntime.BindFramebuffer(gl, 0); + + JSRuntime.DeleteFramebuffer(gl, framebuffer); + framebuffer = 0; + webglGraphicsContext.DisposeTexture(texture); } } diff --git a/src/Drawie.RenderApi/IGraphicsContext.cs b/src/Drawie.RenderApi/IGraphicsContext.cs index d5b846e..8a45ad6 100644 --- a/src/Drawie.RenderApi/IGraphicsContext.cs +++ b/src/Drawie.RenderApi/IGraphicsContext.cs @@ -3,4 +3,5 @@ namespace Drawie.RenderApi; public interface IGraphicsContext { public bool OwnsTexture(ITexture nativeTexture); + public void MakeCurrent(); } \ No newline at end of file diff --git a/src/Drawie.Rendering/IGraphicsStore.cs b/src/Drawie.Rendering/IGraphicsStore.cs index 0a4b41a..cb3f0ba 100644 --- a/src/Drawie.Rendering/IGraphicsStore.cs +++ b/src/Drawie.Rendering/IGraphicsStore.cs @@ -1,3 +1,4 @@ +using System.Text; using Drawie.Backend.Core; using Drawie.Backend.Core.Bridge; using Drawie.Numerics; @@ -10,24 +11,44 @@ namespace Drawie.Rendering; /// public class GraphicsStore : IDisposable { +#if DEBUG + public static List AllStores = new List(); +#endif public IGraphicsContext GraphicsContext { get; set; } private List textures = new List(); - + + public bool IsDisposed { get; private set; } + public GraphicsStore(IGraphicsContext graphicsContext) { GraphicsContext = graphicsContext; +#if DEBUG + AllStores.Add(this); +#endif } - + public Texture CreateNativeRenderSurface(VecI size, ITexture nativeTexture, SurfaceOrigin origin) { if (!GraphicsContext.OwnsTexture(nativeTexture)) { throw new ArgumentException("The given native texture is not owned by this graphics store."); } - - textures.Add(new Texture(NativeTexture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, nativeTexture, origin)))); + + textures.Add(new Texture( + NativeTexture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, nativeTexture, origin)))); return textures[^1]; } + + public void DisposeTexture(Texture toDispose) + { + if(!textures.Contains(toDispose)) + { + throw new ArgumentException("The given texture is not owned by this graphics store."); + } + + textures.Remove(toDispose); + toDispose.NativeTexture.Dispose(); + } public void Dispose() { @@ -35,5 +56,32 @@ public void Dispose() { texture.NativeTexture.Dispose(); } + + textures.Clear(); + IsDisposed = true; + } + +#if DEBUG + public string GetDebugText() + { + StringBuilder sb = new StringBuilder(); + + sb.AppendLine("GraphicsStore Debug Info:"); + sb.AppendLine("Textures Count: " + textures.Count); + int totalMemoryMb = CountMemoryUsed(textures); + sb.AppendLine("Total Memory Used: " + totalMemoryMb + "MB"); + return sb.ToString(); + } + + private int CountMemoryUsed(List list) + { + int bytes = 0; + foreach (var texture in list) + { + bytes += texture.NativeTexture.ImageInfo.BytesSize; + } + + return bytes / (1024 * 1024); } +#endif } \ No newline at end of file diff --git a/src/Drawie.Rendering/RenderingContext.cs b/src/Drawie.Rendering/RenderingContext.cs index 3cdd77b..9877bd0 100644 --- a/src/Drawie.Rendering/RenderingContext.cs +++ b/src/Drawie.Rendering/RenderingContext.cs @@ -1,3 +1,5 @@ +using Drawie.RenderApi; + namespace Drawie.Rendering; /// @@ -5,9 +7,15 @@ namespace Drawie.Rendering; /// public class RenderingContext : IDisposable { + public IGraphicsContext? GraphicsContext { get; } public bool IsOpen { get; private set; } = false; private List ownedFramebuffers = new List(); + public RenderingContext(IGraphicsContext? ctx) + { + GraphicsContext = ctx; + } + public TextureFramebuffer Edit(Texture texture) { if (!IsOpen) throw new InvalidOperationException("Rendering Context is not open."); @@ -21,6 +29,7 @@ public IDisposable Open() { if (IsOpen) throw new InvalidOperationException("Rendering Context is already open."); IsOpen = true; + GraphicsContext?.MakeCurrent(); return this; } @@ -29,7 +38,6 @@ public void Dispose() foreach (var textureFramebuffer in ownedFramebuffers) { if (textureFramebuffer.IsOpen) throw new InvalidOperationException("Framebuffer is in use"); - textureFramebuffer.Dispose(); } IsOpen = false; diff --git a/src/Drawie.Rendering/Texture.cs b/src/Drawie.Rendering/Texture.cs index e2aaa3d..5ce2471 100644 --- a/src/Drawie.Rendering/Texture.cs +++ b/src/Drawie.Rendering/Texture.cs @@ -1,4 +1,5 @@ using Drawie.Backend.Core; +using Drawie.Numerics; namespace Drawie.Rendering; @@ -11,6 +12,7 @@ public class Texture public TextureState State { get; internal set; } = TextureState.Submitted; public int Width { get; } public int Height { get; } + public VecI Size => new VecI(Width, Height); internal Texture(NativeTexture native) { diff --git a/src/Drawie.Rendering/TextureFramebuffer.cs b/src/Drawie.Rendering/TextureFramebuffer.cs index 1f009fc..291e0a9 100644 --- a/src/Drawie.Rendering/TextureFramebuffer.cs +++ b/src/Drawie.Rendering/TextureFramebuffer.cs @@ -1,4 +1,5 @@ using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Backend.Core.Surfaces; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Numerics; using Drawie.Rendering.Exceptions; @@ -10,6 +11,8 @@ public class TextureFramebuffer : IDisposable internal Texture UnderlyingTexture { get; } public bool IsOpen { get; private set; } public VecI Size { get; } + public Canvas? Canvas => IsOpen ? UnderlyingTexture?.NativeTexture?.DrawingSurface?.Canvas : null; + internal TextureFramebuffer(Texture texture) { diff --git a/src/Drawie.Windowing.Browser/BrowserWindow.cs b/src/Drawie.Windowing.Browser/BrowserWindow.cs index 0b41bbf..0fe9746 100644 --- a/src/Drawie.Windowing.Browser/BrowserWindow.cs +++ b/src/Drawie.Windowing.Browser/BrowserWindow.cs @@ -46,6 +46,7 @@ public bool IsVisible public event Action? Render; private Texture renderTexture; + private VecI? pendingResize = null; private GraphicsStore store; public void Initialize() @@ -59,8 +60,7 @@ public void Initialize() private void FramebufferResized() { - store.Dispose(); - renderTexture = CreateRenderTexture(); + pendingResize = UsableWindowSize; } public void Show() @@ -74,12 +74,31 @@ private void OnRender(double dt) { double deltaTime = dt / 1000.0; Update?.Invoke(deltaTime); + if (pendingResize.HasValue) + { + if (pendingResize.Value != renderTexture.Size) + { + var newRenderTexture = CreateRenderTexture(); + + var oldTexture = renderTexture; + renderTexture = newRenderTexture; + + store.DisposeTexture(oldTexture); + } + + pendingResize = null; + } + RenderApi.PrepareTextureToWrite(); - RenderingContext ctx = new RenderingContext(); - using var renderingScope = ctx.Open(); - using var fbo = ctx.Edit(renderTexture); + RenderingContext ctx = new RenderingContext(RenderApi.GraphicsContext); + var renderingScope = ctx.Open(); + var fbo = ctx.Edit(renderTexture); fbo.Clear(); Render?.Invoke(fbo, dt); + fbo.Dispose(); + renderingScope.Dispose(); + ctx.Dispose(); + RenderApi.Render(dt); BrowserInterop.RequestAnimationFrame(OnRender); } @@ -90,7 +109,6 @@ public void Close() private void OnWindowResized(int width, int height) { RenderApi?.UpdateFramebufferSize(width, height); - BrowserInterop.RequestAnimationFrame(OnRender); } private Texture CreateRenderTexture() diff --git a/src/Drawie.Windowing.Glfw/GlfwWindow.cs b/src/Drawie.Windowing.Glfw/GlfwWindow.cs index 6e54aab..460c1bb 100644 --- a/src/Drawie.Windowing.Glfw/GlfwWindow.cs +++ b/src/Drawie.Windowing.Glfw/GlfwWindow.cs @@ -165,7 +165,7 @@ private void RenderApiOnFramebufferResized() private void CreateRenderTarget(VecI size, ITexture nativeRenderTexture) { - renderTexture = store.CreateNativeRenderSurface(size, nativeRenderTexture, SurfaceOrigin.TopLeft); + renderTexture = store.CreateNativeRenderSurface(size, nativeRenderTexture, SurfaceOrigin.BottomLeft); } private void WindowOnFramebufferResize(Vector2D newSize) @@ -181,7 +181,7 @@ private void OnUpdate(double dt) private void OnRender(double dt) { RenderApi.PrepareTextureToWrite(); - RenderingContext ctx = new RenderingContext(); + RenderingContext ctx = new RenderingContext(RenderApi.GraphicsContext); using var renderingScope = ctx.Open(); using var fbo = ctx.Edit(renderTexture); fbo.Clear(); diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 4e3650e..c8c21f2 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -1,4 +1,5 @@  + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index c8b313e..d09c8ae 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -1,6 +1,11 @@ -using Drawie.Backend.Core.ColorsImpl; +using System.Text; +using Drawie.Backend.Core.Bridge; +using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Backend.Core.Surfaces.PaintImpl; +using Drawie.Backend.Core.Text; using Drawie.Numerics; +using Drawie.Rendering; using Drawie.Windowing; using DrawiEngine; @@ -20,8 +25,24 @@ protected override void OnInitialize() { window.Render += (targetTexture, deltaTime) => { + targetTexture.Clear(); targetTexture.DrawRectangle(0, 0, targetTexture.Size.X, targetTexture.Size.Y, new ColorPaintable(Colors.Green)); + + using Font defaultFont = Font.CreateDefault(); + Paintable color = new ColorPaintable(Colors.White); + StringBuilder sb = new StringBuilder(); + sb.AppendLine("Stores: " + GraphicsStore.AllStores.Count); + foreach (var store in GraphicsStore.AllStores) + { + sb.AppendLine("Store: " + store.GetDebugText()); + } + + RichText rt = new RichText(sb.ToString()) { Fill = true, FillPaintable = color }; + + using Paint p = new Paint() { Paintable = color }; + + rt.Paint(targetTexture.Canvas, new VecD(0, 20), defaultFont, p, null); }; } } diff --git a/src/DrawieSample.Browser/wwwroot/scripts/drawie.js b/src/DrawieSample.Browser/wwwroot/scripts/drawie.js index 9ddb5f4..0772261 100644 --- a/src/DrawieSample.Browser/wwwroot/scripts/drawie.js +++ b/src/DrawieSample.Browser/wwwroot/scripts/drawie.js @@ -16,6 +16,9 @@ uniformLocationHandleIds = 0; uniformLocationHandles = {}; + framebufferHandleIds = 0; + framebufferHandles = {}; + exports = {}; addDrawieImports() { @@ -197,6 +200,40 @@ delete this.textureHandles[textureId]; }, + viewport: (glHandle, x, y, width, height) => { + const gl = this.canvasContextHandles[glHandle]; + gl.viewport(x, y, width, height); + }, + bindFramebuffer: (glHandle, framebuffer) => { + const gl = this.canvasContextHandles[glHandle]; + gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebufferHandles[framebuffer]); + }, + createFramebuffer: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + const fb = gl.createFramebuffer(); + this.framebufferHandleIds++; + this.framebufferHandles[this.framebufferHandleIds] = fb; + + return this.framebufferHandleIds; + }, + framebufferTexture2D: (glHandle, target, attachment, textarget, texture, level) => { + const gl = this.canvasContextHandles[glHandle]; + const targetTexture = this.textureHandles[texture] + gl.framebufferTexture2D(target, attachment, textarget, targetTexture, level); + }, + checkFramebufferStatus: (glHandle, target) => { + const gl = this.canvasContextHandles[glHandle]; + return gl.checkFramebufferStatus(target); + }, + getError: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + return gl.getError(); + }, + deleteFramebuffer: (glHandle, framebuffer) => { + const gl = this.canvasContextHandles[glHandle]; + gl.deleteFramebuffer(this.framebufferHandles[framebuffer]); + delete this.framebufferHandles[framebuffer]; + } }, window: { innerWidth: () => window.innerWidth, diff --git a/src/DrawieSample.Browser/wwwroot/styles.css b/src/DrawieSample.Browser/wwwroot/styles.css index 30fb6ac..5590d29 100644 --- a/src/DrawieSample.Browser/wwwroot/styles.css +++ b/src/DrawieSample.Browser/wwwroot/styles.css @@ -1,3 +1,5 @@ -body{ - margin:0; +html, body { + margin: 0; + padding: 0; + overflow: hidden; } \ No newline at end of file From 78cd1ea32bfb77bc20d72eced4e7c7f38756c845 Mon Sep 17 00:00:00 2001 From: flabbet Date: Thu, 6 Aug 2026 17:17:59 +0200 Subject: [PATCH 03/55] Updated skia --- .../Bridge/NativeObjectsImpl/IPaintImplementation.cs | 2 -- src/Drawie.Backend.Core/NativeTexture.cs | 5 +---- src/Drawie.Backend.Core/Surface.cs | 4 +--- src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs | 6 ------ src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj | 6 +++--- .../Implementations/SkiaCanvasImplementation.cs | 4 +++- .../Implementations/SkiaPaintImplementation.cs | 12 ------------ src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 2 +- 8 files changed, 9 insertions(+), 32 deletions(-) diff --git a/src/Drawie.Backend.Core/Bridge/NativeObjectsImpl/IPaintImplementation.cs b/src/Drawie.Backend.Core/Bridge/NativeObjectsImpl/IPaintImplementation.cs index 5465156..5f0dd3a 100644 --- a/src/Drawie.Backend.Core/Bridge/NativeObjectsImpl/IPaintImplementation.cs +++ b/src/Drawie.Backend.Core/Bridge/NativeObjectsImpl/IPaintImplementation.cs @@ -15,8 +15,6 @@ public interface IPaintImplementation public void SetColor(Paint paint, Color value); public BlendMode GetBlendMode(Paint paint); public void SetBlendMode(Paint paint, BlendMode value); - public FilterQuality GetFilterQuality(Paint paint); - public void SetFilterQuality(Paint paint, FilterQuality value); public bool GetIsAntiAliased(Paint paint); public void SetIsAntiAliased(Paint paint, bool value); public PaintStyle GetStyle(Paint paint); diff --git a/src/Drawie.Backend.Core/NativeTexture.cs b/src/Drawie.Backend.Core/NativeTexture.cs index d9b5a8e..7b3ba67 100644 --- a/src/Drawie.Backend.Core/NativeTexture.cs +++ b/src/Drawie.Backend.Core/NativeTexture.cs @@ -32,7 +32,7 @@ public class NativeTexture : IDisposable, ICloneable, IPixelsMap private HashSet lockDisposes = new(); private Paint nearestNeighborReplacingPaint = - new() { BlendMode = BlendMode.Src, FilterQuality = FilterQuality.None }; + new() { BlendMode = BlendMode.Src }; public NativeTexture(VecI size) : this(new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, ColorSpace.CreateSrgb()) @@ -209,8 +209,6 @@ public NativeTexture CreateResized(VecI newSize, ResizeMethod method) _ => FilterQuality.None }; - paint.FilterQuality = filterQuality; - newNativeTexture.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); return newNativeTexture; @@ -245,7 +243,6 @@ public NativeTexture Resize(VecI newSize, FilterQuality quality) using var ctx = EnsureContext(); using Image image = DrawingSurface.Snapshot(); using Paint paint = new(); - paint.FilterQuality = quality; NativeTexture newSurface = new(newSize); newSurface.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); diff --git a/src/Drawie.Backend.Core/Surface.cs b/src/Drawie.Backend.Core/Surface.cs index ca70337..3170452 100644 --- a/src/Drawie.Backend.Core/Surface.cs +++ b/src/Drawie.Backend.Core/Surface.cs @@ -26,7 +26,7 @@ public class Surface : IDisposable, ICloneable, IPixelsMap private Paint drawingPaint = new Paint() { BlendMode = BlendMode.Src }; private Paint nearestNeighborReplacingPaint = - new() { BlendMode = BlendMode.Src, FilterQuality = FilterQuality.None }; + new() { BlendMode = BlendMode.Src }; public ImageInfo ImageInfo { get; } @@ -136,8 +136,6 @@ public Surface Resize(VecI newSize, ResizeMethod resizeMethod) _ => FilterQuality.None }; - paint.FilterQuality = filterQuality; - newSurface.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); return newSurface; } diff --git a/src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs b/src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs index 41a49db..ec136c9 100644 --- a/src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs +++ b/src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs @@ -47,12 +47,6 @@ public StrokeJoin StrokeJoin set => DrawingBackendApi.Current.PaintImplementation.SetStrokeJoin(this, value); } - public FilterQuality FilterQuality - { - get => DrawingBackendApi.Current.PaintImplementation.GetFilterQuality(this); - set => DrawingBackendApi.Current.PaintImplementation.SetFilterQuality(this, value); - } - public bool IsAntiAliased { get => DrawingBackendApi.Current.PaintImplementation.GetIsAntiAliased(this); diff --git a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj index 68385a8..97f81c3 100644 --- a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj +++ b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj @@ -10,12 +10,12 @@ - - + + - + diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs index 60ff8a6..5bcfdb8 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs @@ -23,6 +23,8 @@ public sealed class SkiaCanvasImplementation : SkObjectImplementation, private readonly SkObjectImplementation _fontImpl; private readonly SkObjectImplementation _verticesImpl; + private static SKFont defaultFont = new SKFont(SKTypeface.Default); + public SkiaCanvasImplementation(SkObjectImplementation paintImpl, SkObjectImplementation imageImpl, SkObjectImplementation bitmapImpl, SkObjectImplementation pathImpl, SkObjectImplementation fontImpl, @@ -278,7 +280,7 @@ public void DrawBitmap(IntPtr objPtr, Bitmap bitmap, float x, float y, Paint? pa public void DrawText(IntPtr objPtr, string text, float x, float y, Paint paint) { - this[objPtr].DrawText(text, x, y, _paintImpl[paint.ObjectPointer]); + this[objPtr].DrawText(SKTextBlob.Create(text, defaultFont), x, y, _paintImpl[paint.ObjectPointer]); } public void DrawText(IntPtr objPtr, string text, float x, float y, Font font, Paint paint) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs index f23de1e..3ac838b 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs @@ -76,18 +76,6 @@ public void SetBlendMode(Paint paint, BlendMode value) skPaint.BlendMode = (SKBlendMode)value; } - public FilterQuality GetFilterQuality(Paint paint) - { - SKPaint skPaint = this[paint.ObjectPointer]; - return (FilterQuality)skPaint.FilterQuality; - } - - public void SetFilterQuality(Paint paint, FilterQuality value) - { - SKPaint skPaint = this[paint.ObjectPointer]; - skPaint.FilterQuality = (SKFilterQuality)value; - } - public bool GetIsAntiAliased(Paint paint) { SKPaint skPaint = this[paint.ObjectPointer]; diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index 9c07746..fa28a3e 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -209,7 +209,7 @@ public DrawingSurface CreateRenderSurface(VecI size, ITexture renderTexture, Sur SharingMode = texture.TargetSharingMode, }; - var surface = SKSurface.Create(GraphicsContext, new GRBackendRenderTarget(size.X, size.Y, 1, imageInfo), + var surface = SKSurface.Create(GraphicsContext, new GRBackendRenderTarget(size.X, size.Y, imageInfo), (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)); From 46638cc59ec0371b10adfc569eee13c92aca875e Mon Sep 17 00:00:00 2001 From: flabbet Date: Thu, 6 Aug 2026 17:27:30 +0200 Subject: [PATCH 04/55] Fix browser --- src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index fa28a3e..7934552 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -61,6 +61,9 @@ private set public SkiaDrawingBackend() { + SKColorSpace.CreateSrgb(); + SKColorSpace.CreateSrgbLinear(); + ColorImplementation = new SkiaColorImplementation(); SkiaImgDataImplementation dataImpl = new SkiaImgDataImplementation(); @@ -333,4 +336,4 @@ private void DisposeImpl(SkObjectImplementation impl) where T : SKObject impl.DisposeAll(); } } -} +} \ No newline at end of file From 8883b17f9d66ad5cdf7473675402ec644bc70f45 Mon Sep 17 00:00:00 2001 From: flabbet Date: Thu, 6 Aug 2026 17:48:55 +0200 Subject: [PATCH 05/55] Avalonia 12 --- src/Directory.Build.props | 2 +- .../Drawie.AvaloniaInterop.csproj | 10 +++++----- src/Drawie.AvaloniaInterop/Program.cs | 3 ++- src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 2 +- .../Controls/InteropControl.cs | 2 +- .../Drawie.Interop.Avalonia.Core.csproj | 2 +- .../Drawie.Interop.Avalonia.OpenGl.csproj | 2 ++ .../Drawie.Interop.Avalonia.Vulkan.csproj | 2 +- .../Drawie.Interop.Avalonia.csproj | 2 ++ 9 files changed, 16 insertions(+), 11 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 2d46b7c..6a91ef2 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,5 +1,5 @@ - 11.3.12-cibuild0004211-alpha + [12.1.1] \ No newline at end of file diff --git a/src/Drawie.AvaloniaInterop/Drawie.AvaloniaInterop.csproj b/src/Drawie.AvaloniaInterop/Drawie.AvaloniaInterop.csproj index aa6a770..2155765 100644 --- a/src/Drawie.AvaloniaInterop/Drawie.AvaloniaInterop.csproj +++ b/src/Drawie.AvaloniaInterop/Drawie.AvaloniaInterop.csproj @@ -11,12 +11,12 @@ - - - - + + + + - + diff --git a/src/Drawie.AvaloniaInterop/Program.cs b/src/Drawie.AvaloniaInterop/Program.cs index bc78b0c..aeba86a 100644 --- a/src/Drawie.AvaloniaInterop/Program.cs +++ b/src/Drawie.AvaloniaInterop/Program.cs @@ -2,6 +2,7 @@ using System; using System.Threading.Tasks; using Avalonia.Logging; +using Avalonia.OpenGL.Egl; using Avalonia.Vulkan; using Drawie.Interop.Avalonia.Vulkan; using Drawie.Interop.VulkanAvalonia; @@ -32,7 +33,7 @@ public static AppBuilder BuildAvaloniaApp() Win32RenderingMode.Vulkan }, }) - .With(new X11PlatformOptions() { RenderingMode = new[] { X11RenderingMode.Vulkan, X11RenderingMode.Glx } }) + .With(new X11PlatformOptions() { RenderingMode = new[] { X11RenderingMode.Egl, X11RenderingMode.Glx } }) .WithDrawie() .LogToTrace(LogEventLevel.Debug, "Vulkan"); } \ No newline at end of file diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index 7934552..a53b7f0 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -171,7 +171,7 @@ private void SetupOpenGl(IOpenGlContext openGlContext) private void SetupAngleOpenGl(IOpenGlContext openGlContext) { - GRGlInterface glInterface = GRGlInterface.CreateAngle(openGlContext.GetGlInterface); + GRGlInterface glInterface = GRGlInterface.Create(openGlContext.GetGlInterface); GraphicsContext = GRContext.CreateGl(glInterface, new GRContextOptions() { AvoidStencilBuffers = true diff --git a/src/Drawie.Interop.Avalonia.Core/Controls/InteropControl.cs b/src/Drawie.Interop.Avalonia.Core/Controls/InteropControl.cs index 7703bf6..708c612 100644 --- a/src/Drawie.Interop.Avalonia.Core/Controls/InteropControl.cs +++ b/src/Drawie.Interop.Avalonia.Core/Controls/InteropControl.cs @@ -124,7 +124,7 @@ public override void Render(DrawingContext context) void UpdateFrame() { updateQueued = false; - var root = this.GetVisualRoot(); + var root = this.VisualRoot; if (root == null) { return; diff --git a/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj b/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj index cf9bae4..9175508 100644 --- a/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj +++ b/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj b/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj index 2e64d8d..5eca195 100644 --- a/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj +++ b/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj @@ -4,6 +4,8 @@ net10.0 enable enable + true + true diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj index 7d45859..1357e41 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj +++ b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj @@ -23,6 +23,6 @@ - + diff --git a/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj b/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj index 22e872e..e18b5f9 100644 --- a/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj +++ b/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj @@ -4,6 +4,8 @@ net10.0 enable enable + true + true From 23a4ab3af3641a7a098b0f551817219d538cd1ac Mon Sep 17 00:00:00 2001 From: flabbet Date: Thu, 6 Aug 2026 20:37:16 +0200 Subject: [PATCH 06/55] Added ImGui and layers concept --- src/Drawie.Backend.Core/IRenderable.cs | 8 +++ .../Drawie.Layer.UI.ImGui.csproj | 17 +++++ src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs | 63 +++++++++++++++++++ .../OpenGlWindowRenderApi.cs | 5 ++ src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs | 2 +- .../WebGlWindowRenderApi.cs | 7 ++- .../IOpenGlWindowRenderApi.cs | 2 +- src/Drawie.Windowing.Browser/BrowserWindow.cs | 54 ++++++++++++++-- .../Drawie.Windowing.Browser.csproj | 1 + src/Drawie.Windowing.Glfw/GlfwWindow.cs | 53 +++++++++++++--- src/Drawie.Windowing/ILayer.cs | 6 ++ src/Drawie.Windowing/IWindow.cs | 4 ++ src/Drawie.Windowing/Input/InputController.cs | 5 +- src/Drawie.Windowing/RenderOrder.cs | 13 ++++ src/Drawie.sln | 9 +++ src/Drawie.sln.DotSettings.user | 1 + src/Drawie2Sample/Drawie2Sample.csproj | 1 + src/Drawie2Sample/Drawie2SampleApp.cs | 11 +++- 18 files changed, 241 insertions(+), 21 deletions(-) create mode 100644 src/Drawie.Backend.Core/IRenderable.cs create mode 100644 src/Drawie.Layer.UI.ImGui/Drawie.Layer.UI.ImGui.csproj create mode 100644 src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs create mode 100644 src/Drawie.Windowing/ILayer.cs create mode 100644 src/Drawie.Windowing/RenderOrder.cs diff --git a/src/Drawie.Backend.Core/IRenderable.cs b/src/Drawie.Backend.Core/IRenderable.cs new file mode 100644 index 0000000..3a53eab --- /dev/null +++ b/src/Drawie.Backend.Core/IRenderable.cs @@ -0,0 +1,8 @@ +using Drawie.Backend.Core.Surfaces; + +namespace Drawie.Backend.Core; + +public interface IRenderable +{ + public void Draw(Canvas canvas); +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.ImGui/Drawie.Layer.UI.ImGui.csproj b/src/Drawie.Layer.UI.ImGui/Drawie.Layer.UI.ImGui.csproj new file mode 100644 index 0000000..e9b74a9 --- /dev/null +++ b/src/Drawie.Layer.UI.ImGui/Drawie.Layer.UI.ImGui.csproj @@ -0,0 +1,17 @@ + + + + net10.0 + enable + enable + + + + + + + + + + + diff --git a/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs b/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs new file mode 100644 index 0000000..da0558b --- /dev/null +++ b/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs @@ -0,0 +1,63 @@ +using Drawie.RenderApi; +using Drawie.Rendering; +using Drawie.Windowing; +using Silk.NET.Core.Contexts; +using Silk.NET.Input; +using Silk.NET.OpenGL; +using Silk.NET.OpenGL.Extensions.ImGui; +using Silk.NET.Windowing; +using IWindow = Drawie.Windowing.IWindow; + +namespace Drawie.Layer.UI.ImGui; + +public class ImGuiLayer : ILayer +{ + public Action Render { get; set; } + private IWindow window; + private IOpenGlWindowRenderApi renderApi; + + private ImGuiController _controller; + + public ImGuiLayer(Action render) + { + Render = render; + } + + public void Initialize(IWindow window) + { + if (window == null) + { + throw new ArgumentNullException(nameof(window)); + } + + if (window.RenderApi is not IOpenGlWindowRenderApi openGlRenderApi) + { + throw new InvalidOperationException("ImGui only supports OpenGL render APIs."); + } + + renderApi = openGlRenderApi; + this.window = window; + + OnLoaded(); + window.SubscribeToRender("ImGui.Update", "Init", OnEarlyRender); + window.SubscribeToRender("ImGui.Render", "Render", OnRender); + } + + private void OnRender(double dt) + { + Render?.Invoke(dt); + _controller.Render(); + } + + private void OnEarlyRender(double dt) + { + _controller.Update((float)dt); + } + + private void OnLoaded() + { + _controller = + new ImGuiController(new GL(new LamdaNativeContext(renderApi.GetGlInterface())), + window.NativeWindow as IView, window.InputController.NativeInputController as IInputContext); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs b/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs index d109087..702b2d9 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs @@ -9,6 +9,11 @@ public class OpenGlWindowRenderApi : IOpenGlWindowRenderApi public event Action? FramebufferResized; public ITexture RenderTexture => texture; + Func IOpenGlWindowRenderApi.GetGlInterface() + { + return name => Context.GetProcAddress(name); + } + public IGLContext Context { get; private set; } private GL Api { get; set; } diff --git a/src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs b/src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs index e743346..daca214 100644 --- a/src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs +++ b/src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs @@ -1,6 +1,6 @@ using Drawie.JSInterop; -namespace Drawie.RenderApi.Html5Canvas; +namespace Drawie.RenderApi.Web.Common; public class HtmlCanvas() : HtmlObject("canvas"), ICanvasTexture { diff --git a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs b/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs index 0d2eae4..a82bf96 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs @@ -1,6 +1,6 @@ using Drawie.JSInterop; using Drawie.Numerics; -using Drawie.RenderApi.Html5Canvas; +using Drawie.RenderApi.Web.Common; using Drawie.RenderApi.WebGl.Enums; using Drawie.RenderApi.WebGl.Exceptions; @@ -26,8 +26,9 @@ public class WebGlWindowRenderApi : IWindowRenderApi public void CreateInstance(object contextObject, VecI framebufferSize) { - JSRuntime.InterceptGLObject(); - canvasObject = JSRuntime.CreateElement(); + if(contextObject is not HtmlCanvas canvas) throw new ArgumentException("Canvas not found", nameof(contextObject)); + + canvasObject = canvas; CanvasId = canvasObject.Id; canvasObject.SetAttribute("width", framebufferSize.X.ToString()); canvasObject.SetAttribute("height", framebufferSize.Y.ToString()); diff --git a/src/Drawie.RenderApi/IOpenGlWindowRenderApi.cs b/src/Drawie.RenderApi/IOpenGlWindowRenderApi.cs index 9f30f3d..f5d6d95 100644 --- a/src/Drawie.RenderApi/IOpenGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi/IOpenGlWindowRenderApi.cs @@ -2,5 +2,5 @@ public interface IOpenGlWindowRenderApi : IWindowRenderApi { - + Func GetGlInterface(); } diff --git a/src/Drawie.Windowing.Browser/BrowserWindow.cs b/src/Drawie.Windowing.Browser/BrowserWindow.cs index 0fe9746..f7593a4 100644 --- a/src/Drawie.Windowing.Browser/BrowserWindow.cs +++ b/src/Drawie.Windowing.Browser/BrowserWindow.cs @@ -1,7 +1,9 @@ using Drawie.Backend.Core; using Drawie.Backend.Core.Bridge; +using Drawie.JSInterop; using Drawie.Numerics; using Drawie.RenderApi; +using Drawie.RenderApi.Web.Common; using Drawie.Rendering; using Drawie.Windowing.Browser.Input; using Drawie.Windowing.Input; @@ -45,17 +47,45 @@ public bool IsVisible public event Action? Update; public event Action? Render; + public object NativeWindow => canvas; + public event Action? Loaded; + private Texture renderTexture; private VecI? pendingResize = null; private GraphicsStore store; + private HtmlCanvas canvas; + + private List layers = new List(); + private List renderStack = new List(); public void Initialize() { - RenderApi.CreateInstance(null, UsableWindowSize); + JSRuntime.InterceptGLObject(); + var canvasObject = JSRuntime.CreateElement(); + canvas = canvasObject; + RenderApi.CreateInstance(canvasObject, UsableWindowSize); RenderApi.FramebufferResized += FramebufferResized; - InputController = new InputController(new [] { new BrowserKeyboard() }, []); + InputController = new InputController(new [] { new BrowserKeyboard() }, [], null); store = new GraphicsStore(RenderApi.GraphicsContext); + + renderStack.Add(new RenderOrder("Init", _ => { })); + renderStack.Add(new RenderOrder("Render", RenderContent)); + renderStack.Add(new RenderOrder("RenderApi", RenderApi.Render)); + } + + public void AddLayer(ILayer layer) + { + layers.Add(layer); + } + + public void SubscribeToRender(string name, string renderAfter, Action render) + { + var foundRenderAfter = renderStack.FindIndex(r => r.Name == renderAfter); + if (foundRenderAfter != -1) + { + renderStack.Insert(foundRenderAfter + 1, new RenderOrder(name, render)); + } } private void FramebufferResized() @@ -68,6 +98,12 @@ public void Show() renderTexture = CreateRenderTexture(); OnRender(0); BrowserInterop.SubscribeWindowResize(OnWindowResized); + Loaded?.Invoke(); + + foreach (var layer in layers) + { + layer.Initialize(this); + } } private void OnRender(double dt) @@ -89,6 +125,16 @@ private void OnRender(double dt) pendingResize = null; } + foreach (var layer in renderStack) + { + layer.Render(dt); + } + + BrowserInterop.RequestAnimationFrame(OnRender); + } + + private void RenderContent(double dt) + { RenderApi.PrepareTextureToWrite(); RenderingContext ctx = new RenderingContext(RenderApi.GraphicsContext); var renderingScope = ctx.Open(); @@ -98,14 +144,12 @@ private void OnRender(double dt) fbo.Dispose(); renderingScope.Dispose(); ctx.Dispose(); - RenderApi.Render(dt); - BrowserInterop.RequestAnimationFrame(OnRender); } public void Close() { } - + private void OnWindowResized(int width, int height) { RenderApi?.UpdateFramebufferSize(width, height); diff --git a/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj b/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj index e788a80..b0233c8 100644 --- a/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj +++ b/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj @@ -9,6 +9,7 @@ + diff --git a/src/Drawie.Windowing.Glfw/GlfwWindow.cs b/src/Drawie.Windowing.Glfw/GlfwWindow.cs index 460c1bb..d5b8b22 100644 --- a/src/Drawie.Windowing.Glfw/GlfwWindow.cs +++ b/src/Drawie.Windowing.Glfw/GlfwWindow.cs @@ -6,12 +6,14 @@ using Drawie.Silk.Extensions; using Drawie.Silk.Input; using Drawie.Skia; +using Drawie.Windowing; using Drawie.Windowing.Input; using Silk.NET.Input; using Silk.NET.Maths; using Silk.NET.Windowing; using SkiaSharp; using IKeyboard = Drawie.Windowing.Input.IKeyboard; +using IWindow = Silk.NET.Windowing.IWindow; namespace Drawie.Silk; @@ -55,11 +57,11 @@ public bool IsVisible public bool ShowOnTop { get => window?.TopMost ?? false; - set - { - if (window != null) window.TopMost = value; - } + set => window?.TopMost = value; } + + public object NativeWindow => window; + public event Action? Loaded; public event Action Update; public event Action Render; @@ -67,6 +69,9 @@ public bool ShowOnTop private SKSurface? surface; private Texture renderTexture; private bool initialized; + + private List layers = new List(); + private List renderStack = new List(); public GlfwWindow(string name, VecI size, IWindowRenderApi renderApi) { @@ -76,9 +81,15 @@ public GlfwWindow(string name, VecI size, IWindowRenderApi renderApi) Size = size.ToVector2DInt(), API = renderApi is IVulkanWindowRenderApi ? GraphicsAPI.DefaultVulkan : GraphicsAPI.Default }); + window.Load += () => Loaded?.Invoke(); RenderApi = renderApi; + + renderStack.Add(new RenderOrder("Init", _ => { })); + renderStack.Add(new RenderOrder("Render", RenderContent)); + renderStack.Add(new RenderOrder("RenderApi", RenderApi.Render)); } + public void Initialize() { if (initialized) return; @@ -107,12 +118,19 @@ public void Initialize() } store = new GraphicsStore(RenderApi.GraphicsContext); + + foreach (var layer in layers) + { + layer.Initialize(this); + } + initialized = true; } private void InitInput() { var input = window.CreateInput(); + GlfwKeyboard[] keyboards = new GlfwKeyboard[input.Keyboards.Count]; for (var i = 0; i < input.Keyboards.Count; i++) { @@ -129,7 +147,7 @@ private void InitInput() pointers[i] = new GlfwPointer(pointer); } - InputController = new InputController(keyboards, pointers); + InputController = new InputController(keyboards, pointers, input); } public void Show() @@ -147,7 +165,6 @@ public void Show() CreateRenderTarget(window.FramebufferSize.ToVecI(), RenderApi.RenderTexture); window.Render += OnRender; - window.Render += RenderApi.Render; window.Update += OnUpdate; isRunning = true; @@ -179,6 +196,14 @@ private void OnUpdate(double dt) } private void OnRender(double dt) + { + foreach (var layer in renderStack) + { + layer.Render(dt); + } + } + + private void RenderContent(double dt) { RenderApi.PrepareTextureToWrite(); RenderingContext ctx = new RenderingContext(RenderApi.GraphicsContext); @@ -198,4 +223,18 @@ public void Close() window?.Close(); window?.Dispose(); } -} + + public void AddLayer(ILayer layer) + { + layers.Add(layer); + } + + public void SubscribeToRender(string name, string renderAfter, Action render) + { + var foundRenderAfter = renderStack.FindIndex(r => r.Name == renderAfter); + if (foundRenderAfter != -1) + { + renderStack.Insert(foundRenderAfter + 1, new RenderOrder(name, render)); + } + } +} \ No newline at end of file diff --git a/src/Drawie.Windowing/ILayer.cs b/src/Drawie.Windowing/ILayer.cs new file mode 100644 index 0000000..5f982fd --- /dev/null +++ b/src/Drawie.Windowing/ILayer.cs @@ -0,0 +1,6 @@ +namespace Drawie.Windowing; + +public interface ILayer +{ + public void Initialize(IWindow window); +} \ No newline at end of file diff --git a/src/Drawie.Windowing/IWindow.cs b/src/Drawie.Windowing/IWindow.cs index 4bfcb52..0f76f5a 100644 --- a/src/Drawie.Windowing/IWindow.cs +++ b/src/Drawie.Windowing/IWindow.cs @@ -24,4 +24,8 @@ public interface IWindow public void Initialize(); public void Show(); public void Close(); + public void AddLayer(ILayer layer); + public object NativeWindow { get; } + public event Action Loaded; + public void SubscribeToRender(string name, string renderAfter, Action render); } diff --git a/src/Drawie.Windowing/Input/InputController.cs b/src/Drawie.Windowing/Input/InputController.cs index 55bfe89..eb3bc06 100644 --- a/src/Drawie.Windowing/Input/InputController.cs +++ b/src/Drawie.Windowing/Input/InputController.cs @@ -8,9 +8,12 @@ public class InputController public IReadOnlyCollection Pointers { get; } - public InputController(IEnumerable keyboards, IEnumerable pointers) + public object NativeInputController { get; } + + public InputController(IEnumerable keyboards, IEnumerable pointers, object nativeInputController) { Keyboards = keyboards.ToList().AsReadOnly(); Pointers = pointers.ToList().AsReadOnly(); + NativeInputController = nativeInputController; } } \ No newline at end of file diff --git a/src/Drawie.Windowing/RenderOrder.cs b/src/Drawie.Windowing/RenderOrder.cs new file mode 100644 index 0000000..9523c9b --- /dev/null +++ b/src/Drawie.Windowing/RenderOrder.cs @@ -0,0 +1,13 @@ +namespace Drawie.Windowing; + +public class RenderOrder +{ + public string Name { get; } + public Action Render { get; } + + public RenderOrder(string name, Action render) + { + Name = name; + Render = render; + } +} \ No newline at end of file diff --git a/src/Drawie.sln b/src/Drawie.sln index 01dc99e..0013b76 100644 --- a/src/Drawie.sln +++ b/src/Drawie.sln @@ -65,6 +65,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Rendering", "Drawie. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie2Sample", "Drawie2Sample\Drawie2Sample.csproj", "{A9DB4D66-CD25-40E9-8F72-C5341D6C6564}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Layers", "Layers", "{8F709A50-C8C2-46FC-8355-A96701FFC359}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.UI.ImGui", "Drawie.Layer.UI.ImGui\Drawie.Layer.UI.ImGui.csproj", "{7CACCC0C-044C-4ACE-B018-518F8D223D4A}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -178,6 +182,10 @@ Global {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Debug|Any CPU.Build.0 = Debug|Any CPU {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Release|Any CPU.ActiveCfg = Release|Any CPU {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Release|Any CPU.Build.0 = Release|Any CPU + {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {645AF54D-D58F-492E-A2A9-12F86EA8C00A} = {239DB1B4-E66F-444A-87DA-B19775F40974} @@ -200,5 +208,6 @@ Global {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} {2D889347-CF94-4D67-AC4A-742AD1F1201D} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} {A9DB4D66-CD25-40E9-8F72-C5341D6C6564} = {239DB1B4-E66F-444A-87DA-B19775F40974} + {7CACCC0C-044C-4ACE-B018-518F8D223D4A} = {8F709A50-C8C2-46FC-8355-A96701FFC359} EndGlobalSection EndGlobal diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index c8c21f2..28cf6b4 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -22,6 +22,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/Drawie2Sample/Drawie2Sample.csproj b/src/Drawie2Sample/Drawie2Sample.csproj index 1b01305..29137a9 100644 --- a/src/Drawie2Sample/Drawie2Sample.csproj +++ b/src/Drawie2Sample/Drawie2Sample.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index d09c8ae..a337227 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -4,6 +4,7 @@ using Drawie.Backend.Core.ColorsImpl.Paintables; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Core.Text; +using Drawie.Layer.UI.ImGui; using Drawie.Numerics; using Drawie.Rendering; using Drawie.Windowing; @@ -17,17 +18,21 @@ public class Drawie2SampleApp : DrawieApp public override IWindow CreateMainWindow() { - window = Engine.WindowingPlatform.CreateWindow("Drawie 2 Sample", new VecI(800, 600)); + window = Engine.WindowingPlatform.CreateWindow("Drawie 2 Sample", new VecI(1920, 1080)); + window.AddLayer(new ImGuiLayer(RenderImGui)); return window; } + private void RenderImGui(double dt) + { + ImGuiNET.ImGui.ShowDemoWindow(); + } + protected override void OnInitialize() { window.Render += (targetTexture, deltaTime) => { targetTexture.Clear(); - targetTexture.DrawRectangle(0, 0, targetTexture.Size.X, targetTexture.Size.Y, - new ColorPaintable(Colors.Green)); using Font defaultFont = Font.CreateDefault(); Paintable color = new ColorPaintable(Colors.White); From 8c12eca5d6438bb042804444d745424d0a41a870 Mon Sep 17 00:00:00 2001 From: flabbet Date: Fri, 7 Aug 2026 14:01:18 +0200 Subject: [PATCH 07/55] Sample 3D test --- src/Drawie.Layer.3D.Test/Core/BufferObject.cs | 29 ++ src/Drawie.Layer.3D.Test/Core/Camera.cs | 65 +++++ src/Drawie.Layer.3D.Test/Core/NativeObject.cs | 17 ++ src/Drawie.Layer.3D.Test/Core/ShaderLoader.cs | 20 ++ src/Drawie.Layer.3D.Test/Core/Transform.cs | 73 +++++ .../Core/VertexArrayObject.cs | 34 +++ .../Drawie.Layer.3D.Test.csproj | 31 ++ src/Drawie.Layer.3D.Test/Geometry/AABB.cs | 28 ++ .../Geometry/GeometryData.cs | 13 + .../Geometry/GeometryObject.cs | 23 ++ .../Geometry/Primitives/Cube.cs | 126 ++++++++ .../Geometry/Primitives/Line.cs | 55 ++++ .../Helpers/MathHelper.cs | 9 + .../Images/dancing-dog.gif | Bin 0 -> 227225 bytes src/Drawie.Layer.3D.Test/Images/silkBoxed.png | Bin 0 -> 11484 bytes .../Images/silkSpecular.png | Bin 0 -> 12099 bytes src/Drawie.Layer.3D.Test/Images/texture.png | Bin 0 -> 2826 bytes src/Drawie.Layer.3D.Test/Misc/Gif.cs | 51 ++++ .../Optimization/MaterialBatcher.cs | 67 +++++ src/Drawie.Layer.3D.Test/Rendering/Frustum.cs | 32 +++ .../Rendering/Material.cs | 125 ++++++++ src/Drawie.Layer.3D.Test/Rendering/Plane.cs | 20 ++ src/Drawie.Layer.3D.Test/Rendering/Shader.cs | 94 ++++++ .../Rendering/ShaderProperty.cs | 29 ++ src/Drawie.Layer.3D.Test/Rendering/Texture.cs | 70 +++++ .../Shaders/BasicVertexShader.glsl | 17 ++ .../Shaders/LitShader.glsl | 43 +++ .../Shaders/UnlitShader.glsl | 15 + .../Shaders/VertexShader.glsl | 26 ++ src/Drawie.Layer.3D.Test/ThreeDTest.cs | 271 ++++++++++++++++++ .../OpenGlGraphicsContext.cs | 4 +- src/Drawie.Windowing.Browser/BrowserWindow.cs | 2 + src/Drawie.Windowing.Glfw/GlfwWindow.cs | 7 + src/Drawie.Windowing/ILayer.cs | 4 +- src/Drawie.Windowing/IWindow.cs | 1 + src/Drawie.Windowing/Input/InputController.cs | 4 +- src/Drawie.sln | 7 + src/Drawie2Sample/Drawie2Sample.csproj | 1 + src/Drawie2Sample/Drawie2SampleApp.cs | 2 + 39 files changed, 1411 insertions(+), 4 deletions(-) create mode 100644 src/Drawie.Layer.3D.Test/Core/BufferObject.cs create mode 100644 src/Drawie.Layer.3D.Test/Core/Camera.cs create mode 100644 src/Drawie.Layer.3D.Test/Core/NativeObject.cs create mode 100644 src/Drawie.Layer.3D.Test/Core/ShaderLoader.cs create mode 100644 src/Drawie.Layer.3D.Test/Core/Transform.cs create mode 100644 src/Drawie.Layer.3D.Test/Core/VertexArrayObject.cs create mode 100644 src/Drawie.Layer.3D.Test/Drawie.Layer.3D.Test.csproj create mode 100644 src/Drawie.Layer.3D.Test/Geometry/AABB.cs create mode 100644 src/Drawie.Layer.3D.Test/Geometry/GeometryData.cs create mode 100644 src/Drawie.Layer.3D.Test/Geometry/GeometryObject.cs create mode 100644 src/Drawie.Layer.3D.Test/Geometry/Primitives/Cube.cs create mode 100644 src/Drawie.Layer.3D.Test/Geometry/Primitives/Line.cs create mode 100644 src/Drawie.Layer.3D.Test/Helpers/MathHelper.cs create mode 100644 src/Drawie.Layer.3D.Test/Images/dancing-dog.gif create mode 100644 src/Drawie.Layer.3D.Test/Images/silkBoxed.png create mode 100644 src/Drawie.Layer.3D.Test/Images/silkSpecular.png create mode 100644 src/Drawie.Layer.3D.Test/Images/texture.png create mode 100644 src/Drawie.Layer.3D.Test/Misc/Gif.cs create mode 100644 src/Drawie.Layer.3D.Test/Optimization/MaterialBatcher.cs create mode 100644 src/Drawie.Layer.3D.Test/Rendering/Frustum.cs create mode 100644 src/Drawie.Layer.3D.Test/Rendering/Material.cs create mode 100644 src/Drawie.Layer.3D.Test/Rendering/Plane.cs create mode 100644 src/Drawie.Layer.3D.Test/Rendering/Shader.cs create mode 100644 src/Drawie.Layer.3D.Test/Rendering/ShaderProperty.cs create mode 100644 src/Drawie.Layer.3D.Test/Rendering/Texture.cs create mode 100644 src/Drawie.Layer.3D.Test/Shaders/BasicVertexShader.glsl create mode 100644 src/Drawie.Layer.3D.Test/Shaders/LitShader.glsl create mode 100644 src/Drawie.Layer.3D.Test/Shaders/UnlitShader.glsl create mode 100644 src/Drawie.Layer.3D.Test/Shaders/VertexShader.glsl create mode 100644 src/Drawie.Layer.3D.Test/ThreeDTest.cs diff --git a/src/Drawie.Layer.3D.Test/Core/BufferObject.cs b/src/Drawie.Layer.3D.Test/Core/BufferObject.cs new file mode 100644 index 0000000..d42aa85 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Core/BufferObject.cs @@ -0,0 +1,29 @@ +using Silk.NET.OpenGL; + +namespace SilkNet; + +public sealed class BufferObject : NativeObject where TDataType : unmanaged +{ + private BufferTargetARB _bufferType; + + public unsafe BufferObject(GL glContext, Span data, BufferTargetARB bufferType) : base(glContext, glContext.GenBuffer()) + { + _bufferType = bufferType; + + Bind(); + fixed (void* d = data) + { + glContext.BufferData(bufferType, (nuint)(data.Length * sizeof(TDataType)), d, GLEnum.StaticDraw); + } + } + + public void Bind() + { + GlContext.BindBuffer(_bufferType, Handle); + } + + public override void Dispose() + { + GlContext.DeleteBuffer(Handle); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Core/Camera.cs b/src/Drawie.Layer.3D.Test/Core/Camera.cs new file mode 100644 index 0000000..ce041d3 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Core/Camera.cs @@ -0,0 +1,65 @@ +using System.Numerics; +using SilkNet.Rendering; + +namespace SilkNet; + +public class Camera +{ + public Vector3 Position { get; set; } + public Vector3 Forward { get; private set; } + public Vector3 Up { get; private set; } + public Vector3 Right { get; private set; } + public float AspectRatio { get; set; } + + public float Yaw { get; set; } = -90f; + public float Pitch { get; set; } + public Frustum Frustum { get; private set; } + + private float _zoom = 45f; + public float Zoom + { + get => _zoom; + set => _zoom = Math.Clamp(Zoom - value, 1f, 45f); + } + + public Matrix4x4 ViewMatrix => Matrix4x4.CreateLookAt(Position, Position + Forward, Up); + + public Matrix4x4 ProjectionMatrix => + Matrix4x4.CreatePerspectiveFieldOfView(MathHelper.DegreesToRadians(Zoom), AspectRatio, 0.1f, 100f); + + public Quaternion Rotation => Quaternion.CreateFromYawPitchRoll(-MathHelper.DegreesToRadians(Yaw), + MathHelper.DegreesToRadians(Pitch), 0f); + + public Camera(Vector3 position, Vector3 forward, Vector3 up, float aspectRatio) + { + Position = position; + Forward = forward; + Up = up; + AspectRatio = aspectRatio; + SetDirection(0, 0); + Frustum = new Frustum(this, MathHelper.DegreesToRadians(Zoom), 0.1f, 100f); + } + + public void RecalculateFrustum() + { + Frustum = new Frustum(this, MathHelper.DegreesToRadians(Zoom), 0.1f, 100f); + } + + public void SetDirection(float xOffset, float yOffset) + { + Yaw += xOffset; + Pitch -= yOffset; + + Pitch = Math.Clamp(Pitch, -89f, 89f); + + var cameraDirection = Vector3.Zero; + cameraDirection.X = MathF.Cos(MathHelper.DegreesToRadians(Yaw)) * MathF.Cos(MathHelper.DegreesToRadians(Pitch)); + cameraDirection.Y = MathF.Sin(MathHelper.DegreesToRadians(Pitch)); + cameraDirection.Z = MathF.Sin(MathHelper.DegreesToRadians(Yaw)) * MathF.Cos(MathHelper.DegreesToRadians(Pitch)); + cameraDirection = Vector3.Normalize(cameraDirection); + + Forward = cameraDirection; + Right = Vector3.Normalize(Vector3.Cross(Forward, Vector3.UnitY)); + Up = Vector3.Normalize(Vector3.Cross(Right, cameraDirection)); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Core/NativeObject.cs b/src/Drawie.Layer.3D.Test/Core/NativeObject.cs new file mode 100644 index 0000000..2bfbdfe --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Core/NativeObject.cs @@ -0,0 +1,17 @@ +using Silk.NET.OpenGL; + +namespace SilkNet; + +public abstract class NativeObject : IDisposable +{ + public uint Handle { get; } + protected GL GlContext { get; } + + public NativeObject(GL glContext, uint handle) + { + GlContext = glContext; + Handle = handle; + } + + public abstract void Dispose(); +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Core/ShaderLoader.cs b/src/Drawie.Layer.3D.Test/Core/ShaderLoader.cs new file mode 100644 index 0000000..83cba2d --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Core/ShaderLoader.cs @@ -0,0 +1,20 @@ +namespace SilkNet; + +public static class ShaderLoader +{ + public static string VertexShader; + public static string UnlitShader; + public static string LitShader; + public static string BasicVertexShader; + + public static string LoadRaw(string name) + { + string filePath = Path.Join("Shaders", $"{name}.glsl"); + if (File.Exists(filePath)) + { + return File.ReadAllText(filePath); + } + + throw new FileNotFoundException($"File {filePath} not found."); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Core/Transform.cs b/src/Drawie.Layer.3D.Test/Core/Transform.cs new file mode 100644 index 0000000..70aba94 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Core/Transform.cs @@ -0,0 +1,73 @@ +using System.Numerics; + +namespace SilkNet; + +public class Transform +{ + private Vector3 _position = Vector3.Zero; + private float _scale = 1f; + private Quaternion _rotation = Quaternion.Identity; + private Matrix4x4 _cachedMatrix = Matrix4x4.Identity; + + private bool _isDirty = true; + + public Vector3 Position + { + get => _position; + set + { + _position = value; + _isDirty = true; + } + } + + public Vector3 Right + { + get => Vector3.Transform(Vector3.UnitX, _rotation); + } + + public Vector3 Up + { + get => Vector3.Transform(Vector3.UnitY, _rotation); + } + + public Vector3 Forward + { + get => Vector3.Transform(Vector3.UnitZ, _rotation); + } + + public float Scale + { + get => _scale; + set + { + _scale = value; + _isDirty = true; + } + } + + public Quaternion Rotation + { + get => _rotation; + set + { + _rotation = value; + _isDirty = true; + } + } + + public Matrix4x4 ViewMatrix + { + get + { + if (_isDirty) + { + _cachedMatrix = Matrix4x4.Identity * Matrix4x4.CreateFromQuaternion(Rotation) * Matrix4x4.CreateScale(Scale) * + Matrix4x4.CreateTranslation(Position); + _isDirty = false; + } + + return _cachedMatrix; + } + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Core/VertexArrayObject.cs b/src/Drawie.Layer.3D.Test/Core/VertexArrayObject.cs new file mode 100644 index 0000000..65484d1 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Core/VertexArrayObject.cs @@ -0,0 +1,34 @@ +using Silk.NET.OpenGL; + +namespace SilkNet; + +public sealed class VertexArrayObject : NativeObject + where TVertexType : unmanaged + where TIndexType : unmanaged +{ + + public VertexArrayObject(GL glContext, BufferObject vbo, BufferObject ebo) : base(glContext, glContext.GenVertexArray()) + { + Bind(); + vbo.Bind(); + ebo.Bind(); + } + + public unsafe void VertexAttributePointer(uint index, int count, VertexAttribPointerType type, uint vertexSize, + int offset) + { + int vTypeSize = sizeof(TVertexType); + GlContext.VertexAttribPointer(index, count, type, false, vertexSize * (uint) vTypeSize, (void*) (offset * vTypeSize)); + GlContext.EnableVertexAttribArray(index); + } + + public void Bind() + { + GlContext.BindVertexArray(Handle); + } + + public override void Dispose() + { + GlContext.DeleteVertexArray(Handle); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Drawie.Layer.3D.Test.csproj b/src/Drawie.Layer.3D.Test/Drawie.Layer.3D.Test.csproj new file mode 100644 index 0000000..d8a4a9e --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Drawie.Layer.3D.Test.csproj @@ -0,0 +1,31 @@ + + + + net10.0 + Drawie.Layer.ThreeD.Test + enable + enable + true + + + + + + + + + + + + + + + PreserveNewest + + + + PreserveNewest + + + + diff --git a/src/Drawie.Layer.3D.Test/Geometry/AABB.cs b/src/Drawie.Layer.3D.Test/Geometry/AABB.cs new file mode 100644 index 0000000..f57b138 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Geometry/AABB.cs @@ -0,0 +1,28 @@ +using System.Numerics; +using Plane = SilkNet.Rendering.Plane; + +namespace SilkNet.Geometry; + +public struct AABB +{ + public Vector3 Center { get; set; } + public Vector3 Extents { get; set; } + + public AABB(Vector3 min, Vector3 max) + { + Center = (min + max) * 0.5f; + Extents = new Vector3(max.X - Center.X, max.Y - Center.Y, max.Z - Center.Z); + } + + public AABB(Vector3 position, float x, float y, float z) + { + Center = position; + Extents = new Vector3(x, y, z); + } + + public bool IsOnOrForwardPlane(Plane plane) + { + float r = Extents.X * Math.Abs(plane.Normal.X) + Extents.Y * Math.Abs(plane.Normal.Y) + Extents.Z * Math.Abs(plane.Normal.Z); + return -r <= plane.GetSignedDistance(Center); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Geometry/GeometryData.cs b/src/Drawie.Layer.3D.Test/Geometry/GeometryData.cs new file mode 100644 index 0000000..afac2d0 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Geometry/GeometryData.cs @@ -0,0 +1,13 @@ +namespace SilkNet.Geometry; + +public class GeometryData +{ + public float[] Vertices { get; set; } + public uint [] Indices { get; set; } + + public GeometryData(float[] vertices, uint[] indices) + { + Vertices = vertices.ToArray(); + Indices = indices.ToArray(); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Geometry/GeometryObject.cs b/src/Drawie.Layer.3D.Test/Geometry/GeometryObject.cs new file mode 100644 index 0000000..77435f3 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Geometry/GeometryObject.cs @@ -0,0 +1,23 @@ +using Silk.NET.OpenGL; +using SilkNet.Rendering; + +namespace SilkNet.Geometry; + +public abstract class GeometryObject : IDisposable +{ + public Transform Transform { get; set; } = new Transform(); + public int MaterialIndex { get; set; } = -1; + public GeometryData GeometryData { get; } + + public abstract void OpenDrawingContext(); + public abstract void Draw(GL api); + public abstract bool IsInFrustum(Frustum frustum, Transform transform); + + public GeometryObject(GeometryData geometryData, int materialIndex) + { + GeometryData = geometryData; + MaterialIndex = materialIndex; + } + + public abstract void Dispose(); +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Geometry/Primitives/Cube.cs b/src/Drawie.Layer.3D.Test/Geometry/Primitives/Cube.cs new file mode 100644 index 0000000..c5c1bcf --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Geometry/Primitives/Cube.cs @@ -0,0 +1,126 @@ +using System.Numerics; +using Drawie.Layer.ThreeD.Test; +using Silk.NET.OpenGL; +using SilkNet.Rendering; + +namespace SilkNet.Geometry.Primitives; + +public class Cube : GeometryObject +{ + private static readonly float[] Vertices = new[] + { + //X Y Z Normals U V + -1f, -1f, -1f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, + 1f, -1f, -1f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, + 1f, 1f, -1f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, + 1f, 1f, -1f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, + -1f, 1f, -1f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, + -1f, -1f, -1f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, + + -1f, -1f, 1f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, + 1f, -1f, 1f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, + 1f, 1f, 1f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, + 1f, 1f, 1f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, + -1f, 1f, 1f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, + -1f, -1f, 1f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, + + -1f, 1f, 1f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + -1f, 1f, -1f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, + -1f, -1f, -1f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + -1f, -1f, -1f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + -1f, -1f, 1f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + -1f, 1f, 1f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + + 1f, 1f, 1f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 1f, 1f, -1f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, + 1f, -1f, -1f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + 1f, -1f, -1f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + 1f, -1f, 1f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 1f, 1f, 1f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + + -1f, -1f, -1f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, + 1f, -1f, -1f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f, + 1f, -1f, 1f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, + 1f, -1f, 1f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, + -1f, -1f, 1f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, + -1f, -1f, -1f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, + + -1f, 1f, -1f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, + 1f, 1f, -1f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, + 1f, 1f, 1f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, + 1f, 1f, 1f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, + -1f, 1f, 1f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, + -1f, 1f, -1f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f + }; + + private static readonly uint[] Indices = + { + 0, 1, 3, + 1, 2, 3 + }; + + private BufferObject _vbo; + + private BufferObject _ebo; + private VertexArrayObject _vao; + + public Cube(GL api, int materialIndex) : base(new GeometryData(Vertices, Indices), materialIndex) + { + _ebo = new BufferObject(api, GeometryData.Indices, BufferTargetARB.ElementArrayBuffer); + _vbo = new BufferObject(api, GeometryData.Vertices, BufferTargetARB.ArrayBuffer); + _vao = new VertexArrayObject(api, _vbo, _ebo); + + _vao.VertexAttributePointer(0, 3, VertexAttribPointerType.Float, 8, 0); + _vao.VertexAttributePointer(1, 3, VertexAttribPointerType.Float, 8, 3); + _vao.VertexAttributePointer(2, 2, VertexAttribPointerType.Float, 8, 6); + } + + public override void OpenDrawingContext() + { + _vao.Bind(); + } + + public override void Draw(GL api) + { + api.DrawArrays(PrimitiveType.Triangles, 0, 36); + } + + public override bool IsInFrustum(Frustum frustum, Transform transform) + { + Vector3 position = transform.Position; + Quaternion rotation = transform.Rotation; + + AABB aabb; + + if (rotation.IsIdentity) + { + Vector3 extends = Vector3.One * Transform.Scale; + Vector3 min = position - extends; + Vector3 max = position + extends; + aabb = new AABB(min, max); + } + else + { + Vector3 right = transform.Right * transform.Scale; + Vector3 up = transform.Up * transform.Scale; + Vector3 forward = transform.Forward * transform.Scale; + + float x = Math.Abs(Vector3.Dot(Vector3.UnitX, right)) + Math.Abs(Vector3.Dot(Vector3.UnitX, up)) + Math.Abs(Vector3.Dot(Vector3.UnitX, forward)); + float y = Math.Abs(Vector3.Dot(Vector3.UnitY, right)) + Math.Abs(Vector3.Dot(Vector3.UnitY, up)) + Math.Abs(Vector3.Dot(Vector3.UnitY, forward)); + float z = Math.Abs(Vector3.Dot(Vector3.UnitZ, right)) + Math.Abs(Vector3.Dot(Vector3.UnitZ, up)) + Math.Abs(Vector3.Dot(Vector3.UnitZ, forward)); + aabb = new AABB(position, x, y, z); + } + + + return aabb.IsOnOrForwardPlane(frustum.Left) && aabb.IsOnOrForwardPlane(frustum.Right) && + aabb.IsOnOrForwardPlane(frustum.Top) && aabb.IsOnOrForwardPlane(frustum.Bottom) && + aabb.IsOnOrForwardPlane(frustum.Near) && aabb.IsOnOrForwardPlane(frustum.Far); + } + + public override void Dispose() + { + _vbo.Dispose(); + _ebo.Dispose(); + _vao.Dispose(); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Geometry/Primitives/Line.cs b/src/Drawie.Layer.3D.Test/Geometry/Primitives/Line.cs new file mode 100644 index 0000000..1d817a3 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Geometry/Primitives/Line.cs @@ -0,0 +1,55 @@ +using System.Numerics; +using Drawie.Layer.ThreeD.Test; +using Silk.NET.OpenGL; +using SilkNet.Rendering; + +namespace SilkNet.Geometry.Primitives; + +public class Line : GeometryObject +{ + private BufferObject _vbo; + private BufferObject _ebo; + private VertexArrayObject _vao; + + private static readonly uint[] Indices = + { + 0, 1 + }; + + public Vector3 Start { get; set; } + public Vector3 End { get; set; } + + public Line(GL api, Vector3 start, Vector3 end, int materialIndex) : base(new GeometryData(new[] { start.X, start.Y, start.Z, end.X, end.Y, end.Z }, Indices), materialIndex) + { + Start = start; + End = end; + + _vbo = new BufferObject(api, GeometryData.Vertices, BufferTargetARB.ArrayBuffer); + _ebo = new BufferObject(api, GeometryData.Indices, BufferTargetARB.ElementArrayBuffer); + _vao = new VertexArrayObject(api, _vbo, _ebo); + + _vao.VertexAttributePointer(0, 3, VertexAttribPointerType.Float, 3, 0); + } + + public override void OpenDrawingContext() + { + _vao.Bind(); + } + + public override void Draw(GL api) + { + api.DrawArrays(PrimitiveType.Lines, 0, 2); + } + + public override bool IsInFrustum(Frustum frustum, Transform transform) + { + return true; + } + + public override void Dispose() + { + _vao.Dispose(); + _vbo.Dispose(); + _ebo.Dispose(); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Helpers/MathHelper.cs b/src/Drawie.Layer.3D.Test/Helpers/MathHelper.cs new file mode 100644 index 0000000..ce7df55 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Helpers/MathHelper.cs @@ -0,0 +1,9 @@ +namespace SilkNet; + +public static class MathHelper +{ + public static float DegreesToRadians(float degrees) + { + return (float)(degrees * (Math.PI / 180f)); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Images/dancing-dog.gif b/src/Drawie.Layer.3D.Test/Images/dancing-dog.gif new file mode 100644 index 0000000000000000000000000000000000000000..39d4366fa73781e000753a685833931f5dae8a4b GIT binary patch literal 227225 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 _+moOD$d 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 JR;ZW^R?T&R}Lqjn*b*v=H;QTAG$I96hG7 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 z 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⪚tQrN_qmAr)4rkc2p$im+t*)x) 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

f%N}+k(nosM=>;LwRs?75v>IoqDTf)%$ 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 EKQ^rfr2qf` literal 0 HcmV?d00001 diff --git a/src/Drawie.Layer.3D.Test/Images/silkSpecular.png b/src/Drawie.Layer.3D.Test/Images/silkSpecular.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5a415ee4bd5ce10fa046bdb2522635459232b1 GIT binary patch literal 12099 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 BjX(eZ literal 0 HcmV?d00001 diff --git a/src/Drawie.Layer.3D.Test/Misc/Gif.cs b/src/Drawie.Layer.3D.Test/Misc/Gif.cs new file mode 100644 index 0000000..322eec1 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Misc/Gif.cs @@ -0,0 +1,51 @@ +using System.Runtime.InteropServices; +using Silk.NET.OpenGL; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.PixelFormats; +using Texture = SilkNet.Rendering.Texture; + +namespace SilkNet; + +public class Gif : IDisposable +{ + public int FrameCount => _frames.Length; + + private Image _gifImage; + private Texture[] _frames; + private GL _gl; + + public Gif(GL gl, string path) + { + _gifImage = Image.Load(path); + _gl = gl; + LoadFrames(); + } + + public Texture GetFrame(int frame) + { + return _frames[frame]; + } + + private void LoadFrames() + { + _frames = new Texture[_gifImage.Frames.Count]; + for (int i = 0; i < _gifImage.Frames.Count; i++) + { + _frames[i] = new Texture(_gl, GetFrameData(i), (uint)_gifImage.Width, (uint)_gifImage.Height); + } + } + + private Span GetFrameData(int frame) + { + var memoryGroup = _gifImage.Frames[frame].PixelBuffer.MemoryGroup; + return MemoryMarshal.AsBytes(memoryGroup[0].Span); + } + + public void Dispose() + { + foreach (var frame in _frames) + { + frame.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Optimization/MaterialBatcher.cs b/src/Drawie.Layer.3D.Test/Optimization/MaterialBatcher.cs new file mode 100644 index 0000000..0be3ce0 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Optimization/MaterialBatcher.cs @@ -0,0 +1,67 @@ +using SilkNet.Geometry; +using SilkNet.Rendering; + +namespace SilkNet.Optimization; + +public class MaterialBatcher +{ + public Dictionary Batches { get; private set; } = new Dictionary(); + + public MaterialBatcher(IList geometryObjects) + { + RecalculateBatches(geometryObjects); + } + + private void RecalculateBatches(IList geometryObjects) + { + for (var i = 0; i < geometryObjects.Count; i++) + { + var geometryObject = geometryObjects[i]; + var materialIndex = geometryObject.MaterialIndex; + if (Batches.ContainsKey(materialIndex)) + { + Batches[materialIndex].ObjectsCount++; + } + else + { + Batches.Add(materialIndex, new Batch(1, i)); + } + } + + Batches = Batches.OrderBy(x => x.Value).ToDictionary(x => x.Key, x => x.Value); + } + + public void AddObject(GeometryObject geometryObject, int indexOfObject) + { + var materialIndex = geometryObject.MaterialIndex; + if (Batches.ContainsKey(materialIndex)) + { + Batches[materialIndex].ObjectsCount++; + } + else + { + Batches.Add(materialIndex, new Batch(1, indexOfObject)); + } + } + + public void RemoveObject(GeometryObject geometryObject) + { + var materialIndex = geometryObject.MaterialIndex; + if (Batches.ContainsKey(materialIndex)) + { + Batches[materialIndex].ObjectsCount--; + } + } +} + +public class Batch +{ + public int ObjectsCount { get; set; } + public int StartIndex { get; set; } + + public Batch(int objectsCount, int startIndex) + { + ObjectsCount = objectsCount; + StartIndex = startIndex; + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Rendering/Frustum.cs b/src/Drawie.Layer.3D.Test/Rendering/Frustum.cs new file mode 100644 index 0000000..873eb6d --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Rendering/Frustum.cs @@ -0,0 +1,32 @@ +using System.Numerics; + +namespace SilkNet.Rendering; + +public struct Frustum +{ + public Plane Near { get; private set; } + public Plane Far { get; private set; } + public Plane Left { get; private set; } + public Plane Right { get; private set; } + public Plane Top { get; private set; } + public Plane Bottom { get; private set; } + + public Frustum(Camera camera, float fovY, float zNear, float zFar) : this() + { + Recalculate(camera, fovY, zNear, zFar); + } + + public void Recalculate(Camera camera, float fovY, float zNear, float zFar) + { + float halfVerticalSize = zFar * (float)Math.Tan(fovY / 2); + float halfHorizontalSize = halfVerticalSize * camera.AspectRatio; + Vector3 frontMultFar = zFar * camera.Forward; + + Near = new Plane(camera.Position + zNear * camera.Forward, camera.Forward); + Far = new Plane(camera.Position + frontMultFar, -camera.Forward); + Right = new Plane(camera.Position, Vector3.Cross(camera.Up, frontMultFar + camera.Right * halfHorizontalSize)); + Left = new Plane(camera.Position, Vector3.Cross(frontMultFar - camera.Right * halfHorizontalSize, camera.Up)); + Bottom = new Plane(camera.Position, Vector3.Cross(camera.Right, frontMultFar - camera.Up * halfVerticalSize)); + Top = new Plane(camera.Position, Vector3.Cross(frontMultFar + camera.Up * halfVerticalSize, camera.Right)); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Rendering/Material.cs b/src/Drawie.Layer.3D.Test/Rendering/Material.cs new file mode 100644 index 0000000..e811ac6 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Rendering/Material.cs @@ -0,0 +1,125 @@ +using System.Numerics; +using Silk.NET.OpenGL; + +namespace SilkNet.Rendering; + +public class Material : IDisposable +{ + public string Name { get; set; } + public Shader Shader { get; set; } + public List Properties { get; set; } = new List(); + public Texture[] Textures { get; set; } = new Texture[32]; + + private int _textureCount; + + public Material(string name, Shader shader) + { + Name = name; + Shader = shader; + + AddProperty("uModel"); + AddProperty("uView"); + AddProperty("uProjection"); + if (shader.HasUniform("viewPos")) + { + AddProperty("viewPos"); + } + } + + public void Use(Camera camera) + { + BindTextures(); + Shader.Use(); + + SetProperty("uView", camera.ViewMatrix); + SetProperty("uProjection", camera.ProjectionMatrix); + if (Shader.HasUniform("viewPos")) + { + SetProperty("viewPos", camera.Position); + } + } + + public void PrepareForObject(Transform transform) + { + SetProperty("uModel", transform.ViewMatrix); + UpdateShader(); + } + + private void BindTextures() + { + for (var i = 0; i < _textureCount; i++) + { + TextureUnit unit = (TextureUnit)(0x84C0 + i); + Textures[i].Bind(unit); + } + } + + public void AddTexture(Texture texture) + { + Textures[_textureCount] = texture; + _textureCount++; + } + + public void AddProperty(string name, T defaultValue = default) where T: struct + { + ShaderProperty property = new ShaderProperty(name, defaultValue); + Properties.Add(property); + } + + public void UpdateShader() + { + foreach (ShaderProperty property in Properties) + { + ApplyToShader(property); + } + } + + public void SetProperty(string name, T value) where T : struct + { + foreach (var property in Properties) + { + if (property.UniformName == name) + { + if (property is ShaderProperty prop) + { + prop.Value = value; + return; + } + + throw new Exception($"Property {name} is not of type {typeof(T)}"); + } + } + + throw new Exception($"Property {name} does not exist"); + } + + private void ApplyToShader(ShaderProperty prop) + { + switch (prop.ObjValue) + { + case float floatValue: + Shader.SetUniform(prop.UniformName, floatValue); + break; + case int intValue: + Shader.SetUniform(prop.UniformName, intValue); + break; + case Vector3 vec3: + Shader.SetUniform(prop.UniformName, vec3); + break; + case Matrix4x4 mat4: + Shader.SetUniform(prop.UniformName, mat4); + break; + default: + throw new Exception($"Property {prop.UniformName} is not a supported type"); + } + } + + public void Dispose() + { + Shader.Dispose(); + foreach (var texture in Textures) + { + texture?.Dispose(); + } + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Rendering/Plane.cs b/src/Drawie.Layer.3D.Test/Rendering/Plane.cs new file mode 100644 index 0000000..ebbc04d --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Rendering/Plane.cs @@ -0,0 +1,20 @@ +using System.Numerics; + +namespace SilkNet.Rendering; + +public struct Plane +{ + public Vector3 Normal { get; set; } + public Vector3 Point { get; set; } + + public float GetSignedDistance(Vector3 point) + { + return Vector3.Dot(Normal, point - Point); + } + + public Plane(Vector3 point, Vector3 normal) + { + Normal = Vector3.Normalize(normal); + Point = point; + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Rendering/Shader.cs b/src/Drawie.Layer.3D.Test/Rendering/Shader.cs new file mode 100644 index 0000000..510acc9 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Rendering/Shader.cs @@ -0,0 +1,94 @@ +using System.Numerics; +using Silk.NET.OpenGL; + +namespace SilkNet.Rendering; + +public sealed class Shader : NativeObject +{ + public Shader(GL glContext, string rawVertex, string rawFragment) : base(glContext, glContext.CreateProgram()) + { + uint vertex = InitShader(ShaderType.VertexShader, rawVertex); + uint fragment = InitShader(ShaderType.FragmentShader, rawFragment); + + GlContext.AttachShader(Handle, vertex); + GlContext.AttachShader(Handle, fragment); + GlContext.LinkProgram(Handle); + + GlContext.GetProgram(Handle, GLEnum.LinkStatus, out var status); + + if (status == 0) + { + throw new Exception($"Program failed to link with error: {GlContext.GetProgramInfoLog(Handle)}"); + } + + GlContext.DetachShader(Handle, vertex); + GlContext.DetachShader(Handle, fragment); + GlContext.DeleteShader(vertex); + GlContext.DeleteShader(fragment); + } + + public void Use() + { + GlContext.UseProgram(Handle); + } + + // Uniforms are properties that applies to the entire geometry + public void SetUniform(string name, int value) + { + int location = GetUniformLocation(name); + GlContext.Uniform1(location, value); + } + + public void SetUniform(string name, float value) + { + int location = GetUniformLocation(name); + GlContext.Uniform1(location, value); + } + + public unsafe void SetUniform(string name, Matrix4x4 transformViewMatrix) + { + int location = GetUniformLocation(name); + GlContext.UniformMatrix4(location, 1, false, (float*)&transformViewMatrix); + } + + public void SetUniform(string name, Vector3 value) + { + int location = GetUniformLocation(name); + GlContext.Uniform3(location, value.X, value.Y, value.Z); + } + + private int GetUniformLocation(string name) + { + int location = GlContext.GetUniformLocation(Handle, name); + if (location == -1) + { + throw new Exception($"{name} uniform not found on the shader."); + } + + return location; + } + + public bool HasUniform(string uniformName) + { + return GlContext.GetUniformLocation(Handle, uniformName) != -1; + } + + private uint InitShader(ShaderType type, string raw) + { + uint handle = GlContext.CreateShader(type); + GlContext.ShaderSource(handle, raw); + GlContext.CompileShader(handle); + string infoLog = GlContext.GetShaderInfoLog(handle); + if (!string.IsNullOrWhiteSpace(infoLog)) + { + throw new Exception($"Compiling shader of type {type} failed with error {infoLog}"); + } + + return handle; + } + + public override void Dispose() + { + GlContext.DeleteProgram(Handle); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Rendering/ShaderProperty.cs b/src/Drawie.Layer.3D.Test/Rendering/ShaderProperty.cs new file mode 100644 index 0000000..1260212 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Rendering/ShaderProperty.cs @@ -0,0 +1,29 @@ +namespace SilkNet.Rendering; + +public class ShaderProperty +{ + public string UniformName { get; set; } + public object ObjValue { get; set; } + public Type Type { get; set; } + + public ShaderProperty(string name) + { + UniformName = name; + } +} + +public class ShaderProperty : ShaderProperty +{ + public T Value + { + get => (T)ObjValue; + set => ObjValue = value; + } + + public ShaderProperty(string uniformName, T value) : base(uniformName) + { + UniformName = uniformName; + ObjValue = value; + Type = typeof(T); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Rendering/Texture.cs b/src/Drawie.Layer.3D.Test/Rendering/Texture.cs new file mode 100644 index 0000000..45b5a80 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Rendering/Texture.cs @@ -0,0 +1,70 @@ +using Silk.NET.OpenGL; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.PixelFormats; + +namespace SilkNet.Rendering; + +public sealed class Texture : NativeObject +{ + public Texture(GL glContext, string path) : base(glContext, glContext.GenTexture()) + { + LoadTextureFromPath(path); + SetParameters(); + } + + public Texture(GL glContext, Span data, uint width, uint height) : base(glContext, glContext.GenTexture()) + { + LoadDataFromSpan(data, width, height); + } + + private unsafe void LoadDataFromSpan(Span data, uint width, uint height) + { + fixed (void* d = &data[0]) + { + GlContext.TexImage2D(TextureTarget.Texture2D, 0, (int)InternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, d); + SetParameters(); + } + } + + private unsafe void LoadTextureFromPath(string path) + { + using var img = Image.Load(path); + // Reserve memory in GPU for whole image + GlContext.TexImage2D(TextureTarget.Texture2D, 0, InternalFormat.Rgba8, (uint)img.Width, (uint)img.Height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, null); + + img.ProcessPixelRows(accessor => + { + for (int y = 0; y < accessor.Height; y++) + { + fixed (void* data = accessor.GetRowSpan(y)) + { + // Load the actual image + GlContext.TexSubImage2D(TextureTarget.Texture2D, 0, 0, y, (uint)accessor.Width, 1, PixelFormat.Rgba, PixelType.UnsignedByte, data); + } + } + }); + } + + private void SetParameters() + { + GlContext.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)GLEnum.ClampToEdge); + GlContext.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)GLEnum.ClampToEdge); + GlContext.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)GLEnum.LinearMipmapLinear); + GlContext.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)GLEnum.Linear); + GlContext.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBaseLevel, 0); + GlContext.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMaxLevel, 8); + + GlContext.GenerateMipmap(TextureTarget.Texture2D); + } + + public void Bind(TextureUnit textureSlot = TextureUnit.Texture0) + { + GlContext.ActiveTexture(textureSlot); + GlContext.BindTexture(TextureTarget.Texture2D, Handle); + } + + public override void Dispose() + { + GlContext.DeleteTexture(Handle); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Shaders/BasicVertexShader.glsl b/src/Drawie.Layer.3D.Test/Shaders/BasicVertexShader.glsl new file mode 100644 index 0000000..fe3d173 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Shaders/BasicVertexShader.glsl @@ -0,0 +1,17 @@ +#version 330 core +layout (location = 0) in vec3 vPos; + +uniform mat4 uModel; +uniform mat4 uView; +uniform mat4 uProjection; + +out vec3 fPos; + +void main() +{ + //Multiplying our uniform with the vertex position, the multiplication order here does matter. + gl_Position = uProjection * uView * uModel * vec4(vPos, 1.0); + + //We want to know the fragment's position in World space, so we multiply ONLY by uModel and not uView or uProjection + fPos = vec3(uModel * vec4(vPos, 1.0)); +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Shaders/LitShader.glsl b/src/Drawie.Layer.3D.Test/Shaders/LitShader.glsl new file mode 100644 index 0000000..ca78d09 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Shaders/LitShader.glsl @@ -0,0 +1,43 @@ +#version 330 core +in vec3 fNormal; +in vec3 fPos; +in vec2 fTexCoords; + +struct Material { + sampler2D diffuse; + sampler2D specular; + float shininess; +}; + +struct Light { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + +uniform Material material; +uniform Light light; +uniform vec3 viewPos; + +out vec4 FragColor; + +void main() +{ + vec3 ambient = light.ambient * texture(material.diffuse, fTexCoords).rgb; + + vec3 norm = normalize(fNormal); + vec3 lightDirection = normalize(light.position - fPos); + float diff = max(dot(norm, lightDirection), 0.0); + vec3 diffuse = light.diffuse * (diff * texture(material.diffuse, fTexCoords).rgb); + + vec3 viewDirection = normalize(viewPos - fPos); + vec3 reflectDirection = reflect(-lightDirection, norm); + float spec = pow(max(dot(viewDirection, reflectDirection), 0.0), material.shininess); + vec3 specular = light.specular * (spec * texture(material.specular, fTexCoords).rgb); + + //The resulting colour should be the amount of ambient colour + the amount of additional colour provided by the diffuse of the lamp + vec3 result = ambient + diffuse + specular; + + FragColor = vec4(result, 1.0); +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Shaders/UnlitShader.glsl b/src/Drawie.Layer.3D.Test/Shaders/UnlitShader.glsl new file mode 100644 index 0000000..3fb94a5 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Shaders/UnlitShader.glsl @@ -0,0 +1,15 @@ +#version 330 core +in vec2 fUv; + +//A uniform of the type sampler2D will have the storage value of our texture. +uniform sampler2D uTexture0; +uniform vec3 uColor; + + +out vec4 FragColor; + +void main() +{ + //Here we sample the texture based on the Uv coordinates of the fragment + FragColor = vec4(uColor, 1.0f); +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Shaders/VertexShader.glsl b/src/Drawie.Layer.3D.Test/Shaders/VertexShader.glsl new file mode 100644 index 0000000..b98ba7d --- /dev/null +++ b/src/Drawie.Layer.3D.Test/Shaders/VertexShader.glsl @@ -0,0 +1,26 @@ +#version 330 core +layout (location = 0) in vec3 vPos; +layout (location = 1) in vec3 vNormal; +layout (location = 2) in vec2 vTexCoords; + +uniform mat4 uModel; +uniform mat4 uView; +uniform mat4 uProjection; + +out vec3 fNormal; +out vec3 fPos; +out vec2 fTexCoords; + +void main() +{ + //Multiplying our uniform with the vertex position, the multiplication order here does matter. + gl_Position = uProjection * uView * uModel * vec4(vPos, 1.0); + + //We want to know the fragment's position in World space, so we multiply ONLY by uModel and not uView or uProjection + fPos = vec3(uModel * vec4(vPos, 1.0)); + + //The Normal needs to be in World space too, but needs to account for Scaling of the object + fNormal = mat3(transpose(inverse(uModel))) * vNormal; + + fTexCoords = vTexCoords; +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/ThreeDTest.cs b/src/Drawie.Layer.3D.Test/ThreeDTest.cs new file mode 100644 index 0000000..e0ce496 --- /dev/null +++ b/src/Drawie.Layer.3D.Test/ThreeDTest.cs @@ -0,0 +1,271 @@ +using System.Drawing; +using System.Numerics; +using Drawie.Numerics; +using Drawie.RenderApi; +using Drawie.RenderApi.OpenGL; +using Drawie.Windowing; +using Drawie.Windowing.Input; +using Silk.NET.OpenGL; +using SilkNet; +using SilkNet.Geometry; +using SilkNet.Geometry.Primitives; +using SilkNet.Optimization; +using SilkNet.Rendering; +using Shader = SilkNet.Rendering.Shader; +using Texture = SilkNet.Rendering.Texture; + +namespace Drawie.Layer.ThreeD.Test; + +public class ThreeDTest : ILayer +{ + private static Shader _lampShader; + private static Shader _lightingShader; + private static Texture _diffuseMap; + private static Texture _specularMap; + private static Gif _dogGif; + private static Vector3 LampPosition = new Vector3(1.2f, 1.0f, 2.0f); + + private static List _objects = new List(); + private static List _gizmos = new List(); + private static List _materials = new List(); + + private static Camera _camera; + + private static VecD _lastMousePosition; + private static IKeyboard _primaryKeyboard; + + private static Vector3 _lightColor; + private const int GifSpeed = 1; + private static float _normalizedTime; + private static int _currentFrame; + private static double _lastTime; + + //Track when the window started so we can use the time elapsed to rotate the cube + private static DateTime _startTime; + + private static MaterialBatcher _materialBatcher; + + private IWindow window; + + private OpenGlGraphicsContext openglContext; + + public void Initialize(IWindow window) + { + window.Resize += WindowOnResize; + this.window = window; + OnLoad(window.RenderApi.GraphicsContext); + window.Update += OnUpdate; + window.SubscribeToRender("3DTest.Render", "Init", OnRender); + } + + private void WindowOnResize(VecI size) + { + openglContext.Api.Viewport(0, 0, (uint)size.X, (uint)size.Y); + if (_camera != null) + _camera.AspectRatio = (float)size.X / size.Y; + } + + private void OnLoad(IGraphicsContext renderApiGraphicsContext) + { + if (renderApiGraphicsContext is not OpenGlGraphicsContext openGlGraphicsContext) + { + throw new ArgumentException("Only OpenGL backend is supported", nameof(renderApiGraphicsContext)); + } + + var GlContext = openGlGraphicsContext.Api; + openglContext = openGlGraphicsContext; + _startTime = DateTime.UtcNow; + RegisterMouse(window.InputController); + _primaryKeyboard = window.InputController.PrimaryKeyboard; + + ShaderLoader.BasicVertexShader = ShaderLoader.LoadRaw("BasicVertexShader"); + ShaderLoader.VertexShader = ShaderLoader.LoadRaw("VertexShader"); + ShaderLoader.UnlitShader = ShaderLoader.LoadRaw("UnlitShader"); + ShaderLoader.LitShader = ShaderLoader.LoadRaw("LitShader"); + + //The lighting shader will give our main cube its colour multiplied by the lights intensity + _lightingShader = new Shader(GlContext, ShaderLoader.VertexShader, ShaderLoader.LitShader); + _lampShader = new Shader(GlContext, ShaderLoader.BasicVertexShader, ShaderLoader.UnlitShader); + + _diffuseMap = new Texture(GlContext, "Images/silkBoxed.png"); + _specularMap = new Texture(GlContext, "Images/silkSpecular.png"); + _dogGif = new Gif(GlContext, "Images/dancing-dog.gif"); + + _camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); + + Material cubeMat = new Material("BasicMat", _lightingShader); + cubeMat.AddProperty("material.diffuse", 1f); + cubeMat.AddProperty("material.specular", 1f); + cubeMat.AddProperty("material.shininess", 32f); + + cubeMat.AddProperty("light.specular", Vector3.One); + cubeMat.AddProperty("light.ambient", Vector3.One); + cubeMat.AddProperty("light.diffuse", Vector3.One); + cubeMat.AddProperty("light.position", LampPosition); + + Material unlitMat = new Material("UnlitMat", _lampShader); + unlitMat.AddProperty("uColor", Vector3.One); + + _materials.Add(cubeMat); + _materials.Add(unlitMat); + + SpawnCubes(10, 10, 10); + + _materialBatcher = new MaterialBatcher(_objects); + } + + public static void InstantiateObject(GeometryObject obj) + { + _objects.Add(obj); + _materialBatcher.AddObject(obj, _objects.Count - 1); + } + + private void SpawnCubes(int rows, int columns, int depth) + { + for (int y = 0; y < columns; y++) + { + for (int x = 0; x < rows; x++) + { + for (int z = 0; z < depth; z++) + { + _objects.Add(new Cube(openglContext.Api, 0) + { + Transform = { Position = new Vector3(x * 2.5f, y * 2.5f, z * 2.5f) } + }); + } + } + } + } + + private static void UpdateBasicMaterial() + { + Material cubeMat = _materials[0]; + + var difference = (float)(DateTime.UtcNow - _startTime).TotalSeconds; + _lightColor = Vector3.Zero; + _lightColor.X = MathF.Sin(difference * 2f); + _lightColor.Y = MathF.Sin(difference * 0.7f); + _lightColor.Z = MathF.Sin(difference * 1.3f); + + var diffuseColor = _lightColor * new Vector3(0.5f); + var ambientColor = diffuseColor * new Vector3(1f); + + cubeMat.SetProperty("light.specular", new Vector3(1f, 1f, 1f)); + cubeMat.SetProperty("light.ambient", ambientColor); + cubeMat.SetProperty("light.diffuse", diffuseColor); + cubeMat.SetProperty("light.position", LampPosition); + } + + private static void OnUpdate(double deltaTime) + { + float moveSpeed = 2.5f * (float)deltaTime; + + HandleMovement(moveSpeed); + _camera.RecalculateFrustum(); + } + + private static void HandleMovement(float moveSpeed) + { + if (_primaryKeyboard.IsKeyPressed(Key.W)) + { + _camera.Position += moveSpeed * _camera.Forward; + } + + if (_primaryKeyboard.IsKeyPressed(Key.S)) + { + _camera.Position -= moveSpeed * _camera.Forward; + } + + if (_primaryKeyboard.IsKeyPressed(Key.A)) + { + _camera.Position -= Vector3.Normalize(Vector3.Cross(_camera.Forward, _camera.Up)) * moveSpeed; + } + + if (_primaryKeyboard.IsKeyPressed(Key.D)) + { + _camera.Position += Vector3.Normalize(Vector3.Cross(_camera.Forward, _camera.Up)) * moveSpeed; + } + } + + private void OnRender(double deltaTime) + { + openglContext.Api.Enable(EnableCap.DepthTest); + openglContext.Api.Clear((uint)(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit)); + + UpdateBasicMaterial(); + RenderObjects(); + } + + private void RenderObjects() + { + foreach (var obj in _materialBatcher.Batches) + { + Batch batch = obj.Value; + Material material = _materials[obj.Key]; + material.Use(_camera); + + for (int i = 0; i < batch.ObjectsCount; i++) + { + GeometryObject geometryObject = _objects[batch.StartIndex + i]; + if (!geometryObject.IsInFrustum(_camera.Frustum, geometryObject.Transform)) continue; + + geometryObject.OpenDrawingContext(); + _materials[geometryObject.MaterialIndex].PrepareForObject(geometryObject.Transform); + geometryObject.Draw(openglContext.Api); + } + } + } + + private static void OnClose() + { + _lampShader.Dispose(); + _lightingShader.Dispose(); + _diffuseMap.Dispose(); + _specularMap.Dispose(); + _dogGif.Dispose(); + } + + private void RegisterMouse(InputController input) + { + for (int i = 0; i < input.Pointers.Count; i++) + { + var mouse = input.Pointers[i]; + mouse.PointerMoved += OnMouseMove; + mouse.PointerScrolled += OnScroll; + mouse.PointerClicked += OnMouseClick; + } + } + + private void OnMouseClick(IPointer pointer, PointerButton button, VecD position) + { + if (button == PointerButton.Left) + { + InstantiateObject(new Cube(openglContext.Api, 0) + { + Transform = { Position = _camera.Position + _camera.Forward * 2f } + }); + } + } + + private static void OnScroll(IPointer pointer, VecD scrollDelta) + { + _camera.Zoom = (float)scrollDelta.Y; + } + + private static void OnMouseMove(IPointer pointer, VecD position) + { + float lookSensitivity = 0.1f; + if (_lastMousePosition == default) + { + _lastMousePosition = position; + } + else + { + double offsetX = (position.X - _lastMousePosition.X) * lookSensitivity; + double offsetY = (position.Y - _lastMousePosition.Y) * lookSensitivity; + _lastMousePosition = position; + + _camera.SetDirection((float)offsetX, (float)offsetY); + } + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs index e9880ae..f83d742 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs @@ -3,8 +3,10 @@ namespace Drawie.RenderApi.OpenGL; -public class OpenGlGraphicsContext(GL Api, IGLContext GlContext) : IGraphicsContext +public class OpenGlGraphicsContext(GL api, IGLContext glContext) : IGraphicsContext { + public readonly IGLContext GlContext = glContext; + public readonly GL Api = api; private HashSet ownedTextures = new HashSet(); public bool OwnsTexture(ITexture nativeTexture) diff --git a/src/Drawie.Windowing.Browser/BrowserWindow.cs b/src/Drawie.Windowing.Browser/BrowserWindow.cs index f7593a4..cfbc83d 100644 --- a/src/Drawie.Windowing.Browser/BrowserWindow.cs +++ b/src/Drawie.Windowing.Browser/BrowserWindow.cs @@ -46,6 +46,7 @@ public bool IsVisible public event Action? Update; public event Action? Render; + public event Action? Resize; public object NativeWindow => canvas; public event Action? Loaded; @@ -153,6 +154,7 @@ public void Close() private void OnWindowResized(int width, int height) { RenderApi?.UpdateFramebufferSize(width, height); + Resize?.Invoke(new VecI(width, height)); } private Texture CreateRenderTexture() diff --git a/src/Drawie.Windowing.Glfw/GlfwWindow.cs b/src/Drawie.Windowing.Glfw/GlfwWindow.cs index d5b8b22..1116738 100644 --- a/src/Drawie.Windowing.Glfw/GlfwWindow.cs +++ b/src/Drawie.Windowing.Glfw/GlfwWindow.cs @@ -65,6 +65,7 @@ public bool ShowOnTop public event Action Update; public event Action Render; + public event Action? Resize; private SKSurface? surface; private Texture renderTexture; @@ -188,6 +189,7 @@ private void CreateRenderTarget(VecI size, ITexture nativeRenderTexture) private void WindowOnFramebufferResize(Vector2D newSize) { RenderApi.UpdateFramebufferSize(newSize.X, newSize.Y); + Resize?.Invoke(newSize.ToVecI()); } private void OnUpdate(double dt) @@ -197,6 +199,7 @@ private void OnUpdate(double dt) private void OnRender(double dt) { + // TODO: Composite framebuffers for each layer foreach (var layer in renderStack) { layer.Render(dt); @@ -236,5 +239,9 @@ public void SubscribeToRender(string name, string renderAfter, Action re { renderStack.Insert(foundRenderAfter + 1, new RenderOrder(name, render)); } + else + { + renderStack.Add(new RenderOrder(name, render)); + } } } \ No newline at end of file diff --git a/src/Drawie.Windowing/ILayer.cs b/src/Drawie.Windowing/ILayer.cs index 5f982fd..604650e 100644 --- a/src/Drawie.Windowing/ILayer.cs +++ b/src/Drawie.Windowing/ILayer.cs @@ -1,6 +1,8 @@ +using Drawie.Rendering; + namespace Drawie.Windowing; public interface ILayer { - public void Initialize(IWindow window); + void Initialize(IWindow window); } \ No newline at end of file diff --git a/src/Drawie.Windowing/IWindow.cs b/src/Drawie.Windowing/IWindow.cs index 0f76f5a..d4b899e 100644 --- a/src/Drawie.Windowing/IWindow.cs +++ b/src/Drawie.Windowing/IWindow.cs @@ -20,6 +20,7 @@ public interface IWindow public event Action Update; public event Action Render; + public event Action Resize; public void Initialize(); public void Show(); diff --git a/src/Drawie.Windowing/Input/InputController.cs b/src/Drawie.Windowing/Input/InputController.cs index eb3bc06..059253e 100644 --- a/src/Drawie.Windowing/Input/InputController.cs +++ b/src/Drawie.Windowing/Input/InputController.cs @@ -4,9 +4,9 @@ public class InputController { public IKeyboard? PrimaryKeyboard => Keyboards.FirstOrDefault(); public IPointer? PrimaryPointer => Pointers.FirstOrDefault(); - public IReadOnlyCollection Keyboards { get; } + public IReadOnlyList Keyboards { get; } - public IReadOnlyCollection Pointers { get; } + public IReadOnlyList Pointers { get; } public object NativeInputController { get; } diff --git a/src/Drawie.sln b/src/Drawie.sln index 0013b76..7acec6f 100644 --- a/src/Drawie.sln +++ b/src/Drawie.sln @@ -69,6 +69,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Layers", "Layers", "{8F709A EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.UI.ImGui", "Drawie.Layer.UI.ImGui\Drawie.Layer.UI.ImGui.csproj", "{7CACCC0C-044C-4ACE-B018-518F8D223D4A}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.3D.Test", "Drawie.Layer.3D.Test\Drawie.Layer.3D.Test.csproj", "{946CC678-5FDF-4473-9D1E-19CC3058DFAB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -186,6 +188,10 @@ Global {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Release|Any CPU.Build.0 = Release|Any CPU + {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {645AF54D-D58F-492E-A2A9-12F86EA8C00A} = {239DB1B4-E66F-444A-87DA-B19775F40974} @@ -209,5 +215,6 @@ Global {2D889347-CF94-4D67-AC4A-742AD1F1201D} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} {A9DB4D66-CD25-40E9-8F72-C5341D6C6564} = {239DB1B4-E66F-444A-87DA-B19775F40974} {7CACCC0C-044C-4ACE-B018-518F8D223D4A} = {8F709A50-C8C2-46FC-8355-A96701FFC359} + {946CC678-5FDF-4473-9D1E-19CC3058DFAB} = {8F709A50-C8C2-46FC-8355-A96701FFC359} EndGlobalSection EndGlobal diff --git a/src/Drawie2Sample/Drawie2Sample.csproj b/src/Drawie2Sample/Drawie2Sample.csproj index 29137a9..4406534 100644 --- a/src/Drawie2Sample/Drawie2Sample.csproj +++ b/src/Drawie2Sample/Drawie2Sample.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index a337227..8584dd6 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -4,6 +4,7 @@ using Drawie.Backend.Core.ColorsImpl.Paintables; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Core.Text; +using Drawie.Layer.ThreeD.Test; using Drawie.Layer.UI.ImGui; using Drawie.Numerics; using Drawie.Rendering; @@ -19,6 +20,7 @@ public class Drawie2SampleApp : DrawieApp public override IWindow CreateMainWindow() { window = Engine.WindowingPlatform.CreateWindow("Drawie 2 Sample", new VecI(1920, 1080)); + //window.AddLayer(new ThreeDTest()); window.AddLayer(new ImGuiLayer(RenderImGui)); return window; } From 34ca6064c25ba79ae014b8ea5a3c943da05874d7 Mon Sep 17 00:00:00 2001 From: flabbet Date: Mon, 10 Aug 2026 18:18:11 +0200 Subject: [PATCH 08/55] Draw mesh wip --- .../DesktopDrawingEngine.cs | 2 +- .../Bridge/IDrawingBackend.cs | 3 +- .../Operations/ISurfaceImplementation.cs | 1 + src/Drawie.Backend.Core/NativeTexture.cs | 12 +- .../Surfaces/IFramebufferInfo.cs | 6 + .../SkiaSurfaceImplementation.cs | 83 +++++++++- src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 80 ++++------ .../SkiaFramebufferInfo.cs | 16 ++ src/Drawie.Backend.Vertie/Core/Camera.cs | 65 ++++++++ src/Drawie.Backend.Vertie/Core/Frustum.cs | 32 ++++ src/Drawie.Backend.Vertie/Core/Mesh.cs | 18 +++ src/Drawie.Backend.Vertie/Core/Plane.cs | 21 +++ src/Drawie.Backend.Vertie/Core/Transform.cs | 74 +++++++++ .../Drawie.Backend.Vertie.csproj | 23 +++ .../Geometry/GeometryData.cs | 13 ++ .../Geometry/GeometryObject.cs | 17 ++ src/Drawie.Backend.Vertie/Helpers/MathEx.cs | 7 + .../Helpers/NumericsExtensions.cs | 12 ++ .../Helpers/TextureFramebufferExtensions.cs | 79 +++++++++ .../Rendering/CompiledShader.cs | 7 + .../Rendering/Material.cs | 101 ++++++++++++ .../Rendering/ShaderDefiniton.cs | 40 +++++ .../Rendering/ShaderProperty.cs | 29 ++++ .../Rendering/{Shader.cs => MatShader.cs} | 4 +- .../Rendering/Material.cs | 4 +- src/Drawie.Layer.3D.Test/ThreeDTest.cs | 9 +- src/Drawie.Numerics/Vec3D.cs | 27 +++- .../Extensions/BufferUsageExtensions.cs | 19 +++ src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs | 49 ++++++ .../OpenGlCommandList.cs | 93 +++++++++++ src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 151 ++++++++++++++++++ src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs | 48 ++++++ .../OpenGlRenderApi.cs | 18 ++- .../OpenGlShaderProgram.cs | 21 +++ .../VulkanRenderApi.cs | 7 + .../Abstraction/Buffers/BufferUsage.cs | 9 ++ .../Abstraction/Buffers/IBuffer.cs | 6 + .../CommandRecording/ICommandList.cs | 16 ++ .../CommandRecording/RecordedRenderPass.cs | 11 ++ .../Abstraction/IGraphicsDevice.cs | 24 +++ .../Abstraction/INativeObject.cs | 7 + .../Abstraction/Pipeline/IPipeline.cs | 9 ++ .../Abstraction/Pipeline/PipelineDesc.cs | 34 ++++ .../RenderTargets/IRenderTarget.cs | 6 + .../Abstraction/Shaders/IShaderProgram.cs | 6 + .../Abstraction/Shaders/ShaderProgramDesc.cs | 13 ++ .../Abstraction/Shaders/ShaderType.cs | 7 + .../{ => Abstraction/Textures}/ITexture.cs | 0 .../Abstraction/Textures/TextureDesc.cs | 10 ++ .../Abstraction/Textures/TextureFormat.cs | 6 + .../Abstraction/Textures/TextureUsage.cs | 9 ++ src/Drawie.RenderApi/IRenderApi.cs | 3 + src/Drawie.Rendering/Texture.cs | 9 -- src/Drawie.Rendering/TextureFramebuffer.cs | 11 +- src/Drawie.sln | 14 ++ src/Drawie.sln.DotSettings.user | 1 + src/Drawie2Sample/Cube.cs | 24 +++ src/Drawie2Sample/Drawie2Sample.csproj | 1 + src/Drawie2Sample/Drawie2SampleApp.cs | 25 ++- src/ShaderPlayground/Program.cs | 94 +++++++++++ src/ShaderPlayground/ShaderPlayground.csproj | 14 ++ 61 files changed, 1475 insertions(+), 85 deletions(-) create mode 100644 src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs create mode 100644 src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs create mode 100644 src/Drawie.Backend.Vertie/Core/Camera.cs create mode 100644 src/Drawie.Backend.Vertie/Core/Frustum.cs create mode 100644 src/Drawie.Backend.Vertie/Core/Mesh.cs create mode 100644 src/Drawie.Backend.Vertie/Core/Plane.cs create mode 100644 src/Drawie.Backend.Vertie/Core/Transform.cs create mode 100644 src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj create mode 100644 src/Drawie.Backend.Vertie/Geometry/GeometryData.cs create mode 100644 src/Drawie.Backend.Vertie/Geometry/GeometryObject.cs create mode 100644 src/Drawie.Backend.Vertie/Helpers/MathEx.cs create mode 100644 src/Drawie.Backend.Vertie/Helpers/NumericsExtensions.cs create mode 100644 src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs create mode 100644 src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs create mode 100644 src/Drawie.Backend.Vertie/Rendering/Material.cs create mode 100644 src/Drawie.Backend.Vertie/Rendering/ShaderDefiniton.cs create mode 100644 src/Drawie.Backend.Vertie/Rendering/ShaderProperty.cs rename src/Drawie.Layer.3D.Test/Rendering/{Shader.cs => MatShader.cs} (94%) create mode 100644 src/Drawie.RenderApi.OpenGl/Extensions/BufferUsageExtensions.cs create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs create mode 100644 src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs create mode 100644 src/Drawie.RenderApi/Abstraction/CommandRecording/RecordedRenderPass.cs create mode 100644 src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs create mode 100644 src/Drawie.RenderApi/Abstraction/INativeObject.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Pipeline/IPipeline.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs create mode 100644 src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs rename src/Drawie.RenderApi/{ => Abstraction/Textures}/ITexture.cs (100%) create mode 100644 src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Textures/TextureFormat.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Textures/TextureUsage.cs create mode 100644 src/Drawie2Sample/Cube.cs create mode 100644 src/ShaderPlayground/Program.cs create mode 100644 src/ShaderPlayground/ShaderPlayground.csproj diff --git a/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs b/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs index 2c855b0..fb52b94 100644 --- a/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs +++ b/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs @@ -17,7 +17,7 @@ public static DrawingEngine CreateDefaultDesktop(bool preferVulkan = true) renderApi = new OpenGlRenderApi(); } - return new DrawingEngine(renderApi, new GlfwWindowingPlatform(renderApi), new SkiaDrawingBackend(), + return new DrawingEngine(renderApi, new GlfwWindowingPlatform(renderApi), new SkiaDrawingBackend(renderApi.GraphicsDevice), new DrawieRenderingDispatcher()); } } diff --git a/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs b/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs index e874dd8..d2a6342 100644 --- a/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs +++ b/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs @@ -8,6 +8,7 @@ namespace Drawie.Backend.Core.Bridge { public interface IDrawingBackend : IAsyncDisposable { + public IRenderApi ActiveRenderApi { get; } public void Setup(IRenderApi renderApi); public IColorImplementation ColorImplementation { get; } public IImageImplementation ImageImplementation { get; } @@ -31,7 +32,7 @@ public interface IDrawingBackend : IAsyncDisposable public IPictureImplementation PictureImplementation { get; } public IBlenderImplementation BlenderImplementation { get; } public IMeshImplementation MeshImplementation { get; } - public DrawingSurface CreateRenderSurface(VecI size, ITexture renderTexture, SurfaceOrigin origin); + public DrawingSurface? CreateRenderSurface(VecI size, ITexture renderTexture, SurfaceOrigin origin); public int GetNativeInstancesTotalCount(); public void Flush(); } diff --git a/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs b/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs index 996f8e8..4c98a04 100644 --- a/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs +++ b/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs @@ -21,5 +21,6 @@ public interface ISurfaceImplementation public RectI GetDeviceClipBounds(IntPtr drawingSurface); public void Unmanage(DrawingSurface surface); public RectD GetLocalClipBounds(IntPtr objectPointer); + IFramebufferInfo? GetFramebufferInfo(IntPtr objectPointer); } diff --git a/src/Drawie.Backend.Core/NativeTexture.cs b/src/Drawie.Backend.Core/NativeTexture.cs index 7b3ba67..f8e249c 100644 --- a/src/Drawie.Backend.Core/NativeTexture.cs +++ b/src/Drawie.Backend.Core/NativeTexture.cs @@ -8,7 +8,7 @@ namespace Drawie.Backend.Core; -public class NativeTexture : IDisposable, ICloneable, IPixelsMap +public class NativeTexture : IDisposable, ICloneable, IPixelsMap, IFramebufferInfo { public VecI Size { get; } public DrawingSurface DrawingSurface { get; private set; } @@ -86,7 +86,7 @@ public static NativeTexture ForProcessing(VecI size, ColorSpace colorSpace) return tex; } - + public static NativeTexture ForProcessing(Canvas copySizeAndMatrixFrom, ColorSpace colorSpace) { NativeTexture tex = new NativeTexture( @@ -301,7 +301,7 @@ void IPixelsMap.MarkPixelsChanged() if (isDisposed) throw new ObjectDisposedException("Texture"); - if(cpuSurface == null) + if (cpuSurface == null) return; using var ctx = EnsureContext(); @@ -408,4 +408,8 @@ public void SaveToDesktop() surf.SaveToDesktop(); } #endif -} + + public uint FramebufferId => + DrawingBackendApi.Current.SurfaceImplementation.GetFramebufferInfo(DrawingSurface.ObjectPointer) + ?.FramebufferId ?? throw new Exception("Framebuffer info not available."); +} \ No newline at end of file diff --git a/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs b/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs new file mode 100644 index 0000000..2933d01 --- /dev/null +++ b/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs @@ -0,0 +1,6 @@ +namespace Drawie.Backend.Core.Surfaces; + +public interface IFramebufferInfo +{ + public uint FramebufferId { get; } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index f2f7165..fa27a15 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -1,9 +1,13 @@ using System.Diagnostics; +using Drawie.Backend.Core.Bridge; using Drawie.Backend.Core.Bridge.Operations; using Drawie.Backend.Core.Surfaces; using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Numerics; +using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction; +using Drawie.RenderApi.Abstraction.Textures; using SkiaSharp; namespace Drawie.Skia.Implementations @@ -13,12 +17,17 @@ public class SkiaSurfaceImplementation : SkObjectImplementation, ISur private readonly SkiaPixmapImplementation _pixmapImplementation; private readonly SkiaCanvasImplementation _canvasImplementation; private readonly SkiaPaintImplementation _paintImplementation; + private Dictionary framebufferInfos = new Dictionary(); internal GRContext? GrContext { get; set; } + private readonly IGraphicsDevice _graphicsDevice; + private readonly SurfaceOrigin defaultSurfaceOrigin; - public SkiaSurfaceImplementation(GRContext context, SkiaPixmapImplementation pixmapImplementation, + public SkiaSurfaceImplementation(GRContext context, IGraphicsDevice graphicsDevice, SurfaceOrigin surfaceOrigin, + SkiaPixmapImplementation pixmapImplementation, SkiaCanvasImplementation canvasImplementation, SkiaPaintImplementation paintImplementation) { + _graphicsDevice = graphicsDevice; _pixmapImplementation = pixmapImplementation; _canvasImplementation = canvasImplementation; _paintImplementation = paintImplementation; @@ -129,12 +138,70 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int return SKSurface.Create(info); } - return SKSurface.Create(GrContext, false, info); + var texture = _graphicsDevice.CreateTexture(new TextureDesc() + { + Format = TextureFormat.RGBA8_Unorm, Width = info.Width, Height = info.Height, + Usage = TextureUsage.RenderTarget | TextureUsage.Sampled + }); + + var surface = CreateFromNativeTexture(texture, new VecI(info.Width, info.Height), defaultSurfaceOrigin, out var framebufferInfo); + if (surface == null) return null; + + framebufferInfos[surface.Handle] = framebufferInfo; + return surface; + } + + internal SKSurface? CreateFromNativeTexture(ITexture renderTexture, VecI size, SurfaceOrigin surfaceOrigin, out IFramebufferInfo fbInfo) + { + if (renderTexture is IVkTexture texture) + { + var imageInfo = new GRVkImageInfo() + { + CurrentQueueFamily = texture.QueueFamily, + Format = texture.ImageFormat, + Image = texture.ImageHandle, + ImageLayout = texture.Layout, + ImageTiling = texture.Tiling, + ImageUsageFlags = texture.UsageFlags, + LevelCount = 1, + SampleCount = 1, + Protected = false, + SharingMode = texture.TargetSharingMode, + }; + + var backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, imageInfo); + var surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)); + + fbInfo = new SkiaFramebufferInfo(backendRenderTarget); + return surface; + } + + if (renderTexture is IWebGlTexture or IOpenGlTexture) + { + uint textureId = renderTexture switch + { + IWebGlTexture wgl => wgl.TextureId, + IOpenGlTexture ogl => ogl.TextureId, + _ => throw new ArgumentException("Unsupported texture type.") + }; + + GRBackendRenderTarget backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, 1, 0, + new GRGlFramebufferInfo(textureId, SKColorType.Rgba8888.ToGlSizedFormat())); + + var surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, + SKColorType.Rgba8888); + + fbInfo = new SkiaFramebufferInfo(backendRenderTarget); + return surface; + } + + throw new ArgumentException("Unsupported texture type."); } public void Dispose(DrawingSurface drawingSurface) { UnmanageAndDispose(drawingSurface.ObjectPointer); + framebufferInfos.Remove(drawingSurface.ObjectPointer, out var framebufferInfo); } public object GetNativeSurface(IntPtr objectPointer) @@ -193,5 +260,15 @@ public RectD GetLocalClipBounds(IntPtr objectPointer) SKRect skRect = this[objectPointer].Canvas.LocalClipBounds; return new RectD(skRect.Left, skRect.Top, skRect.Width, skRect.Height); } + + public IFramebufferInfo? GetFramebufferInfo(IntPtr objectPointer) + { + return framebufferInfos.GetValueOrDefault(objectPointer); + } + + public void AddManagedFramebuffer(IntPtr nativeHandle, IFramebufferInfo fbInfo) + { + framebufferInfos.Add(nativeHandle, fbInfo); + } } -} +} \ No newline at end of file diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index a53b7f0..0dd90e3 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -6,6 +6,7 @@ using Drawie.Backend.Core.Surfaces; using Drawie.Numerics; using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction; using Drawie.Skia.Exceptions; using Drawie.Skia.Implementations; using SkiaSharp; @@ -17,7 +18,7 @@ public class SkiaDrawingBackend : IDrawingBackend { private IVulkanRenderApi? vulkanRenderApi; - public GRContext? GraphicsContext + public GRContext? SkiaGraphicsContext { get => _grContext; private set @@ -30,9 +31,11 @@ private set _grContext = value; } } + + public IGraphicsDevice GraphicsDevice { get; } public IPathEffectImplementation PathEffectImplementation { get; set; } - public bool IsHardwareAccelerated => GraphicsContext != null; + public bool IsHardwareAccelerated => SkiaGraphicsContext != null; public IRenderingDispatcher RenderingDispatcher { get; set; } @@ -59,11 +62,13 @@ private set private GRContext _grContext; - public SkiaDrawingBackend() + public SkiaDrawingBackend(IGraphicsDevice renderApiGraphicsDevice) { SKColorSpace.CreateSrgb(); SKColorSpace.CreateSrgbLinear(); + GraphicsDevice = renderApiGraphicsDevice; + ColorImplementation = new SkiaColorImplementation(); SkiaImgDataImplementation dataImpl = new SkiaImgDataImplementation(); @@ -121,8 +126,7 @@ public SkiaDrawingBackend() SkiaCanvasImplementation canvasImpl = new SkiaCanvasImplementation(paintImpl, imgImpl, bitmapImpl, pathImpl, fontImpl, meshImplementation); - SurfaceImplementation = new SkiaSurfaceImplementation(GraphicsContext, pixmapImpl, canvasImpl, paintImpl); - + SurfaceImplementation = new SkiaSurfaceImplementation(SkiaGraphicsContext, GraphicsDevice, SurfaceOrigin.BottomLeft, pixmapImpl, canvasImpl, paintImpl); canvasImpl.SetSurfaceImplementation(SurfaceImplementation); imgImpl.SetSurfaceImplementation(SurfaceImplementation); @@ -135,8 +139,11 @@ public SkiaDrawingBackend() CanvasImplementation = canvasImpl; } + public IRenderApi ActiveRenderApi { get; private set; } + public void Setup(IRenderApi renderApi) { + ActiveRenderApi = renderApi; if (renderApi is IVulkanRenderApi vulkanRenderApi) { SetupVulkan(vulkanRenderApi.VulkanContext); @@ -165,18 +172,18 @@ public void Setup(IRenderApi renderApi) private void SetupOpenGl(IOpenGlContext openGlContext) { GRGlInterface glInterface = GRGlInterface.CreateOpenGl(openGlContext.GetGlInterface); - GraphicsContext = GRContext.CreateGl(glInterface); - SurfaceImplementation.GrContext = GraphicsContext; + SkiaGraphicsContext = GRContext.CreateGl(glInterface); + SurfaceImplementation.GrContext = SkiaGraphicsContext; } private void SetupAngleOpenGl(IOpenGlContext openGlContext) { GRGlInterface glInterface = GRGlInterface.Create(openGlContext.GetGlInterface); - GraphicsContext = GRContext.CreateGl(glInterface, new GRContextOptions() + SkiaGraphicsContext = GRContext.CreateGl(glInterface, new GRContextOptions() { AvoidStencilBuffers = true }); - SurfaceImplementation.GrContext = GraphicsContext; + SurfaceImplementation.GrContext = SkiaGraphicsContext; } private void SetupWebGl(IWebGlContext webGlContext) @@ -184,8 +191,8 @@ private void SetupWebGl(IWebGlContext webGlContext) try { GRGlInterface glInterface = GRGlInterface.CreateWebGl(webGlContext.GetGlInterface); - GraphicsContext = GRContext.CreateGl(glInterface); - SurfaceImplementation.GrContext = GraphicsContext; + SkiaGraphicsContext = GRContext.CreateGl(glInterface); + SurfaceImplementation.GrContext = SkiaGraphicsContext; } catch (Exception e) { @@ -194,49 +201,16 @@ private void SetupWebGl(IWebGlContext webGlContext) } } - public DrawingSurface CreateRenderSurface(VecI size, ITexture renderTexture, SurfaceOrigin surfaceOrigin) + public DrawingSurface? CreateRenderSurface(VecI size, ITexture renderTexture, SurfaceOrigin surfaceOrigin) { - if (renderTexture is IVkTexture texture) - { - var imageInfo = new GRVkImageInfo() - { - CurrentQueueFamily = texture.QueueFamily, - Format = texture.ImageFormat, - Image = texture.ImageHandle, - ImageLayout = texture.Layout, - ImageTiling = texture.Tiling, - ImageUsageFlags = texture.UsageFlags, - LevelCount = 1, - SampleCount = 1, - Protected = false, - SharingMode = texture.TargetSharingMode, - }; - - var surface = SKSurface.Create(GraphicsContext, new GRBackendRenderTarget(size.X, size.Y, imageInfo), - (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888, - new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)); - - return DrawingSurface.FromNative(surface); - } - else if (renderTexture is IWebGlTexture or IOpenGlTexture) + var native = SurfaceImplementation.CreateFromNativeTexture(renderTexture, size, surfaceOrigin, out var fbInfo); + if (native == null) { - uint textureId = renderTexture switch - { - IWebGlTexture wgl => wgl.TextureId, - IOpenGlTexture ogl => ogl.TextureId, - _ => throw new ArgumentException("Unsupported texture type.") - }; - - GRBackendRenderTarget backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, 1, 0, - new GRGlFramebufferInfo(textureId, SKColorType.Rgba8888.ToGlSizedFormat())); - - var surface = SKSurface.Create(GraphicsContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, - SKColorType.Rgba8888); - - return DrawingSurface.FromNative(surface); + return null; } - throw new ArgumentException("Unsupported texture type."); + SurfaceImplementation.AddManagedFramebuffer(native.Handle, fbInfo); + return DrawingSurface.FromNative(native); } private void SetupVulkan(IVulkanContext vulkanContext) @@ -251,13 +225,13 @@ private void SetupVulkan(IVulkanContext vulkanContext) GetProcedureAddress = vulkanContext.GetProcedureAddress, }; - GraphicsContext = GRContext.CreateVulkan(vkBackendContext); - SurfaceImplementation.GrContext = GraphicsContext; + SkiaGraphicsContext = GRContext.CreateVulkan(vkBackendContext); + SurfaceImplementation.GrContext = SkiaGraphicsContext; } public void Flush() { - GraphicsContext?.Flush(); + SkiaGraphicsContext?.Flush(); } public override string ToString() diff --git a/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs b/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs new file mode 100644 index 0000000..62d8522 --- /dev/null +++ b/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs @@ -0,0 +1,16 @@ +using Drawie.Backend.Core.Surfaces; +using SkiaSharp; + +namespace Drawie.Skia; + +public class SkiaFramebufferInfo : IFramebufferInfo +{ + private GRBackendRenderTarget target; + + public SkiaFramebufferInfo(GRBackendRenderTarget target) + { + this.target = target; + } + + public uint FramebufferId => target.GetGlFramebufferInfo().FramebufferObjectId; +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/Camera.cs b/src/Drawie.Backend.Vertie/Core/Camera.cs new file mode 100644 index 0000000..db916cf --- /dev/null +++ b/src/Drawie.Backend.Vertie/Core/Camera.cs @@ -0,0 +1,65 @@ +using System.Numerics; +using Drawie.Numerics; + +namespace Drawie.Backend.Vertie; + +public class Camera +{ + public Vec3D Position { get; set; } + public Vec3D Forward { get; private set; } + public Vec3D Up { get; private set; } + public Vec3D Right { get; private set; } + public float AspectRatio { get; set; } + + public float Yaw { get; set; } = -90f; + public float Pitch { get; set; } + public Frustum Frustum { get; private set; } + + private float _zoom = 45f; + public float Zoom + { + get => _zoom; + set => _zoom = Math.Clamp(Zoom - value, 1f, 45f); + } + + public Matrix4x4 ViewMatrix => Matrix4x4.CreateLookAt(Position.ToVector3(), (Position + Forward).ToVector3(), Up.ToVector3()); + + public Matrix4x4 ProjectionMatrix => + Matrix4x4.CreatePerspectiveFieldOfView(MathEx.DegreesToRadians * Zoom, AspectRatio, 0.1f, 100f); + + public Quaternion Rotation => Quaternion.CreateFromYawPitchRoll(-MathEx.DegreesToRadians * Yaw, + MathEx.DegreesToRadians * Pitch, 0f); + + public Camera(Vec3D position, Vec3D forward, Vec3D up, float aspectRatio) + { + Position = position; + Forward = forward; + Up = up; + AspectRatio = aspectRatio; + SetDirection(0, 0); + Frustum = new Frustum(this, MathEx.DegreesToRadians * Zoom, 0.1f, 100f); + } + + public void RecalculateFrustum() + { + Frustum = new Frustum(this, MathEx.DegreesToRadians * Zoom, 0.1f, 100f); + } + + public void SetDirection(float xOffset, float yOffset) + { + Yaw += xOffset; + Pitch -= yOffset; + + Pitch = Math.Clamp(Pitch, -89f, 89f); + + var cameraDirection = Vec3D.Zero; + cameraDirection.X = MathF.Cos(MathEx.DegreesToRadians * Yaw) * MathF.Cos(MathEx.DegreesToRadians * Pitch); + cameraDirection.Y = MathF.Sin(MathEx.DegreesToRadians * Pitch); + cameraDirection.Z = MathF.Sin(MathEx.DegreesToRadians * Yaw) * MathF.Cos(MathEx.DegreesToRadians * Pitch); + cameraDirection = cameraDirection.Normalize(); + + Forward = cameraDirection; + Right = Forward.Cross(Vec3D.UnitY).Normalize(); + Up = Right.Cross(cameraDirection).Normalize(); + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/Frustum.cs b/src/Drawie.Backend.Vertie/Core/Frustum.cs new file mode 100644 index 0000000..832ef10 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Core/Frustum.cs @@ -0,0 +1,32 @@ +using Drawie.Numerics; + +namespace Drawie.Backend.Vertie; + +public struct Frustum +{ + public Plane Near { get; private set; } + public Plane Far { get; private set; } + public Plane Left { get; private set; } + public Plane Right { get; private set; } + public Plane Top { get; private set; } + public Plane Bottom { get; private set; } + + public Frustum(Camera camera, float fovY, float zNear, float zFar) : this() + { + Recalculate(camera, fovY, zNear, zFar); + } + + public void Recalculate(Camera camera, float fovY, float zNear, float zFar) + { + float halfVerticalSize = zFar * (float)Math.Tan(fovY / 2); + float halfHorizontalSize = halfVerticalSize * camera.AspectRatio; + Vec3D frontMultFar = zFar * camera.Forward; + + Near = new Plane(camera.Position + zNear * camera.Forward, camera.Forward); + Far = new Plane(camera.Position + frontMultFar, -camera.Forward); + Right = new Plane(camera.Position, camera.Up.Cross(frontMultFar + camera.Right * halfHorizontalSize)); + Left = new Plane(camera.Position, (frontMultFar - camera.Right * halfHorizontalSize).Cross(camera.Up)); + Bottom = new Plane(camera.Position, camera.Right.Cross(frontMultFar - camera.Up * halfVerticalSize)); + Top = new Plane(camera.Position, (frontMultFar + camera.Up * halfVerticalSize).Cross(camera.Right)); + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/Mesh.cs b/src/Drawie.Backend.Vertie/Core/Mesh.cs new file mode 100644 index 0000000..856a25b --- /dev/null +++ b/src/Drawie.Backend.Vertie/Core/Mesh.cs @@ -0,0 +1,18 @@ +using Drawie.RenderApi.Abstraction; +using Drawie.RenderApi.Abstraction.Buffers; + +namespace Drawie.Backend.Vertie.Core; + +public class Mesh +{ + public float[] Vertices { get; set; } + public uint[] Indicies { get; set; } + public int IndexCount { get; set; } + + public Mesh(float[] vertices, uint[] indicies, int indexCount) + { + Vertices = vertices; + Indicies = indicies; + IndexCount = indexCount; + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/Plane.cs b/src/Drawie.Backend.Vertie/Core/Plane.cs new file mode 100644 index 0000000..23fa155 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Core/Plane.cs @@ -0,0 +1,21 @@ +using System.Numerics; +using Drawie.Numerics; + +namespace Drawie.Backend.Vertie; + +public struct Plane +{ + public Vec3D Normal { get; set; } + public Vec3D Point { get; set; } + + public double GetSignedDistance(Vec3D point) + { + return Normal.Dot(point - Point); + } + + public Plane(Vec3D point, Vec3D normal) + { + Normal = normal.Normalize(); + Point = point; + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/Transform.cs b/src/Drawie.Backend.Vertie/Core/Transform.cs new file mode 100644 index 0000000..b1bd9b1 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Core/Transform.cs @@ -0,0 +1,74 @@ +using System.Numerics; +using Drawie.Numerics; + +namespace Drawie.Backend.Vertie; + +public class Transform +{ + private Vec3D _position = Vec3D.Zero; + private float _scale = 1f; + private Quaternion _rotation = Quaternion.Identity; + private Matrix4x4 _cachedMatrix = Matrix4x4.Identity; + + private bool _isDirty = true; + + public Vec3D Position + { + get => _position; + set + { + _position = value; + _isDirty = true; + } + } + + public Vec3D Right + { + get => Vec3D.Transform(Vec3D.UnitX, _rotation); + } + + public Vec3D Up + { + get => Vec3D.Transform(Vec3D.UnitY, _rotation); + } + + public Vec3D Forward + { + get => Vec3D.Transform(Vec3D.UnitZ, _rotation); + } + + public float Scale + { + get => _scale; + set + { + _scale = value; + _isDirty = true; + } + } + + public Quaternion Rotation + { + get => _rotation; + set + { + _rotation = value; + _isDirty = true; + } + } + + public Matrix4x4 ViewMatrix + { + get + { + if (_isDirty) + { + _cachedMatrix = Matrix4x4.Identity * Matrix4x4.CreateFromQuaternion(Rotation) * Matrix4x4.CreateScale(Scale) * + Matrix4x4.CreateTranslation(Position.ToVector3()); + _isDirty = false; + } + + return _cachedMatrix; + } + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj new file mode 100644 index 0000000..59d0110 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj @@ -0,0 +1,23 @@ + + + + net10.0 + enable + enable + Drawie.Backend.Vertie + + + + + + + + + + + + + + + + diff --git a/src/Drawie.Backend.Vertie/Geometry/GeometryData.cs b/src/Drawie.Backend.Vertie/Geometry/GeometryData.cs new file mode 100644 index 0000000..0b081dc --- /dev/null +++ b/src/Drawie.Backend.Vertie/Geometry/GeometryData.cs @@ -0,0 +1,13 @@ +namespace Drawie.Backend.Vertie.Geometry; + +public class GeometryData +{ + public float[] Vertices { get; set; } + public uint [] Indices { get; set; } + + public GeometryData(float[] vertices, uint[] indices) + { + Vertices = vertices.ToArray(); + Indices = indices.ToArray(); + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Geometry/GeometryObject.cs b/src/Drawie.Backend.Vertie/Geometry/GeometryObject.cs new file mode 100644 index 0000000..0061f9f --- /dev/null +++ b/src/Drawie.Backend.Vertie/Geometry/GeometryObject.cs @@ -0,0 +1,17 @@ +namespace Drawie.Backend.Vertie.Geometry; + +public abstract class GeometryObject +{ + public Transform Transform { get; set; } = new Transform(); + public int MaterialIndex { get; set; } = -1; + public GeometryData GeometryData { get; } + + public abstract void Draw(); + public abstract bool IsInFrustum(Frustum frustum, Transform transform); + + public GeometryObject(GeometryData geometryData, int materialIndex) + { + GeometryData = geometryData; + MaterialIndex = materialIndex; + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Helpers/MathEx.cs b/src/Drawie.Backend.Vertie/Helpers/MathEx.cs new file mode 100644 index 0000000..3cda8c1 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Helpers/MathEx.cs @@ -0,0 +1,7 @@ +namespace Drawie.Backend.Vertie; + +public static class MathEx +{ + public const float DegreesToRadians = 0.017453292f; + public const float RadiansToDegrees = 57.2957795f; +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Helpers/NumericsExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/NumericsExtensions.cs new file mode 100644 index 0000000..d3b93b5 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Helpers/NumericsExtensions.cs @@ -0,0 +1,12 @@ +using System.Numerics; +using Drawie.Numerics; + +namespace Drawie.Backend.Vertie; + +public static class NumericsExtensions +{ + public static Vector3 ToVector3(this Vec3D vec) + { + return new Vector3((float)vec.X, (float)vec.Y, (float)vec.Z); + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs new file mode 100644 index 0000000..6800648 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -0,0 +1,79 @@ +using Drawie.Backend.Core.Bridge; +using Drawie.Backend.Vertie.Core; +using Drawie.Backend.Vertie.Rendering; +using Drawie.Numerics; +using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction; +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.Rendering; + +namespace Drawie.Backend.Vertie.Helpers; + +public static class TextureFramebufferExtensions +{ + private static Dictionary cachedMeshBuffers = new Dictionary(); + private static Dictionary cachedShaderPrograms = new Dictionary(); + public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material material) + { + IGraphicsDevice device = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice; + var pipeline = device.CreatePipeline(new PipelineDesc() + { + Depth = new DepthDesc() + { + Enabled = true, + DepthCompare = DepthCompareType.Less, + }, + ShaderProgram = GetOrCreateShaderProgram(device, material), + Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), + }); + + var cmdList = device.CreateCommandList(); + cmdList.BeginRenderPass(fb); + cmdList.SetPipeline(pipeline); + + (IBuffer vertex, IBuffer index) buffers = InitializeBuffers(mesh, device); + cmdList.SetVertexBuffer(buffers.vertex); + cmdList.SetIndexBuffer(buffers.index); + + foreach (var texture in material.Textures) + { + cmdList.BindTexture(texture.Name, texture.Texture); + } + + cmdList.DrawIndexed(mesh.IndexCount); + + var recordedRenderPass = cmdList.EndRenderPass(); + + device.Submit(recordedRenderPass); + } + + private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsDevice, Material material) + { + if (cachedShaderPrograms.ContainsKey(material.Shader)) + { + return cachedShaderPrograms[material.Shader]; + } + + var program = graphicsDevice.CreateShaderProgram(new ShaderProgramDesc(material.Shader.Vertex, material.Shader.Fragment)); + cachedShaderPrograms.Add(material.Shader, program); + + return program; + } + + private static (IBuffer vertex, IBuffer index) InitializeBuffers(Mesh mesh, IGraphicsDevice device) + { + if(cachedMeshBuffers.TryGetValue(mesh, out var buffers)) + { + return buffers; + } + + var vertex = device.CreateBuffer(BufferUsage.Vertex, mesh.Vertices); + var index = device.CreateBuffer(BufferUsage.Index, mesh.Indicies); + + cachedMeshBuffers[mesh] = (vertex, index); + + return (vertex, index); + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs b/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs new file mode 100644 index 0000000..dee8530 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs @@ -0,0 +1,7 @@ +namespace Drawie.Backend.Vertie.Rendering; + +public class CompiledShader(byte[] vertex, byte[] fragment) +{ + public byte[] Vertex { get; } = vertex; + public byte[] Fragment { get; } = fragment; +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/Material.cs b/src/Drawie.Backend.Vertie/Rendering/Material.cs new file mode 100644 index 0000000..75df109 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Rendering/Material.cs @@ -0,0 +1,101 @@ +using System.Collections; +using System.Numerics; +using Drawie.RenderApi; +using SilkNet.Rendering; + +namespace Drawie.Backend.Vertie.Rendering; + +public class Material +{ + public string Name { get; set; } + public CompiledShader Shader { get; set; } + public List Properties { get; set; } = new List(); + public TextureMaterial[] Textures { get; set; } = Array.Empty(); + + private int _textureCount; + + public Material(string name, CompiledShader shader) + { + Name = name; + Shader = shader; + + AddProperty("uModel"); + AddProperty("uView"); + AddProperty("uProjection"); + /* + if (shader.HasUniform("viewPos")) + { + AddProperty("viewPos"); + } + */ + } + + /* + public void PrepareForObject(Transform transform) + { + SetProperty("uModel", transform.ViewMatrix); + UpdateShader(); + } + */ + + + public void AddProperty(string name, T defaultValue = default) where T: struct + { + ShaderProperty property = new ShaderProperty(name, defaultValue); + Properties.Add(property); + } + + /*public void UpdateShader() + { + foreach (ShaderProperty property in Properties) + { + ApplyToShader(property); + } + }*/ + + public void SetProperty(string name, T value) where T : struct + { + foreach (var property in Properties) + { + if (property.UniformName == name) + { + if (property is ShaderProperty prop) + { + prop.Value = value; + return; + } + + throw new Exception($"Property {name} is not of type {typeof(T)}"); + } + } + + throw new Exception($"Property {name} does not exist"); + } + + /*private void ApplyToShader(ShaderProperty prop) + { + switch (prop.ObjValue) + { + case float floatValue: + Shader.SetUniform(prop.UniformName, floatValue); + break; + case int intValue: + Shader.SetUniform(prop.UniformName, intValue); + break; + case Vector3 vec3: + Shader.SetUniform(prop.UniformName, vec3); + break; + case Matrix4x4 mat4: + Shader.SetUniform(prop.UniformName, mat4); + break; + default: + throw new Exception($"Property {prop.UniformName} is not a supported type"); + } + }*/ +} + +public struct TextureMaterial +{ + public string Name { get; set; } + public ITexture Texture { get; set; } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/ShaderDefiniton.cs b/src/Drawie.Backend.Vertie/Rendering/ShaderDefiniton.cs new file mode 100644 index 0000000..3472b07 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Rendering/ShaderDefiniton.cs @@ -0,0 +1,40 @@ +using System.Numerics; +using Slangc.NET; + +namespace Drawie.Backend.Vertie.Rendering; + +public sealed class ShaderDefiniton +{ + public string SourceCode { get; } + private Guid id = Guid.NewGuid(); + + public ShaderDefiniton(string slangCode) + { + SourceCode = slangCode; + } + + public CompiledShader Compile() + { + var vertex = SlangCompiler.Compile(SourceCode, + [ + "-profile", "glsl_450", + "-matrix-layout-row-major", + "-fvk-use-entrypoint-name", + "-entry", "VSMain", + "-stage", "vertex", + "-target", "spirv" + ]); + + var fragment = SlangCompiler.Compile(SourceCode, + [ + "-profile", "glsl_450", + "-matrix-layout-row-major", + "-fvk-use-entrypoint-name", + "-entry", "FSMain", + "-stage", "fragment", + "-target", "spirv" + ]); + + return new CompiledShader(vertex, fragment); + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/ShaderProperty.cs b/src/Drawie.Backend.Vertie/Rendering/ShaderProperty.cs new file mode 100644 index 0000000..1260212 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Rendering/ShaderProperty.cs @@ -0,0 +1,29 @@ +namespace SilkNet.Rendering; + +public class ShaderProperty +{ + public string UniformName { get; set; } + public object ObjValue { get; set; } + public Type Type { get; set; } + + public ShaderProperty(string name) + { + UniformName = name; + } +} + +public class ShaderProperty : ShaderProperty +{ + public T Value + { + get => (T)ObjValue; + set => ObjValue = value; + } + + public ShaderProperty(string uniformName, T value) : base(uniformName) + { + UniformName = uniformName; + ObjValue = value; + Type = typeof(T); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.3D.Test/Rendering/Shader.cs b/src/Drawie.Layer.3D.Test/Rendering/MatShader.cs similarity index 94% rename from src/Drawie.Layer.3D.Test/Rendering/Shader.cs rename to src/Drawie.Layer.3D.Test/Rendering/MatShader.cs index 510acc9..67a8d03 100644 --- a/src/Drawie.Layer.3D.Test/Rendering/Shader.cs +++ b/src/Drawie.Layer.3D.Test/Rendering/MatShader.cs @@ -3,9 +3,9 @@ namespace SilkNet.Rendering; -public sealed class Shader : NativeObject +public sealed class MatShader : NativeObject { - public Shader(GL glContext, string rawVertex, string rawFragment) : base(glContext, glContext.CreateProgram()) + public MatShader(GL glContext, string rawVertex, string rawFragment) : base(glContext, glContext.CreateProgram()) { uint vertex = InitShader(ShaderType.VertexShader, rawVertex); uint fragment = InitShader(ShaderType.FragmentShader, rawFragment); diff --git a/src/Drawie.Layer.3D.Test/Rendering/Material.cs b/src/Drawie.Layer.3D.Test/Rendering/Material.cs index e811ac6..3ea7a5b 100644 --- a/src/Drawie.Layer.3D.Test/Rendering/Material.cs +++ b/src/Drawie.Layer.3D.Test/Rendering/Material.cs @@ -6,13 +6,13 @@ namespace SilkNet.Rendering; public class Material : IDisposable { public string Name { get; set; } - public Shader Shader { get; set; } + public MatShader Shader { get; set; } public List Properties { get; set; } = new List(); public Texture[] Textures { get; set; } = new Texture[32]; private int _textureCount; - public Material(string name, Shader shader) + public Material(string name, MatShader shader) { Name = name; Shader = shader; diff --git a/src/Drawie.Layer.3D.Test/ThreeDTest.cs b/src/Drawie.Layer.3D.Test/ThreeDTest.cs index e0ce496..be686e8 100644 --- a/src/Drawie.Layer.3D.Test/ThreeDTest.cs +++ b/src/Drawie.Layer.3D.Test/ThreeDTest.cs @@ -11,15 +11,14 @@ using SilkNet.Geometry.Primitives; using SilkNet.Optimization; using SilkNet.Rendering; -using Shader = SilkNet.Rendering.Shader; using Texture = SilkNet.Rendering.Texture; namespace Drawie.Layer.ThreeD.Test; public class ThreeDTest : ILayer { - private static Shader _lampShader; - private static Shader _lightingShader; + private static MatShader _lampShader; + private static MatShader _lightingShader; private static Texture _diffuseMap; private static Texture _specularMap; private static Gif _dogGif; @@ -84,8 +83,8 @@ private void OnLoad(IGraphicsContext renderApiGraphicsContext) ShaderLoader.LitShader = ShaderLoader.LoadRaw("LitShader"); //The lighting shader will give our main cube its colour multiplied by the lights intensity - _lightingShader = new Shader(GlContext, ShaderLoader.VertexShader, ShaderLoader.LitShader); - _lampShader = new Shader(GlContext, ShaderLoader.BasicVertexShader, ShaderLoader.UnlitShader); + _lightingShader = new MatShader(GlContext, ShaderLoader.VertexShader, ShaderLoader.LitShader); + _lampShader = new MatShader(GlContext, ShaderLoader.BasicVertexShader, ShaderLoader.UnlitShader); _diffuseMap = new Texture(GlContext, "Images/silkBoxed.png"); _specularMap = new Texture(GlContext, "Images/silkSpecular.png"); diff --git a/src/Drawie.Numerics/Vec3D.cs b/src/Drawie.Numerics/Vec3D.cs index ebb2c71..8168ff6 100644 --- a/src/Drawie.Numerics/Vec3D.cs +++ b/src/Drawie.Numerics/Vec3D.cs @@ -1,7 +1,14 @@ -namespace Drawie.Numerics; +using System.Numerics; + +namespace Drawie.Numerics; public struct Vec3D { + public static Vec3D Zero { get; } = new(0, 0, 0); + public static Vec3D UnitX { get; } = new(1, 0, 0); + public static Vec3D UnitY { get; } = new(0, 1, 0); + public static Vec3D UnitZ { get; } = new(0, 0, 1); + public double X { get; set; } public double Y { get; set; } public double Z { get; set; } @@ -12,7 +19,6 @@ public struct Vec3D public double Length => Math.Sqrt(LengthSquared); public double LengthSquared => X * X + Y * Y + Z * Z; - public static Vec3D Zero { get; } = new(0, 0, 0); public Vec3D(double x, double y, double z) { @@ -66,6 +72,15 @@ public Vec3D Signs() public double Dot(Vec3D other) => (X * other.X) + (Y * other.Y) + (Z * other.Z); + public Vec3D Cross(Vec3D other) + { + return new Vec3D( + Y * other.Z - Z * other.Y, + Z * other.X - X * other.Z, + X * other.Y - Y * other.X + ); + } + public Vec3D Multiply(Vec3D other) { return new Vec3D(X * other.X, Y * other.Y, Z * other.Z); @@ -173,4 +188,12 @@ public bool AlmostEquals(Vec3D other, double axisEpsilon = 0.001) double dZ = Math.Abs(Z - other.Z); return dX < axisEpsilon && dY < axisEpsilon && dZ < axisEpsilon; } + + public static Vec3D Transform(Vec3D vector, Quaternion rotation) + { + // Maybe one day we can implement our own formula ;P + var v = new Vector3((float)vector.X, (float)vector.Y, (float)vector.Z); + var transformed = Vector3.Transform(v, rotation); + return new Vec3D(transformed.X, transformed.Y, transformed.Z); + } } diff --git a/src/Drawie.RenderApi.OpenGl/Extensions/BufferUsageExtensions.cs b/src/Drawie.RenderApi.OpenGl/Extensions/BufferUsageExtensions.cs new file mode 100644 index 0000000..8c681eb --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/Extensions/BufferUsageExtensions.cs @@ -0,0 +1,19 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL.Extensions; + +public static class BufferUsageExtensions +{ + public static BufferTargetARB ToOpenGlTargetARB(this BufferUsage usage) + { + return usage switch + { + BufferUsage.Vertex => BufferTargetARB.ArrayBuffer, + BufferUsage.Index => BufferTargetARB.ElementArrayBuffer, + BufferUsage.Uniform => BufferTargetARB.UniformBuffer, + BufferUsage.Storage => BufferTargetARB.ShaderStorageBuffer, + _ => throw new ArgumentOutOfRangeException() + }; + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs b/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs new file mode 100644 index 0000000..6282544 --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs @@ -0,0 +1,49 @@ +using Drawie.RenderApi.Abstraction; +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.OpenGL.Extensions; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; + +public class OpenGlBuffer : IBuffer where TData : unmanaged +{ + public int Handle { get; } + public uint NativeHandle => openglHandle; + public BufferUsage Usage { get; } + public uint Size { get; } + + private uint openglHandle; + private GL api; + + public OpenGlBuffer(GL api, int handle, BufferUsage usage, TData[]? data = null) + { + Handle = handle; + Usage = usage; + this.api = api; + openglHandle = api.GenBuffer(); + if (data != null) + { + unsafe + { + Size = (uint)data.Length; + fixed (void* d = data) + { + BufferTargetARB bufferType = ToBufferType(); + api.BindBuffer(bufferType, openglHandle); + api.BufferData(bufferType, (nuint)(Size * (uint)sizeof(TData)), d, BufferUsageARB.StaticDraw); + } + } + } + + } + + public void Dispose() + { + api.DeleteBuffer(openglHandle); + } + + private BufferTargetARB ToBufferType() + { + return Usage.ToOpenGlTargetARB(); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs new file mode 100644 index 0000000..7d03241 --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -0,0 +1,93 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.CommandRecording; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.OpenGL.Extensions; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; + +public class OpenGlCommandList(GL api) : ICommandList +{ + public GL Api { get; } = api; + + private List instructions = new List(); + + private IBuffer? vertexBuffer; + private IBuffer? indexBuffer; + private uint vao; + + public void BeginRenderPass(IRenderTarget fb) + { + instructions?.Clear(); + RecordInstruction(() => Api.BindFramebuffer(FramebufferTarget.Framebuffer, fb.FramebufferId)); + } + + public void SetPipeline(IPipeline pipeline) + { + RecordInstruction(() => pipeline.Apply()); + } + + public void SetVertexBuffer(IBuffer vertexBuffer) + { + this.vertexBuffer = vertexBuffer; + RecordInstruction(() => Api.BindBuffer(vertexBuffer.Usage.ToOpenGlTargetARB(), vertexBuffer.NativeHandle)); + HandleVao(); + } + + public void SetIndexBuffer(IBuffer indexBuffer) + { + this.indexBuffer = indexBuffer; + RecordInstruction(() => Api.BindBuffer(indexBuffer.Usage.ToOpenGlTargetARB(), indexBuffer.NativeHandle)); + } + + public void BindTexture(string textureName, ITexture texture) + { + throw new NotImplementedException(); + } + + public unsafe void DrawIndexed(int indexCount) + { + RecordInstruction(() => Api.DrawArrays(PrimitiveType.Triangles, 0, 3)); + } + + public RecordedRenderPass EndRenderPass() + { + RecordInstruction(() => Api.BindFramebuffer(FramebufferTarget.Framebuffer, 0)); + return new RecordedRenderPass(instructions.ToArray()); + } + + private void RecordInstruction(Action instruction) + { + instructions.Add(instruction); + } + + private unsafe void HandleVao() + { + if (vertexBuffer == null) + return; + + RecordInstruction(() => + { + if (vao == 0) + { + vao = Api.GenVertexArray(); + } + + Api.BindVertexArray(vao); + Api.BindBuffer( + vertexBuffer.Usage.ToOpenGlTargetARB(), + vertexBuffer.NativeHandle); + + Api.EnableVertexAttribArray(0); + + Api.VertexAttribPointer( + 0, + 3, + VertexAttribPointerType.Float, + false, + 3 * sizeof(float), + null); + }); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs new file mode 100644 index 0000000..09bdf79 --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -0,0 +1,151 @@ +using Drawie.RenderApi.Abstraction; +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.CommandRecording; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Abstraction.Textures; +using Silk.NET.OpenGL; +using ShaderType = Drawie.RenderApi.Abstraction.Shaders.ShaderType; + +namespace Drawie.RenderApi.OpenGL; + +public class OpenGlDevice : IGraphicsDevice +{ + private int handleCounter = 0; + public GL Api { get; } + + public OpenGlDevice(GL api) + { + Api = api; + } + + public Dictionary ManagedObjects { get; } = new Dictionary(); + + public IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged + { + return new OpenGlBuffer(Api, GetNextHandle(), usage, data); + } + + public ITexture CreateTexture(TextureDesc desc) + { + throw new NotImplementedException(); + } + + public IPipeline CreatePipeline(PipelineDesc desc) + { + return new OpenGlPipeline(desc, Api); + } + + public ICommandList CreateCommandList() + { + return new OpenGlCommandList(Api); + } + + public void Submit(RecordedRenderPass recordedRenderPass) + { + foreach (var instruction in recordedRenderPass.Instructions) + { + instruction.Invoke(); + } + } + + public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) + { + var program = Api.CreateProgram(); + + uint vertex = 0; + uint fragment = 0; + + if (desc.VertexShaderBytes != null) + { + vertex = Api.CreateShader( + ToOpenGlShaderType(ShaderType.Vertex)); + + fixed (byte* bytes = desc.VertexShaderBytes) + { + Api.ShaderBinary( + 1, + &vertex, + ShaderBinaryFormat.ShaderBinaryFormatSpirV, + bytes, + (uint)desc.VertexShaderBytes.Length); + } + + Api.SpecializeShader( + vertex, + "VSMain", + 0, + null, + null); + + Api.AttachShader(program, vertex); + } + + if (desc.FragmentShaderBytes != null) + { + fragment = Api.CreateShader( + ToOpenGlShaderType(ShaderType.Fragment)); + + fixed (byte* bytes = desc.FragmentShaderBytes) + { + Api.ShaderBinary( + 1, + &fragment, + ShaderBinaryFormat.ShaderBinaryFormatSpirV, + bytes, + (uint)desc.FragmentShaderBytes.Length); + } + + Api.SpecializeShader( + fragment, + "FSMain", + 0, + null, + null); + + Api.AttachShader(program, fragment); + } + + Api.LinkProgram(program); + + Api.GetProgram(program, GLEnum.LinkStatus, out var status); + + if (status == 0) + { + throw new Exception($"Program failed to link with error: {Api.GetProgramInfoLog(program)}"); + } + + if (vertex != 0) + { + Api.DetachShader(program, vertex); + Api.DeleteShader(vertex); + } + + if (fragment != 0) + { + Api.DetachShader(program, fragment); + Api.DeleteShader(fragment); + } + + return new OpenGlShaderProgram(Api, program); + } + + private Silk.NET.OpenGL.ShaderType ToOpenGlShaderType(ShaderType shaderType) + { + switch (shaderType) + { + case ShaderType.Vertex: + return Silk.NET.OpenGL.ShaderType.VertexShader; + case ShaderType.Fragment: + return Silk.NET.OpenGL.ShaderType.FragmentShader; + default: + throw new ArgumentOutOfRangeException(nameof(shaderType), shaderType, null); + } + } + + private int GetNextHandle() + { + handleCounter++; + return handleCounter; + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs new file mode 100644 index 0000000..a9200bc --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs @@ -0,0 +1,48 @@ +using System.Drawing; +using Drawie.RenderApi.Abstraction.Pipeline; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; + +public class OpenGlPipeline : IPipeline +{ + public GL Api { get; } + public PipelineDesc Description { get; } + + public OpenGlPipeline(PipelineDesc description, GL api) + { + Description = description; + Api = api; + } + + public void Apply() + { + Api.Viewport(new Rectangle(Description.Viewport.X, Description.Viewport.Y, Description.Viewport.Width, Description.Viewport.Height)); + if (Description.Blend.Enabled) + { + Api.Enable(EnableCap.Blend); + } + + if (Description.Depth.Enabled) + { + Api.Enable(EnableCap.DepthTest); + Api.DepthFunc(ToOpenGlDesc(Description.Depth.DepthCompare)); + } + + Description.ShaderProgram?.Use(); + } + + private DepthFunction ToOpenGlDesc(DepthCompareType depthDepthCompare) + { + return depthDepthCompare switch + { + DepthCompareType.Less => DepthFunction.Less, + DepthCompareType.LessEqual => DepthFunction.Lequal, + DepthCompareType.Equal => DepthFunction.Equal, + DepthCompareType.Greater => DepthFunction.Greater, + DepthCompareType.GreaterEqual => DepthFunction.Gequal, + DepthCompareType.Always => DepthFunction.Always, + _ => throw new ArgumentOutOfRangeException(nameof(depthDepthCompare), depthDepthCompare, null) + }; + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs index 19b5c0d..cfb69b0 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs @@ -1,10 +1,15 @@ -namespace Drawie.RenderApi.OpenGL; +using Drawie.RenderApi.Abstraction; +using Silk.NET.Core.Contexts; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; public class OpenGlRenderApi : IOpenGlRenderApi { private List windowRenderApis = new List(); public IReadOnlyCollection WindowRenderApis => windowRenderApis; + public IGraphicsDevice GraphicsDevice { get; private set; } public IOpenGlContext OpenGlContext { @@ -30,6 +35,7 @@ public OpenGlRenderApi() public OpenGlRenderApi(IOpenGlContext context) { this.context = context; + CreateGraphicsDevice(context); } public IWindowRenderApi CreateWindowRenderApi() @@ -37,6 +43,16 @@ public IWindowRenderApi CreateWindowRenderApi() OpenGlWindowRenderApi renderApi = new OpenGlWindowRenderApi(); windowRenderApis.Add(renderApi); + if (GraphicsDevice == null) + { + CreateGraphicsDevice(OpenGlContext); + } + return renderApi; } + + private void CreateGraphicsDevice(IOpenGlContext context) + { + GraphicsDevice = new OpenGlDevice(new GL(new LamdaNativeContext(context.GetGlInterface))); + } } diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs b/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs new file mode 100644 index 0000000..5c66d57 --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs @@ -0,0 +1,21 @@ +using Drawie.RenderApi.Abstraction.Shaders; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; + +public class OpenGlShaderProgram : IShaderProgram +{ + public uint ProgramHandle { get; } + public GL Api { get; } + + public OpenGlShaderProgram(GL gl, uint programHandle) + { + ProgramHandle = programHandle; + Api = gl; + } + + public void Use() + { + Api.UseProgram(ProgramHandle); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs index 29ee50b..8b9f66e 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs @@ -1,3 +1,4 @@ +using Drawie.RenderApi.Abstraction; using Silk.NET.Vulkan; namespace Drawie.RenderApi.Vulkan; @@ -6,6 +7,7 @@ public class VulkanRenderApi : IVulkanRenderApi { private List windowRenderApis = new List(); public IReadOnlyCollection WindowRenderApis => windowRenderApis; + public IGraphicsDevice GraphicsDevice { get; private set; } public IVulkanContext VulkanContext { get; private set; } IReadOnlyCollection IVulkanRenderApi.WindowRenderApis => @@ -40,4 +42,9 @@ public IWindowRenderApi CreateWindowRenderApi() windowRenderApis.Add(windowRenderApi); return windowRenderApi; } + + private void CreateGraphicsDevice(IVulkanContext context) + { + throw new NotImplementedException(); + } } diff --git a/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs b/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs new file mode 100644 index 0000000..8ca6f43 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs @@ -0,0 +1,9 @@ +namespace Drawie.RenderApi.Abstraction.Buffers; + +public enum BufferUsage +{ + Vertex, + Index, + Uniform, + Storage +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs b/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs new file mode 100644 index 0000000..22fe92a --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.Abstraction.Buffers; + +public interface IBuffer : INativeObject +{ + public BufferUsage Usage { get; } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs new file mode 100644 index 0000000..2eca71a --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs @@ -0,0 +1,16 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; + +namespace Drawie.RenderApi.Abstraction.CommandRecording; + +public interface ICommandList +{ + void BeginRenderPass(IRenderTarget fb); + void SetPipeline(IPipeline pipeline); + void SetVertexBuffer(IBuffer vertexBuffer); + void SetIndexBuffer(IBuffer indexBuffer); + void BindTexture(string textureName, ITexture texture); + void DrawIndexed(int indexCount); + RecordedRenderPass EndRenderPass(); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/RecordedRenderPass.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/RecordedRenderPass.cs new file mode 100644 index 0000000..9432d51 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/RecordedRenderPass.cs @@ -0,0 +1,11 @@ +namespace Drawie.RenderApi.Abstraction.CommandRecording; + +public class RecordedRenderPass +{ + public Action[] Instructions { get; } + + public RecordedRenderPass(Action[] instructions) + { + Instructions = instructions; + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs new file mode 100644 index 0000000..9709548 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs @@ -0,0 +1,24 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.CommandRecording; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Abstraction.Textures; + +namespace Drawie.RenderApi.Abstraction; + +public interface IGraphicsDevice +{ + IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged; + ITexture CreateTexture(TextureDesc desc); + IPipeline CreatePipeline(PipelineDesc desc); + ICommandList CreateCommandList(); + + Dictionary ManagedObjects { get; } + + /* + ISampler CreateSampler(SamplerDesc desc); + IShader CreateShader(ShaderDesc desc); + */ + void Submit(RecordedRenderPass cmdList); + IShaderProgram CreateShaderProgram(ShaderProgramDesc shaderProgramDesc); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/INativeObject.cs b/src/Drawie.RenderApi/Abstraction/INativeObject.cs new file mode 100644 index 0000000..0dfb4a3 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/INativeObject.cs @@ -0,0 +1,7 @@ +namespace Drawie.RenderApi.Abstraction; + +public interface INativeObject : IDisposable +{ + public int Handle { get; } + public uint NativeHandle { get; } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/IPipeline.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/IPipeline.cs new file mode 100644 index 0000000..21f8e20 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/IPipeline.cs @@ -0,0 +1,9 @@ +using System.Collections; + +namespace Drawie.RenderApi.Abstraction.Pipeline; + +public interface IPipeline +{ + PipelineDesc Description { get; } + void Apply(); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs new file mode 100644 index 0000000..7405e56 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs @@ -0,0 +1,34 @@ +using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Shaders; + +namespace Drawie.RenderApi.Abstraction.Pipeline; + +public struct PipelineDesc +{ + public IShaderProgram? ShaderProgram { get; set; } + public IShaderProgram? FragmentShader { get; set; } + public DepthDesc Depth { get; set; } + public BlendDesc Blend { get; set; } + public RectI Viewport { get; set; } +} + +public struct DepthDesc +{ + public bool Enabled { get; set; } + public DepthCompareType DepthCompare { get; set; } +} + +public enum DepthCompareType +{ + Less, + LessEqual, + Equal, + Greater, + GreaterEqual, + Always +} + +public struct BlendDesc +{ + public bool Enabled; +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs b/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs new file mode 100644 index 0000000..278b7f0 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.Abstraction.RenderTargets; + +public interface IRenderTarget +{ + uint FramebufferId { get; } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs b/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs new file mode 100644 index 0000000..72f7b2e --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.Abstraction.Shaders; + +public interface IShaderProgram +{ + public void Use(); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs new file mode 100644 index 0000000..b4eee0b --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs @@ -0,0 +1,13 @@ +namespace Drawie.RenderApi.Abstraction.Shaders; + +public struct ShaderProgramDesc +{ + public byte[] VertexShaderBytes { get; } + public byte[] FragmentShaderBytes { get; } + + public ShaderProgramDesc(byte[] vertexShaderBytes, byte[] fragmentShaderBytes) + { + VertexShaderBytes = vertexShaderBytes; + FragmentShaderBytes = fragmentShaderBytes; + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs new file mode 100644 index 0000000..a901a75 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs @@ -0,0 +1,7 @@ +namespace Drawie.RenderApi.Abstraction.Shaders; + +public enum ShaderType +{ + Vertex, + Fragment +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/ITexture.cs b/src/Drawie.RenderApi/Abstraction/Textures/ITexture.cs similarity index 100% rename from src/Drawie.RenderApi/ITexture.cs rename to src/Drawie.RenderApi/Abstraction/Textures/ITexture.cs diff --git a/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs b/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs new file mode 100644 index 0000000..a8c4567 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs @@ -0,0 +1,10 @@ +namespace Drawie.RenderApi.Abstraction.Textures; + +public struct TextureDesc +{ + public int Width; + public int Height; + + public TextureFormat Format; + public TextureUsage Usage; +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Textures/TextureFormat.cs b/src/Drawie.RenderApi/Abstraction/Textures/TextureFormat.cs new file mode 100644 index 0000000..5990c4a --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Textures/TextureFormat.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.Abstraction.Textures; + +public enum TextureFormat +{ + RGBA8_Unorm +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Textures/TextureUsage.cs b/src/Drawie.RenderApi/Abstraction/Textures/TextureUsage.cs new file mode 100644 index 0000000..6c35de1 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Textures/TextureUsage.cs @@ -0,0 +1,9 @@ +namespace Drawie.RenderApi.Abstraction.Textures; + +[Flags] +public enum TextureUsage +{ + Sampled, + RenderTarget, + DepthStencil +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/IRenderApi.cs b/src/Drawie.RenderApi/IRenderApi.cs index 821424e..c433088 100644 --- a/src/Drawie.RenderApi/IRenderApi.cs +++ b/src/Drawie.RenderApi/IRenderApi.cs @@ -1,7 +1,10 @@ +using Drawie.RenderApi.Abstraction; + namespace Drawie.RenderApi; public interface IRenderApi { public IReadOnlyCollection WindowRenderApis { get; } + public IGraphicsDevice GraphicsDevice { get; } public IWindowRenderApi CreateWindowRenderApi(); } \ No newline at end of file diff --git a/src/Drawie.Rendering/Texture.cs b/src/Drawie.Rendering/Texture.cs index 5ce2471..d9519cd 100644 --- a/src/Drawie.Rendering/Texture.cs +++ b/src/Drawie.Rendering/Texture.cs @@ -9,7 +9,6 @@ namespace Drawie.Rendering; public class Texture { internal NativeTexture NativeTexture { get; } - public TextureState State { get; internal set; } = TextureState.Submitted; public int Width { get; } public int Height { get; } public VecI Size => new VecI(Width, Height); @@ -20,12 +19,4 @@ internal Texture(NativeTexture native) Width = native.Size.X; Height = native.Size.Y; } -} - -public enum TextureState -{ - Editing, - WaitingForSubmit, - Submitting, - Submitted, } \ No newline at end of file diff --git a/src/Drawie.Rendering/TextureFramebuffer.cs b/src/Drawie.Rendering/TextureFramebuffer.cs index 291e0a9..367cfbe 100644 --- a/src/Drawie.Rendering/TextureFramebuffer.cs +++ b/src/Drawie.Rendering/TextureFramebuffer.cs @@ -1,12 +1,14 @@ +using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.ColorsImpl.Paintables; using Drawie.Backend.Core.Surfaces; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.RenderTargets; using Drawie.Rendering.Exceptions; namespace Drawie.Rendering; -public class TextureFramebuffer : IDisposable +public class TextureFramebuffer : IDisposable, IRenderTarget { internal Texture UnderlyingTexture { get; } public bool IsOpen { get; private set; } @@ -32,6 +34,12 @@ public void Clear() UnderlyingTexture.NativeTexture.DrawingSurface.Canvas.Clear(); } + public void Clear(Color color) + { + ThrowIfNotOpen(); + UnderlyingTexture.NativeTexture.DrawingSurface.Canvas.Clear(color); + } + public void DrawRectangle(float x, float y, float width, float height, Paintable paintable) { ThrowIfNotOpen(); @@ -56,4 +64,5 @@ public void Dispose() UnderlyingTexture.NativeTexture.DrawingSurface.Flush(); } + uint IRenderTarget.FramebufferId => UnderlyingTexture.NativeTexture.FramebufferId; } \ No newline at end of file diff --git a/src/Drawie.sln b/src/Drawie.sln index 7acec6f..04119fe 100644 --- a/src/Drawie.sln +++ b/src/Drawie.sln @@ -71,6 +71,10 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.UI.ImGui", "Dr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.3D.Test", "Drawie.Layer.3D.Test\Drawie.Layer.3D.Test.csproj", "{946CC678-5FDF-4473-9D1E-19CC3058DFAB}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Backend.Vertie", "Drawie.Backend.Vertie\Drawie.Backend.Vertie.csproj", "{154B8B31-8819-4996-B8F7-C6DE0BDC87A7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShaderPlayground", "ShaderPlayground\ShaderPlayground.csproj", "{EB963B58-ECBA-400D-887E-F7598C7F7894}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -192,6 +196,14 @@ Global {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Debug|Any CPU.Build.0 = Debug|Any CPU {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Release|Any CPU.ActiveCfg = Release|Any CPU {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Release|Any CPU.Build.0 = Release|Any CPU + {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Release|Any CPU.Build.0 = Release|Any CPU + {EB963B58-ECBA-400D-887E-F7598C7F7894}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EB963B58-ECBA-400D-887E-F7598C7F7894}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EB963B58-ECBA-400D-887E-F7598C7F7894}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EB963B58-ECBA-400D-887E-F7598C7F7894}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {645AF54D-D58F-492E-A2A9-12F86EA8C00A} = {239DB1B4-E66F-444A-87DA-B19775F40974} @@ -216,5 +228,7 @@ Global {A9DB4D66-CD25-40E9-8F72-C5341D6C6564} = {239DB1B4-E66F-444A-87DA-B19775F40974} {7CACCC0C-044C-4ACE-B018-518F8D223D4A} = {8F709A50-C8C2-46FC-8355-A96701FFC359} {946CC678-5FDF-4473-9D1E-19CC3058DFAB} = {8F709A50-C8C2-46FC-8355-A96701FFC359} + {154B8B31-8819-4996-B8F7-C6DE0BDC87A7} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} + {EB963B58-ECBA-400D-887E-F7598C7F7894} = {239DB1B4-E66F-444A-87DA-B19775F40974} EndGlobalSection EndGlobal diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 28cf6b4..0894b47 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -3,6 +3,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/Drawie2Sample/Cube.cs b/src/Drawie2Sample/Cube.cs new file mode 100644 index 0000000..e7be032 --- /dev/null +++ b/src/Drawie2Sample/Cube.cs @@ -0,0 +1,24 @@ +using Drawie.Backend.Vertie.Core; + +namespace Drawie2Sample; + +public class Cube : Mesh +{ + private static readonly float[] Vertices = + { + // position + 0.0f, 0.8f, 0.0f, + -0.8f, -0.8f, 0.0f, + 0.8f, -0.8f, 0.0f + }; + + private static readonly uint[] Indices = + { + 0, 1, 3, + 1, 2, 3 + }; + + public Cube() : base(Vertices, Indices, Indices.Length) + { + } +} \ No newline at end of file diff --git a/src/Drawie2Sample/Drawie2Sample.csproj b/src/Drawie2Sample/Drawie2Sample.csproj index 4406534..2eadc60 100644 --- a/src/Drawie2Sample/Drawie2Sample.csproj +++ b/src/Drawie2Sample/Drawie2Sample.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 8584dd6..82400b7 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -4,6 +4,8 @@ using Drawie.Backend.Core.ColorsImpl.Paintables; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Core.Text; +using Drawie.Backend.Vertie.Helpers; +using Drawie.Backend.Vertie.Rendering; using Drawie.Layer.ThreeD.Test; using Drawie.Layer.UI.ImGui; using Drawie.Numerics; @@ -15,13 +17,28 @@ namespace Drawie2Sample; public class Drawie2SampleApp : DrawieApp { + private string shader = """ + [shader("vertex")] + float4 VSMain(float3 position : POSITION) : SV_Position + { + return float4(position, 1.0); + } + + [shader("fragment")] + float4 FSMain() : SV_Target + { + return float4(1, 0, 0, 1); + } + """; + private IWindow window; + private Material material; public override IWindow CreateMainWindow() { window = Engine.WindowingPlatform.CreateWindow("Drawie 2 Sample", new VecI(1920, 1080)); //window.AddLayer(new ThreeDTest()); - window.AddLayer(new ImGuiLayer(RenderImGui)); + //window.AddLayer(new ImGuiLayer(RenderImGui)); return window; } @@ -32,6 +49,10 @@ private void RenderImGui(double dt) protected override void OnInitialize() { + var matShader = new ShaderDefiniton(this.shader); + var compiled = matShader.Compile(); + Material mat = new Material("Basic", compiled); + window.Render += (targetTexture, deltaTime) => { targetTexture.Clear(); @@ -50,6 +71,8 @@ protected override void OnInitialize() using Paint p = new Paint() { Paintable = color }; rt.Paint(targetTexture.Canvas, new VecD(0, 20), defaultFont, p, null); + + targetTexture.DrawMesh(new Cube(), mat); }; } } diff --git a/src/ShaderPlayground/Program.cs b/src/ShaderPlayground/Program.cs new file mode 100644 index 0000000..46fa5cd --- /dev/null +++ b/src/ShaderPlayground/Program.cs @@ -0,0 +1,94 @@ +using Drawie.Backend.Vertie.Rendering; + +string code = """ + [__AttributeUsage(_AttributeTargets.Var)] + struct DragFloatAttribute + { + string Description; + + float MinValue; + + float MaxValue; + + float Speed; + }; + + struct Constants + { + float4x4 Projection; + + float4x4 View; + + float4x4 Model; + }; + + struct VSInput + { + float2 Position : POSITION0; + + float2 UV : TEXCOORD0; + + float4 Color : COLOR0; + }; + + struct VSOutput + { + float4 Position : SV_POSITION; + + float2 UV : TEXCOORD0; + + float4 Color : COLOR0; + }; + + struct Block + { + Constants Constants; + + Texture2D Texture; + + SamplerState Sampler; + + RWTexture2D OutputTexture; + }; + + uniform ParameterBlock block; + + [DragFloat("Gamma", 0.0, 3.0, 0.1)] + uniform float Gamma; + + float3 SrgbToLinear(float3 srgb) + { + return srgb * (srgb * (srgb * 0.305306011 + 0.682171111) + 0.012522878); + } + + [shader("vertex")] + VSOutput VSMain(VSInput input) + { + float4x4 mvp = block.Constants.Projection * block.Constants.View * block.Constants.Model; + + VSOutput output; + + output.Position = mul(mvp, float4(input.Position, 0.0f, 1.0f)); + output.UV = input.UV; + output.Color = input.Color; + output.Color.rgb = SrgbToLinear(output.Color.rgb); + + return output; + } + + [shader("pixel")] + float4 PSMain(VSOutput input) : SV_TARGET + { + return input.Color * block.Texture.Sample(block.Sampler, input.UV); + } + + [shader("compute")] + [numthreads(8, 8, 1)] + void CSMain(uint3 DTid: SV_DispatchThreadID) + { + block.OutputTexture[DTid.xy] = float4(1.0f, 0.0f, 0.0f, 1.0f); + } + """; + +ShaderDefiniton shaderDefiniton = new ShaderDefiniton(code); +shaderDefiniton.Compile(); \ No newline at end of file diff --git a/src/ShaderPlayground/ShaderPlayground.csproj b/src/ShaderPlayground/ShaderPlayground.csproj new file mode 100644 index 0000000..51ee286 --- /dev/null +++ b/src/ShaderPlayground/ShaderPlayground.csproj @@ -0,0 +1,14 @@ + + + + Exe + net10.0 + enable + enable + + + + + + + From 2d5b24a4c577996c39f96620bfc170752920b279 Mon Sep 17 00:00:00 2001 From: flabbet Date: Mon, 10 Aug 2026 20:07:38 +0200 Subject: [PATCH 09/55] Made shit work --- .../Bridge/IDrawingBackend.cs | 1 + .../SkiaSurfaceImplementation.cs | 5 +- src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 5 ++ .../Drawie.Backend.Vertie.csproj | 1 + .../Geometry/GeometryData.cs | 13 --- .../Geometry/GeometryObject.cs | 17 ---- .../Helpers/TextureFramebufferExtensions.cs | 55 +++++++++--- .../OpenGlCommandList.cs | 78 ++++++++++------ .../OpenGlDepthBuffer.cs | 56 ++++++++++++ src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 7 ++ .../OpenGlGraphicsContext.cs | 4 +- src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs | 23 ++++- .../OpenGlRenderTarget.cs | 90 +++++++++++++++++++ src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs | 62 ++++++++++--- .../OpenGlWindowRenderApi.cs | 2 +- .../CommandRecording/ICommandList.cs | 1 + .../Abstraction/IGraphicsDevice.cs | 2 + .../Abstraction/Pipeline/PipelineDesc.cs | 1 - .../RenderTargets/IRenderTarget.cs | 3 + .../Abstraction/Textures/DepthFormat.cs | 7 ++ .../Abstraction/Textures/TextureDesc.cs | 8 +- src/Drawie2Sample/Cube.cs | 3 +- src/Drawie2Sample/Drawie2SampleApp.cs | 19 +++- 23 files changed, 361 insertions(+), 102 deletions(-) delete mode 100644 src/Drawie.Backend.Vertie/Geometry/GeometryData.cs delete mode 100644 src/Drawie.Backend.Vertie/Geometry/GeometryObject.cs create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlDepthBuffer.cs create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Textures/DepthFormat.cs diff --git a/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs b/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs index d2a6342..576e769 100644 --- a/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs +++ b/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs @@ -35,5 +35,6 @@ public interface IDrawingBackend : IAsyncDisposable public DrawingSurface? CreateRenderSurface(VecI size, ITexture renderTexture, SurfaceOrigin origin); public int GetNativeInstancesTotalCount(); public void Flush(); + void ResetContext(); } } diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index fa27a15..920d252 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -140,8 +140,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int var texture = _graphicsDevice.CreateTexture(new TextureDesc() { - Format = TextureFormat.RGBA8_Unorm, Width = info.Width, Height = info.Height, - Usage = TextureUsage.RenderTarget | TextureUsage.Sampled + Format = TextureFormat.RGBA8_Unorm, Width = info.Width, Height = info.Height }); var surface = CreateFromNativeTexture(texture, new VecI(info.Width, info.Height), defaultSurfaceOrigin, out var framebufferInfo); @@ -187,7 +186,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int GRBackendRenderTarget backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, 1, 0, new GRGlFramebufferInfo(textureId, SKColorType.Rgba8888.ToGlSizedFormat())); - + var surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888); diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index 0dd90e3..d5af7d9 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -234,6 +234,11 @@ public void Flush() SkiaGraphicsContext?.Flush(); } + public void ResetContext() + { + SkiaGraphicsContext?.ResetContext(); + } + public override string ToString() { return "Skia"; diff --git a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj index 59d0110..a4a9fea 100644 --- a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj +++ b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj @@ -17,6 +17,7 @@ + diff --git a/src/Drawie.Backend.Vertie/Geometry/GeometryData.cs b/src/Drawie.Backend.Vertie/Geometry/GeometryData.cs deleted file mode 100644 index 0b081dc..0000000 --- a/src/Drawie.Backend.Vertie/Geometry/GeometryData.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace Drawie.Backend.Vertie.Geometry; - -public class GeometryData -{ - public float[] Vertices { get; set; } - public uint [] Indices { get; set; } - - public GeometryData(float[] vertices, uint[] indices) - { - Vertices = vertices.ToArray(); - Indices = indices.ToArray(); - } -} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Geometry/GeometryObject.cs b/src/Drawie.Backend.Vertie/Geometry/GeometryObject.cs deleted file mode 100644 index 0061f9f..0000000 --- a/src/Drawie.Backend.Vertie/Geometry/GeometryObject.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace Drawie.Backend.Vertie.Geometry; - -public abstract class GeometryObject -{ - public Transform Transform { get; set; } = new Transform(); - public int MaterialIndex { get; set; } = -1; - public GeometryData GeometryData { get; } - - public abstract void Draw(); - public abstract bool IsInFrustum(Frustum frustum, Transform transform); - - public GeometryObject(GeometryData geometryData, int materialIndex) - { - GeometryData = geometryData; - MaterialIndex = materialIndex; - } -} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 6800648..ca2c755 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -5,8 +5,11 @@ using Drawie.RenderApi; using Drawie.RenderApi.Abstraction; using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.Rendering; namespace Drawie.Backend.Vertie.Helpers; @@ -14,10 +17,30 @@ namespace Drawie.Backend.Vertie.Helpers; public static class TextureFramebufferExtensions { private static Dictionary cachedMeshBuffers = new Dictionary(); - private static Dictionary cachedShaderPrograms = new Dictionary(); + + private static Dictionary cachedShaderPrograms = + new Dictionary(); + + private static ICommandList? cmdList; + public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material material) { IGraphicsDevice device = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice; + + fb.Canvas?.Flush(); + DrawMesh(fb, mesh, material, device); + } + + public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, IGraphicsDevice device) + { + var sceneTarget = device.CreateRenderTarget(new TextureDesc() + { + Width = fb.Size.X, + Height = fb.Size.Y, + Format = TextureFormat.RGBA8_Unorm, + Depth = DepthFormat.Depth24Stencil8 + }); + var pipeline = device.CreatePipeline(new PipelineDesc() { Depth = new DepthDesc() @@ -29,24 +52,29 @@ public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material mate Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), }); - var cmdList = device.CreateCommandList(); - cmdList.BeginRenderPass(fb); + cmdList ??= device.CreateCommandList(); + cmdList.BeginRenderPass(sceneTarget); cmdList.SetPipeline(pipeline); (IBuffer vertex, IBuffer index) buffers = InitializeBuffers(mesh, device); - cmdList.SetVertexBuffer(buffers.vertex); cmdList.SetIndexBuffer(buffers.index); - + cmdList.SetVertexBuffer(buffers.vertex); + foreach (var texture in material.Textures) { cmdList.BindTexture(texture.Name, texture.Texture); } cmdList.DrawIndexed(mesh.IndexCount); - - var recordedRenderPass = cmdList.EndRenderPass(); + var recordedRenderPass = cmdList.EndRenderPass(fb); device.Submit(recordedRenderPass); + DrawingBackendApi.Current.ResetContext(); + + if (sceneTarget is IDisposable disposable) + { + disposable.Dispose(); + } } private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsDevice, Material material) @@ -55,25 +83,26 @@ private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsD { return cachedShaderPrograms[material.Shader]; } - - var program = graphicsDevice.CreateShaderProgram(new ShaderProgramDesc(material.Shader.Vertex, material.Shader.Fragment)); + + var program = + graphicsDevice.CreateShaderProgram(new ShaderProgramDesc(material.Shader.Vertex, material.Shader.Fragment)); cachedShaderPrograms.Add(material.Shader, program); - + return program; } private static (IBuffer vertex, IBuffer index) InitializeBuffers(Mesh mesh, IGraphicsDevice device) { - if(cachedMeshBuffers.TryGetValue(mesh, out var buffers)) + if (cachedMeshBuffers.TryGetValue(mesh, out var buffers)) { return buffers; } - + var vertex = device.CreateBuffer(BufferUsage.Vertex, mesh.Vertices); var index = device.CreateBuffer(BufferUsage.Index, mesh.Indicies); cachedMeshBuffers[mesh] = (vertex, index); - + return (vertex, index); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index 7d03241..7d1152f 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -12,15 +12,22 @@ public class OpenGlCommandList(GL api) : ICommandList public GL Api { get; } = api; private List instructions = new List(); + private IRenderTarget source; private IBuffer? vertexBuffer; private IBuffer? indexBuffer; private uint vao; + private uint originalFb; public void BeginRenderPass(IRenderTarget fb) { + source = fb; instructions?.Clear(); - RecordInstruction(() => Api.BindFramebuffer(FramebufferTarget.Framebuffer, fb.FramebufferId)); + RecordInstruction(() => + { + originalFb = (uint)Api.GetInteger(GLEnum.FramebufferBinding); + Api.BindFramebuffer(FramebufferTarget.Framebuffer, fb.FramebufferId); + }); } public void SetPipeline(IPipeline pipeline) @@ -31,14 +38,15 @@ public void SetPipeline(IPipeline pipeline) public void SetVertexBuffer(IBuffer vertexBuffer) { this.vertexBuffer = vertexBuffer; - RecordInstruction(() => Api.BindBuffer(vertexBuffer.Usage.ToOpenGlTargetARB(), vertexBuffer.NativeHandle)); + Api.BindBuffer(vertexBuffer.Usage.ToOpenGlTargetARB(), vertexBuffer.NativeHandle); HandleVao(); + RecordInstruction(() => Api.BindVertexArray(vao)); } public void SetIndexBuffer(IBuffer indexBuffer) { this.indexBuffer = indexBuffer; - RecordInstruction(() => Api.BindBuffer(indexBuffer.Usage.ToOpenGlTargetARB(), indexBuffer.NativeHandle)); + Api.BindBuffer(indexBuffer.Usage.ToOpenGlTargetARB(), indexBuffer.NativeHandle); } public void BindTexture(string textureName, ITexture texture) @@ -46,14 +54,30 @@ public void BindTexture(string textureName, ITexture texture) throw new NotImplementedException(); } - public unsafe void DrawIndexed(int indexCount) + public void DrawIndexed(int indexCount) { RecordInstruction(() => Api.DrawArrays(PrimitiveType.Triangles, 0, 3)); } + public RecordedRenderPass EndRenderPass(IRenderTarget blitTo) + { + RecordInstruction(() => + { + Api.BindFramebuffer(FramebufferTarget.ReadFramebuffer, source.FramebufferId); + Api.BindFramebuffer(FramebufferTarget.DrawFramebuffer, blitTo.FramebufferId); + Api.BlitFramebuffer( + 0, 0, source.Size.X, source.Size.Y, + 0, 0, blitTo.Size.X, blitTo.Size.Y, + ClearBufferMask.ColorBufferBit, + BlitFramebufferFilter.Nearest); + Api.BindFramebuffer(FramebufferTarget.Framebuffer, originalFb); + }); + return new RecordedRenderPass(instructions.ToArray()); + } + public RecordedRenderPass EndRenderPass() { - RecordInstruction(() => Api.BindFramebuffer(FramebufferTarget.Framebuffer, 0)); + RecordInstruction(() => Api.BindFramebuffer(FramebufferTarget.Framebuffer, originalFb)); return new RecordedRenderPass(instructions.ToArray()); } @@ -64,30 +88,30 @@ private void RecordInstruction(Action instruction) private unsafe void HandleVao() { - if (vertexBuffer == null) + if (vertexBuffer == null || indexBuffer == null) return; - RecordInstruction(() => + if (vao == 0) { - if (vao == 0) - { - vao = Api.GenVertexArray(); - } - - Api.BindVertexArray(vao); - Api.BindBuffer( - vertexBuffer.Usage.ToOpenGlTargetARB(), - vertexBuffer.NativeHandle); - - Api.EnableVertexAttribArray(0); - - Api.VertexAttribPointer( - 0, - 3, - VertexAttribPointerType.Float, - false, - 3 * sizeof(float), - null); - }); + vao = Api.GenVertexArray(); + } + + Api.BindVertexArray(vao); + Api.BindBuffer( + vertexBuffer.Usage.ToOpenGlTargetARB(), + vertexBuffer.NativeHandle); + + Api.BindBuffer(indexBuffer.Usage.ToOpenGlTargetARB(), + indexBuffer?.NativeHandle ?? 0); + + Api.EnableVertexAttribArray(0); + + Api.VertexAttribPointer( + 0, + 3, + VertexAttribPointerType.Float, + false, + 3 * sizeof(float), + null); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDepthBuffer.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDepthBuffer.cs new file mode 100644 index 0000000..b03f1fb --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDepthBuffer.cs @@ -0,0 +1,56 @@ +using Drawie.RenderApi.Abstraction.Textures; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; + +public sealed class OpenGlDepthBuffer : IDisposable +{ + public uint RenderbufferId { get; } + + public int Width { get; } + public int Height { get; } + + private GL Api { get; } + + public OpenGlDepthBuffer(GL api, int width, int height, DepthFormat depth) + { + Api = api; + + Width = width; + Height = height; + + RenderbufferId = Api.GenRenderbuffer(); + + Api.BindRenderbuffer( + RenderbufferTarget.Renderbuffer, + RenderbufferId); + + Api.RenderbufferStorage( + RenderbufferTarget.Renderbuffer, + ToOpenglDepth(depth), + (uint)width, + (uint)height); + + Api.BindRenderbuffer( + RenderbufferTarget.Renderbuffer, + 0); + } + + private InternalFormat ToOpenglDepth(DepthFormat depth) + { + switch (depth) + { + case DepthFormat.NoDepth: + throw new ArgumentException("Cannot create depth with NoDepth format"); + case DepthFormat.Depth24Stencil8: + return InternalFormat.Depth24Stencil8; + default: + throw new ArgumentOutOfRangeException(nameof(depth), depth, null); + } + } + + public void Dispose() + { + Api.DeleteRenderbuffer(RenderbufferId); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index 09bdf79..663afe7 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -2,6 +2,7 @@ using Drawie.RenderApi.Abstraction.Buffers; using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; using Drawie.RenderApi.Abstraction.Shaders; using Drawie.RenderApi.Abstraction.Textures; using Silk.NET.OpenGL; @@ -130,6 +131,12 @@ public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) return new OpenGlShaderProgram(Api, program); } + public IRenderTarget CreateRenderTarget(TextureDesc textureDesc) + { + return new OpenGlRenderTarget(Api, textureDesc.Width, textureDesc.Height, textureDesc.Depth); + } + + private Silk.NET.OpenGL.ShaderType ToOpenGlShaderType(ShaderType shaderType) { switch (shaderType) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs index f83d742..dabe115 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs @@ -19,9 +19,9 @@ public void MakeCurrent() GlContext.MakeCurrent(); } - public OpenGlTexture CreateTexture(uint id) + public OpenGlTexture CreateTexture(uint id, int width, int height) { ownedTextures.Add(id); - return new OpenGlTexture(id, Api); + return new OpenGlTexture(id, Api, width, height); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs index a9200bc..c64ae0b 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs @@ -14,21 +14,38 @@ public OpenGlPipeline(PipelineDesc description, GL api) Description = description; Api = api; } - + public void Apply() { - Api.Viewport(new Rectangle(Description.Viewport.X, Description.Viewport.Y, Description.Viewport.Width, Description.Viewport.Height)); + Api.Viewport(new Rectangle(Description.Viewport.X, Description.Viewport.Y, Description.Viewport.Width, + Description.Viewport.Height)); + if (Description.Blend.Enabled) - { + { Api.Enable(EnableCap.Blend); } + else + { + Api.Disable(EnableCap.Blend); + } if (Description.Depth.Enabled) { Api.Enable(EnableCap.DepthTest); Api.DepthFunc(ToOpenGlDesc(Description.Depth.DepthCompare)); + Api.DepthMask(true); + + Api.ClearDepth(1.0); + } + else + { + Api.Disable(EnableCap.DepthTest); } + Api.Disable(EnableCap.CullFace); + Api.ClearColor(0, 0, 0, 1); + Api.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit); + Description.ShaderProgram?.Use(); } diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs new file mode 100644 index 0000000..b42a9ff --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs @@ -0,0 +1,90 @@ +using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Textures; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; + +public sealed unsafe class OpenGlRenderTarget : IDisposable, IRenderTarget +{ + public OpenGlTexture Color { get; } + public OpenGlDepthBuffer? Depth { get; } + + public uint FramebufferId { get; } + public VecI Size => new VecI(Width, Height); + + public int Width => Color.Width; + public int Height => Color.Height; + + private GL Api { get; } + + public OpenGlRenderTarget( + GL api, + int width, + int height, + DepthFormat depth) + { + Api = api; + + Color = new OpenGlTexture( + api, + width, + height); + + if (depth != DepthFormat.NoDepth) + Depth = new OpenGlDepthBuffer( + api, + width, + height, depth); + + FramebufferId = Api.GenFramebuffer(); + + Api.BindFramebuffer( + FramebufferTarget.Framebuffer, + FramebufferId); + + Api.FramebufferTexture2D( + FramebufferTarget.Framebuffer, + FramebufferAttachment.ColorAttachment0, + TextureTarget.Texture2D, + Color.TextureId, + 0); + + if (Depth != null) + { + Api.FramebufferRenderbuffer( + FramebufferTarget.Framebuffer, + FramebufferAttachment.DepthStencilAttachment, + RenderbufferTarget.Renderbuffer, + Depth.RenderbufferId); + } + + var status = Api.CheckFramebufferStatus( + FramebufferTarget.Framebuffer); + + if (status != GLEnum.FramebufferComplete) + { + throw new InvalidOperationException( + $"OpenGL framebuffer is incomplete: {status}"); + } + + Api.BindFramebuffer( + FramebufferTarget.Framebuffer, + 0); + } + + public void Bind() + { + Api.BindFramebuffer( + FramebufferTarget.Framebuffer, + FramebufferId); + } + + public void Dispose() + { + Api.DeleteFramebuffer(FramebufferId); + + Depth?.Dispose(); + Color.Dispose(); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs index d21dbd4..0c569b8 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs @@ -6,44 +6,78 @@ public class OpenGlTexture : IOpenGlTexture, IDisposable { public uint TextureId { get; } - private GL Api { get; set; } - - public OpenGlTexture(uint textureId, GL api) + public int Width { get; } + public int Height { get; } + + private GL Api { get; } + + public OpenGlTexture(uint textureId, GL api, int width, int height) { TextureId = textureId; Api = api; + Width = width; + Height = height; } public unsafe OpenGlTexture(GL api, int width, int height) { - TextureId = api.GenTexture(); - Api = api; + + Width = width; + Height = height; + + TextureId = Api.GenTexture(); + Activate(0); Bind(); - Api.TexImage2D(TextureTarget.Texture2D, 0, InternalFormat.Rgba, (uint)width, (uint)height, 0, + Api.TexImage2D( + TextureTarget.Texture2D, + 0, + InternalFormat.Rgba8, + (uint)width, + (uint)height, + 0, PixelFormat.Rgba, - PixelType.UnsignedByte, null); + PixelType.UnsignedByte, + null); + + Api.TexParameterI( + TextureTarget.Texture2D, + TextureParameterName.TextureWrapS, + (int)GLEnum.ClampToEdge); + + Api.TexParameterI( + TextureTarget.Texture2D, + TextureParameterName.TextureWrapT, + (int)GLEnum.ClampToEdge); + + Api.TexParameterI( + TextureTarget.Texture2D, + TextureParameterName.TextureMinFilter, + (int)GLEnum.Nearest); - Api.TexParameterI(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)GLEnum.Repeat); - Api.TexParameterI(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)GLEnum.Repeat); - Api.TexParameterI(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)GLEnum.Nearest); - Api.TexParameterI(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)GLEnum.Nearest); + Api.TexParameterI( + TextureTarget.Texture2D, + TextureParameterName.TextureMagFilter, + (int)GLEnum.Nearest); } public void Bind() { - Api.BindTexture(TextureTarget.Texture2D, TextureId); + Api.BindTexture( + TextureTarget.Texture2D, + TextureId); } public void Activate(int textureUnit) { - Api.ActiveTexture(TextureUnit.Texture0 + textureUnit); + Api.ActiveTexture( + TextureUnit.Texture0 + textureUnit); } public void Dispose() { Api.DeleteTexture(TextureId); } -} +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs b/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs index 702b2d9..b1b7170 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs @@ -30,7 +30,7 @@ public unsafe void CreateInstance(object contextObject, VecI framebufferSize) Context = glContext; Api = GL.GetApi(glContext); var graphicsContext = new OpenGlGraphicsContext(Api, glContext); - texture = graphicsContext.CreateTexture(0); // default framebuffer texture + texture = graphicsContext.CreateTexture(0, framebufferSize.X, framebufferSize.Y); // default framebuffer texture GraphicsContext = graphicsContext; } diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs index 2eca71a..e7c1362 100644 --- a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs @@ -12,5 +12,6 @@ public interface ICommandList void SetIndexBuffer(IBuffer indexBuffer); void BindTexture(string textureName, ITexture texture); void DrawIndexed(int indexCount); + RecordedRenderPass EndRenderPass(IRenderTarget blitTo); RecordedRenderPass EndRenderPass(); } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs index 9709548..c77d53e 100644 --- a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs +++ b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs @@ -1,6 +1,7 @@ using Drawie.RenderApi.Abstraction.Buffers; using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; using Drawie.RenderApi.Abstraction.Shaders; using Drawie.RenderApi.Abstraction.Textures; @@ -21,4 +22,5 @@ public interface IGraphicsDevice */ void Submit(RecordedRenderPass cmdList); IShaderProgram CreateShaderProgram(ShaderProgramDesc shaderProgramDesc); + IRenderTarget CreateRenderTarget(TextureDesc textureDesc); } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs index 7405e56..f0588da 100644 --- a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs @@ -6,7 +6,6 @@ namespace Drawie.RenderApi.Abstraction.Pipeline; public struct PipelineDesc { public IShaderProgram? ShaderProgram { get; set; } - public IShaderProgram? FragmentShader { get; set; } public DepthDesc Depth { get; set; } public BlendDesc Blend { get; set; } public RectI Viewport { get; set; } diff --git a/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs b/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs index 278b7f0..bae658b 100644 --- a/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs +++ b/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs @@ -1,6 +1,9 @@ +using Drawie.Numerics; + namespace Drawie.RenderApi.Abstraction.RenderTargets; public interface IRenderTarget { uint FramebufferId { get; } + VecI Size { get; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Textures/DepthFormat.cs b/src/Drawie.RenderApi/Abstraction/Textures/DepthFormat.cs new file mode 100644 index 0000000..97edaa0 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Textures/DepthFormat.cs @@ -0,0 +1,7 @@ +namespace Drawie.RenderApi.Abstraction.Textures; + +public enum DepthFormat +{ + NoDepth, + Depth24Stencil8, +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs b/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs index a8c4567..75aed74 100644 --- a/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs @@ -2,9 +2,9 @@ namespace Drawie.RenderApi.Abstraction.Textures; public struct TextureDesc { - public int Width; - public int Height; + public int Width { get; set; } + public int Height { get; set; } - public TextureFormat Format; - public TextureUsage Usage; + public TextureFormat Format { get; set; } + public DepthFormat Depth { get; set; } } \ No newline at end of file diff --git a/src/Drawie2Sample/Cube.cs b/src/Drawie2Sample/Cube.cs index e7be032..ba250fc 100644 --- a/src/Drawie2Sample/Cube.cs +++ b/src/Drawie2Sample/Cube.cs @@ -14,8 +14,7 @@ public class Cube : Mesh private static readonly uint[] Indices = { - 0, 1, 3, - 1, 2, 3 + 0, 1, 2, }; public Cube() : base(Vertices, Indices, Indices.Length) diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 82400b7..6bd1fd3 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -9,9 +9,11 @@ using Drawie.Layer.ThreeD.Test; using Drawie.Layer.UI.ImGui; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.RenderTargets; using Drawie.Rendering; -using Drawie.Windowing; using DrawiEngine; +using Silk.NET.Windowing; +using IWindow = Drawie.Windowing.IWindow; namespace Drawie2Sample; @@ -57,6 +59,8 @@ protected override void OnInitialize() { targetTexture.Clear(); + targetTexture.DrawMesh(new Cube(), mat); + using Font defaultFont = Font.CreateDefault(); Paintable color = new ColorPaintable(Colors.White); StringBuilder sb = new StringBuilder(); @@ -72,8 +76,19 @@ protected override void OnInitialize() rt.Paint(targetTexture.Canvas, new VecD(0, 20), defaultFont, p, null); - targetTexture.DrawMesh(new Cube(), mat); }; } } +class DefaultFramebuffer : IRenderTarget +{ + public DefaultFramebuffer(VecI size) + { + Size = size; + } + + public uint FramebufferId { get; } = 0; + public VecI Size { get; } + + +} \ No newline at end of file From aa5b30bb2a25224595ea0fb593f63c6e52161234 Mon Sep 17 00:00:00 2001 From: flabbet Date: Tue, 11 Aug 2026 14:04:19 +0200 Subject: [PATCH 10/55] Got the cube workin --- src/Drawie.Backend.Vertie/Core/Camera.cs | 23 ++-- src/Drawie.Backend.Vertie/Core/Frustum.cs | 15 ++- src/Drawie.Backend.Vertie/Core/Mesh.cs | 1 + src/Drawie.Backend.Vertie/Core/Plane.cs | 14 +- src/Drawie.Backend.Vertie/Core/Transform.cs | 21 ++- src/Drawie.Backend.Vertie/Helpers/MathEx.cs | 2 +- .../Helpers/NumericsExtensions.cs | 2 +- .../Helpers/TextureFramebufferExtensions.cs | 17 ++- .../Rendering/CompiledShader.cs | 59 ++++++++- .../Rendering/Material.cs | 90 +++++-------- ...ShaderDefiniton.cs => ShaderDefinition.cs} | 14 +- .../OpenGlCommandList.cs | 2 +- src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 13 +- .../OpenGlShaderProgram.cs | 106 ++++++++++++++++ .../Abstraction/Shaders/IShaderProgram.cs | 1 + .../Abstraction/Shaders}/ShaderProperty.cs | 4 +- .../Abstraction/Shaders/UniformBlock.cs | 41 ++++++ src/Drawie.sln.DotSettings.user | 3 + src/Drawie2Sample/Cube.cs | 47 ++++++- src/Drawie2Sample/Drawie2SampleApp.cs | 120 +++++++++++++++--- src/ShaderPlayground/Program.cs | 4 +- 21 files changed, 454 insertions(+), 145 deletions(-) rename src/Drawie.Backend.Vertie/Rendering/{ShaderDefiniton.cs => ShaderDefinition.cs} (64%) rename src/{Drawie.Backend.Vertie/Rendering => Drawie.RenderApi/Abstraction/Shaders}/ShaderProperty.cs (81%) create mode 100644 src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs diff --git a/src/Drawie.Backend.Vertie/Core/Camera.cs b/src/Drawie.Backend.Vertie/Core/Camera.cs index db916cf..2f1b4e4 100644 --- a/src/Drawie.Backend.Vertie/Core/Camera.cs +++ b/src/Drawie.Backend.Vertie/Core/Camera.cs @@ -1,14 +1,15 @@ using System.Numerics; +using Drawie.Backend.Vertie.Helpers; using Drawie.Numerics; -namespace Drawie.Backend.Vertie; +namespace Drawie.Backend.Vertie.Core; public class Camera { - public Vec3D Position { get; set; } - public Vec3D Forward { get; private set; } - public Vec3D Up { get; private set; } - public Vec3D Right { get; private set; } + public Vector3 Position { get; set; } + public Vector3 Forward { get; private set; } + public Vector3 Up { get; private set; } + public Vector3 Right { get; private set; } public float AspectRatio { get; set; } public float Yaw { get; set; } = -90f; @@ -22,7 +23,7 @@ public float Zoom set => _zoom = Math.Clamp(Zoom - value, 1f, 45f); } - public Matrix4x4 ViewMatrix => Matrix4x4.CreateLookAt(Position.ToVector3(), (Position + Forward).ToVector3(), Up.ToVector3()); + public Matrix4x4 ViewMatrix => Matrix4x4.CreateLookAt(Position, (Position + Forward), Up); public Matrix4x4 ProjectionMatrix => Matrix4x4.CreatePerspectiveFieldOfView(MathEx.DegreesToRadians * Zoom, AspectRatio, 0.1f, 100f); @@ -30,7 +31,7 @@ public float Zoom public Quaternion Rotation => Quaternion.CreateFromYawPitchRoll(-MathEx.DegreesToRadians * Yaw, MathEx.DegreesToRadians * Pitch, 0f); - public Camera(Vec3D position, Vec3D forward, Vec3D up, float aspectRatio) + public Camera(Vector3 position, Vector3 forward, Vector3 up, float aspectRatio) { Position = position; Forward = forward; @@ -52,14 +53,14 @@ public void SetDirection(float xOffset, float yOffset) Pitch = Math.Clamp(Pitch, -89f, 89f); - var cameraDirection = Vec3D.Zero; + var cameraDirection = Vector3.Zero; cameraDirection.X = MathF.Cos(MathEx.DegreesToRadians * Yaw) * MathF.Cos(MathEx.DegreesToRadians * Pitch); cameraDirection.Y = MathF.Sin(MathEx.DegreesToRadians * Pitch); cameraDirection.Z = MathF.Sin(MathEx.DegreesToRadians * Yaw) * MathF.Cos(MathEx.DegreesToRadians * Pitch); - cameraDirection = cameraDirection.Normalize(); + cameraDirection = Vector3.Normalize(cameraDirection); Forward = cameraDirection; - Right = Forward.Cross(Vec3D.UnitY).Normalize(); - Up = Right.Cross(cameraDirection).Normalize(); + Right = Vector3.Normalize(Vector3.Cross(Forward, Vector3.UnitY)); + Up = Vector3.Normalize(Vector3.Cross(Right, cameraDirection)); } } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/Frustum.cs b/src/Drawie.Backend.Vertie/Core/Frustum.cs index 832ef10..bd9bf1b 100644 --- a/src/Drawie.Backend.Vertie/Core/Frustum.cs +++ b/src/Drawie.Backend.Vertie/Core/Frustum.cs @@ -1,6 +1,7 @@ -using Drawie.Numerics; +using System.Numerics; +using Drawie.Numerics; -namespace Drawie.Backend.Vertie; +namespace Drawie.Backend.Vertie.Core; public struct Frustum { @@ -20,13 +21,13 @@ public void Recalculate(Camera camera, float fovY, float zNear, float zFar) { float halfVerticalSize = zFar * (float)Math.Tan(fovY / 2); float halfHorizontalSize = halfVerticalSize * camera.AspectRatio; - Vec3D frontMultFar = zFar * camera.Forward; + Vector3 frontMultFar = zFar * camera.Forward; Near = new Plane(camera.Position + zNear * camera.Forward, camera.Forward); Far = new Plane(camera.Position + frontMultFar, -camera.Forward); - Right = new Plane(camera.Position, camera.Up.Cross(frontMultFar + camera.Right * halfHorizontalSize)); - Left = new Plane(camera.Position, (frontMultFar - camera.Right * halfHorizontalSize).Cross(camera.Up)); - Bottom = new Plane(camera.Position, camera.Right.Cross(frontMultFar - camera.Up * halfVerticalSize)); - Top = new Plane(camera.Position, (frontMultFar + camera.Up * halfVerticalSize).Cross(camera.Right)); + Right = new Plane(camera.Position, Vector3.Cross(camera.Up, frontMultFar + camera.Right * halfHorizontalSize)); + Left = new Plane(camera.Position, Vector3.Cross(frontMultFar - camera.Right * halfHorizontalSize, camera.Up)); + Bottom = new Plane(camera.Position, Vector3.Cross(camera.Right, frontMultFar - camera.Up * halfVerticalSize)); + Top = new Plane(camera.Position, Vector3.Cross(frontMultFar + camera.Up * halfVerticalSize, camera.Right)); } } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/Mesh.cs b/src/Drawie.Backend.Vertie/Core/Mesh.cs index 856a25b..f1c0f51 100644 --- a/src/Drawie.Backend.Vertie/Core/Mesh.cs +++ b/src/Drawie.Backend.Vertie/Core/Mesh.cs @@ -5,6 +5,7 @@ namespace Drawie.Backend.Vertie.Core; public class Mesh { + public Transform Transform { get; } = new Transform(); public float[] Vertices { get; set; } public uint[] Indicies { get; set; } public int IndexCount { get; set; } diff --git a/src/Drawie.Backend.Vertie/Core/Plane.cs b/src/Drawie.Backend.Vertie/Core/Plane.cs index 23fa155..30967c7 100644 --- a/src/Drawie.Backend.Vertie/Core/Plane.cs +++ b/src/Drawie.Backend.Vertie/Core/Plane.cs @@ -1,21 +1,21 @@ using System.Numerics; using Drawie.Numerics; -namespace Drawie.Backend.Vertie; +namespace Drawie.Backend.Vertie.Core; public struct Plane { - public Vec3D Normal { get; set; } - public Vec3D Point { get; set; } + public Vector3 Normal { get; set; } + public Vector3 Point { get; set; } - public double GetSignedDistance(Vec3D point) + public float GetSignedDistance(Vector3 point) { - return Normal.Dot(point - Point); + return Vector3.Dot(Normal, point - Point); } - public Plane(Vec3D point, Vec3D normal) + public Plane(Vector3 point, Vector3 normal) { - Normal = normal.Normalize(); + Normal = Vector3.Normalize(normal); Point = point; } } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/Transform.cs b/src/Drawie.Backend.Vertie/Core/Transform.cs index b1bd9b1..42e0d01 100644 --- a/src/Drawie.Backend.Vertie/Core/Transform.cs +++ b/src/Drawie.Backend.Vertie/Core/Transform.cs @@ -1,18 +1,17 @@ using System.Numerics; -using Drawie.Numerics; -namespace Drawie.Backend.Vertie; +namespace Drawie.Backend.Vertie.Core; public class Transform { - private Vec3D _position = Vec3D.Zero; + private Vector3 _position = Vector3.Zero; private float _scale = 1f; private Quaternion _rotation = Quaternion.Identity; private Matrix4x4 _cachedMatrix = Matrix4x4.Identity; private bool _isDirty = true; - public Vec3D Position + public Vector3 Position { get => _position; set @@ -22,19 +21,19 @@ public Vec3D Position } } - public Vec3D Right + public Vector3 Right { - get => Vec3D.Transform(Vec3D.UnitX, _rotation); + get => Vector3.Transform(Vector3.UnitX, _rotation); } - public Vec3D Up + public Vector3 Up { - get => Vec3D.Transform(Vec3D.UnitY, _rotation); + get => Vector3.Transform(Vector3.UnitY, _rotation); } - public Vec3D Forward + public Vector3 Forward { - get => Vec3D.Transform(Vec3D.UnitZ, _rotation); + get => Vector3.Transform(Vector3.UnitZ, _rotation); } public float Scale @@ -64,7 +63,7 @@ public Matrix4x4 ViewMatrix if (_isDirty) { _cachedMatrix = Matrix4x4.Identity * Matrix4x4.CreateFromQuaternion(Rotation) * Matrix4x4.CreateScale(Scale) * - Matrix4x4.CreateTranslation(Position.ToVector3()); + Matrix4x4.CreateTranslation(Position); _isDirty = false; } diff --git a/src/Drawie.Backend.Vertie/Helpers/MathEx.cs b/src/Drawie.Backend.Vertie/Helpers/MathEx.cs index 3cda8c1..0f8ccbe 100644 --- a/src/Drawie.Backend.Vertie/Helpers/MathEx.cs +++ b/src/Drawie.Backend.Vertie/Helpers/MathEx.cs @@ -1,4 +1,4 @@ -namespace Drawie.Backend.Vertie; +namespace Drawie.Backend.Vertie.Helpers; public static class MathEx { diff --git a/src/Drawie.Backend.Vertie/Helpers/NumericsExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/NumericsExtensions.cs index d3b93b5..975650a 100644 --- a/src/Drawie.Backend.Vertie/Helpers/NumericsExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/NumericsExtensions.cs @@ -1,7 +1,7 @@ using System.Numerics; using Drawie.Numerics; -namespace Drawie.Backend.Vertie; +namespace Drawie.Backend.Vertie.Helpers; public static class NumericsExtensions { diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index ca2c755..7dd51be 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -23,15 +23,15 @@ public static class TextureFramebufferExtensions private static ICommandList? cmdList; - public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material material) + public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material material, Camera camera) { IGraphicsDevice device = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice; fb.Canvas?.Flush(); - DrawMesh(fb, mesh, material, device); + DrawMesh(fb, mesh, material, camera, device); } - public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, IGraphicsDevice device) + public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Camera camera, IGraphicsDevice device) { var sceneTarget = device.CreateRenderTarget(new TextureDesc() { @@ -40,6 +40,8 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, IGra Format = TextureFormat.RGBA8_Unorm, Depth = DepthFormat.Depth24Stencil8 }); + + var shader = GetOrCreateShaderProgram(device, material); var pipeline = device.CreatePipeline(new PipelineDesc() { @@ -48,7 +50,7 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, IGra Enabled = true, DepthCompare = DepthCompareType.Less, }, - ShaderProgram = GetOrCreateShaderProgram(device, material), + ShaderProgram = shader, Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), }); @@ -59,7 +61,12 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, IGra (IBuffer vertex, IBuffer index) buffers = InitializeBuffers(mesh, device); cmdList.SetIndexBuffer(buffers.index); cmdList.SetVertexBuffer(buffers.vertex); - + + material.Use(camera); + material.PrepareForObject(mesh.Transform); + + shader.UpdateUniforms(material.Properties.Values.ToList()); + foreach (var texture in material.Textures) { cmdList.BindTexture(texture.Name, texture.Texture); diff --git a/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs b/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs index dee8530..7cd0ebc 100644 --- a/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs +++ b/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs @@ -1,7 +1,64 @@ +using Drawie.RenderApi.Abstraction.Shaders; +using Slangc.NET; + namespace Drawie.Backend.Vertie.Rendering; -public class CompiledShader(byte[] vertex, byte[] fragment) +public class CompiledShader(byte[] vertex, byte[] fragment, SlangReflection vertexReflection, SlangReflection fragmentReflection) { public byte[] Vertex { get; } = vertex; public byte[] Fragment { get; } = fragment; + + public SlangReflection VertexReflection { get; } = vertexReflection; + public SlangReflection FragmentReflection { get; } = fragmentReflection; + + public IReadOnlyDictionary Properties => properties; + + private Dictionary properties = new Dictionary(); + + public bool HasUniform(string name) + { + return Properties.ContainsKey(name); + } + + public void SetUniformBlock(UniformBlock block) + { + properties[block.Name] = block; + SetBlockLayout(block); + } + + private void SetBlockLayout(UniformBlock block) + { + var elementVarLayout = VertexReflection.Parameters.FirstOrDefault(x => x.Name == block.Name) + ?.Type.ConstantBuffer?.ElementVarLayout; + + if (elementVarLayout?.Binding == null) + { + throw new ArgumentException($"Uniform block binding '{block.Name}' not found in the compiled shader."); + } + + List propLayouts = GetPropertyLayouts(elementVarLayout); + + block.ShaderLayout = new UniformBlockLayout() + { + Index = (int)elementVarLayout.Binding.Index, + Size = (int)elementVarLayout.Binding.Size, + UniformProperties = propLayouts + }; + } + + private List GetPropertyLayouts(SlangVar elementVarLayout) + { + var fields = elementVarLayout.Type.Struct?.Fields; + + if (fields == null) return new List(); + + List layouts = new List(); + foreach (var field in fields) + { + if(field.Binding == null) continue; + layouts.Add(new UniformPropertyLayout(){UniformName = field.Name, Offset = (int)field.Binding.Offset, Size = (int)field.Binding.Size}); + } + + return layouts; + } } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/Material.cs b/src/Drawie.Backend.Vertie/Rendering/Material.cs index 75df109..3ffcfa0 100644 --- a/src/Drawie.Backend.Vertie/Rendering/Material.cs +++ b/src/Drawie.Backend.Vertie/Rendering/Material.cs @@ -1,7 +1,10 @@ using System.Collections; using System.Numerics; +using Drawie.Backend.Core.Shaders; +using Drawie.Backend.Vertie.Core; +using Drawie.Numerics; using Drawie.RenderApi; -using SilkNet.Rendering; +using Drawie.RenderApi.Abstraction.Shaders; namespace Drawie.Backend.Vertie.Rendering; @@ -9,89 +12,60 @@ public class Material { public string Name { get; set; } public CompiledShader Shader { get; set; } - public List Properties { get; set; } = new List(); + public Dictionary Properties { get; set; } = new(); public TextureMaterial[] Textures { get; set; } = Array.Empty(); private int _textureCount; - + public Material(string name, CompiledShader shader) { Name = name; Shader = shader; - - AddProperty("uModel"); - AddProperty("uView"); - AddProperty("uProjection"); + + Properties.Add("Transform", + new UniformBlock("Transform") + .AddProperty(new ShaderProperty("uModel", Matrix4x4.Identity)) + .AddProperty(new ShaderProperty("uView", Matrix4x4.Identity)) + .AddProperty(new ShaderProperty("uProjection", Matrix4x4.Identity))); /* if (shader.HasUniform("viewPos")) { - AddProperty("viewPos"); + AddProperty("Camera", "viewPos"); } */ } - /* - public void PrepareForObject(Transform transform) + public void Use(Camera camera) { - SetProperty("uModel", transform.ViewMatrix); - UpdateShader(); - } + Properties["Transform"].SetProperty("uView", camera.ViewMatrix); + Properties["Transform"].SetProperty("uProjection", camera.ProjectionMatrix); + /* + if (Shader.HasUniform("viewPos")) + { + SetProperty("Camera", "viewPos", camera.Position); + } */ + } - - public void AddProperty(string name, T defaultValue = default) where T: struct + public void PrepareForObject(Transform transform) { - ShaderProperty property = new ShaderProperty(name, defaultValue); - Properties.Add(property); + Properties["Transform"].SetProperty("uModel", transform.ViewMatrix); + UpdateShader(); } - - /*public void UpdateShader() - { - foreach (ShaderProperty property in Properties) - { - ApplyToShader(property); - } - }*/ - - public void SetProperty(string name, T value) where T : struct + + public void UpdateShader() { foreach (var property in Properties) { - if (property.UniformName == name) - { - if (property is ShaderProperty prop) - { - prop.Value = value; - return; - } - - throw new Exception($"Property {name} is not of type {typeof(T)}"); - } + ApplyToShader(property.Value); } - - throw new Exception($"Property {name} does not exist"); } - /*private void ApplyToShader(ShaderProperty prop) + + private void ApplyToShader(UniformBlock prop) { - switch (prop.ObjValue) - { - case float floatValue: - Shader.SetUniform(prop.UniformName, floatValue); - break; - case int intValue: - Shader.SetUniform(prop.UniformName, intValue); - break; - case Vector3 vec3: - Shader.SetUniform(prop.UniformName, vec3); - break; - case Matrix4x4 mat4: - Shader.SetUniform(prop.UniformName, mat4); - break; - default: - throw new Exception($"Property {prop.UniformName} is not a supported type"); - } - }*/ + Shader.SetUniformBlock(prop); + } } public struct TextureMaterial diff --git a/src/Drawie.Backend.Vertie/Rendering/ShaderDefiniton.cs b/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs similarity index 64% rename from src/Drawie.Backend.Vertie/Rendering/ShaderDefiniton.cs rename to src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs index 3472b07..0aa1869 100644 --- a/src/Drawie.Backend.Vertie/Rendering/ShaderDefiniton.cs +++ b/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs @@ -3,19 +3,19 @@ namespace Drawie.Backend.Vertie.Rendering; -public sealed class ShaderDefiniton +public sealed class ShaderDefinition { public string SourceCode { get; } private Guid id = Guid.NewGuid(); - public ShaderDefiniton(string slangCode) + public ShaderDefinition(string slangCode) { SourceCode = slangCode; } public CompiledShader Compile() { - var vertex = SlangCompiler.Compile(SourceCode, + var vertex = SlangCompiler.CompileWithReflection(SourceCode, [ "-profile", "glsl_450", "-matrix-layout-row-major", @@ -23,9 +23,9 @@ public CompiledShader Compile() "-entry", "VSMain", "-stage", "vertex", "-target", "spirv" - ]); + ], out var vertexReflection); - var fragment = SlangCompiler.Compile(SourceCode, + var fragment = SlangCompiler.CompileWithReflection(SourceCode, [ "-profile", "glsl_450", "-matrix-layout-row-major", @@ -33,8 +33,8 @@ public CompiledShader Compile() "-entry", "FSMain", "-stage", "fragment", "-target", "spirv" - ]); + ], out var fragmentReflection); - return new CompiledShader(vertex, fragment); + return new CompiledShader(vertex, fragment, vertexReflection, fragmentReflection); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index 7d1152f..32084a6 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -56,7 +56,7 @@ public void BindTexture(string textureName, ITexture texture) public void DrawIndexed(int indexCount) { - RecordInstruction(() => Api.DrawArrays(PrimitiveType.Triangles, 0, 3)); + RecordInstruction(() => Api.DrawArrays(PrimitiveType.Triangles, 0, 36)); } public RecordedRenderPass EndRenderPass(IRenderTarget blitTo) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index 663afe7..5ac5484 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -1,3 +1,5 @@ +using System.Numerics; +using Drawie.Numerics; using Drawie.RenderApi.Abstraction; using Drawie.RenderApi.Abstraction.Buffers; using Drawie.RenderApi.Abstraction.CommandRecording; @@ -61,7 +63,7 @@ public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) { vertex = Api.CreateShader( ToOpenGlShaderType(ShaderType.Vertex)); - + fixed (byte* bytes = desc.VertexShaderBytes) { Api.ShaderBinary( @@ -86,7 +88,7 @@ public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) { fragment = Api.CreateShader( ToOpenGlShaderType(ShaderType.Fragment)); - + fixed (byte* bytes = desc.FragmentShaderBytes) { Api.ShaderBinary( @@ -106,16 +108,16 @@ public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) Api.AttachShader(program, fragment); } - + Api.LinkProgram(program); - + Api.GetProgram(program, GLEnum.LinkStatus, out var status); if (status == 0) { throw new Exception($"Program failed to link with error: {Api.GetProgramInfoLog(program)}"); } - + if (vertex != 0) { Api.DetachShader(program, vertex); @@ -131,6 +133,7 @@ public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) return new OpenGlShaderProgram(Api, program); } + public IRenderTarget CreateRenderTarget(TextureDesc textureDesc) { return new OpenGlRenderTarget(Api, textureDesc.Width, textureDesc.Height, textureDesc.Depth); diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs b/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs index 5c66d57..5e2b770 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs @@ -1,4 +1,9 @@ +using System.Numerics; +using System.Runtime.InteropServices; +using System.Text; +using Drawie.Numerics; using Drawie.RenderApi.Abstraction.Shaders; +using Silk.NET.Core.Native; using Silk.NET.OpenGL; namespace Drawie.RenderApi.OpenGL; @@ -8,6 +13,8 @@ public class OpenGlShaderProgram : IShaderProgram public uint ProgramHandle { get; } public GL Api { get; } + private Dictionary uniformBlockUbos = new Dictionary(); + public OpenGlShaderProgram(GL gl, uint programHandle) { ProgramHandle = programHandle; @@ -18,4 +25,103 @@ public void Use() { Api.UseProgram(ProgramHandle); } + + public unsafe void UpdateUniforms(List uniformBlocks) + { + uint bindingPoint = 0; + + foreach (var uniformBlock in uniformBlocks) + { + int blockIndex = uniformBlock.ShaderLayout.Index; + int blockSize = uniformBlock.ShaderLayout.Size; + + if (blockIndex == int.MaxValue) + continue; + + Api.UniformBlockBinding( + ProgramHandle, + (uint)blockIndex, + bindingPoint); + + if (!uniformBlockUbos.TryGetValue( + uniformBlock.Name, + out uint ubo)) + { + ubo = Api.GenBuffer(); + uniformBlockUbos.Add( + uniformBlock.Name, + ubo); + } + + Api.BindBuffer( + BufferTargetARB.UniformBuffer, + ubo); + + Api.BufferData( + BufferTargetARB.UniformBuffer, + (nuint)blockSize, + null, + BufferUsageARB.DynamicDraw); + + Api.BindBufferBase( + BufferTargetARB.UniformBuffer, + bindingPoint, + ubo); + + // Upload individual properties. + for (var i = 0; i < uniformBlock.Properties.Count; i++) + { + var property = uniformBlock.Properties[i]; + UploadProperty(property.ObjValue, uniformBlock.ShaderLayout.UniformProperties[i]); + } + + Api.BindBuffer( + BufferTargetARB.UniformBuffer, + 0); + + bindingPoint++; + } + } + + private int GetUniformBlockSize(uint blockIndex) + { + int[] size = new int[1]; + + Api.GetActiveUniformBlock( + ProgramHandle, + blockIndex, + UniformBlockPName.DataSize, + size); + + return size[0]; + } + + private unsafe void UploadProperty( + object value, + UniformPropertyLayout layout) + { + int size = layout.Size; + + if (value is Matrix4x4 matrix4X4) + { + value = Matrix4x4.Transpose(matrix4X4); + } + + GCHandle handle = GCHandle.Alloc( + value, + GCHandleType.Pinned); + + try + { + Api.BufferSubData( + BufferTargetARB.UniformBuffer, + layout.Offset, + (nuint)size, + (void*)handle.AddrOfPinnedObject()); + } + finally + { + handle.Free(); + } + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs b/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs index 72f7b2e..3a59dbe 100644 --- a/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs +++ b/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs @@ -3,4 +3,5 @@ namespace Drawie.RenderApi.Abstraction.Shaders; public interface IShaderProgram { public void Use(); + void UpdateUniforms(List blocks); } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/ShaderProperty.cs b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProperty.cs similarity index 81% rename from src/Drawie.Backend.Vertie/Rendering/ShaderProperty.cs rename to src/Drawie.RenderApi/Abstraction/Shaders/ShaderProperty.cs index 1260212..929abf8 100644 --- a/src/Drawie.Backend.Vertie/Rendering/ShaderProperty.cs +++ b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProperty.cs @@ -1,4 +1,4 @@ -namespace SilkNet.Rendering; +namespace Drawie.RenderApi.Abstraction.Shaders; public class ShaderProperty { @@ -12,7 +12,7 @@ public ShaderProperty(string name) } } -public class ShaderProperty : ShaderProperty +public class ShaderProperty : ShaderProperty where T : unmanaged { public T Value { diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs b/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs new file mode 100644 index 0000000..6b8f0ed --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs @@ -0,0 +1,41 @@ +using System.Numerics; + +namespace Drawie.RenderApi.Abstraction.Shaders; + +public class UniformBlock +{ + public string Name { get; set; } + public List Properties { get; set; } = new List(); + public UniformBlockLayout ShaderLayout { get; set; } + + public UniformBlock AddProperty(ShaderProperty property) + { + Properties.Add(property); + return this; + } + + public UniformBlock(string name) + { + Name = name; + } + + public void SetProperty(string name, object value) + { + var property = Properties.FirstOrDefault(p => p.UniformName == name); + property?.ObjValue = value; + } +} + +public struct UniformBlockLayout +{ + public int Index { get; set; } + public int Size { get; set; } + public List UniformProperties { get; set; } +} + +public struct UniformPropertyLayout +{ + public string UniformName { get; set; } + public int Offset { get; set; } + public int Size { get; set; } +} \ No newline at end of file diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 0894b47..e0892c1 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -13,6 +13,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -39,9 +40,11 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/Drawie2Sample/Cube.cs b/src/Drawie2Sample/Cube.cs index ba250fc..a9028a5 100644 --- a/src/Drawie2Sample/Cube.cs +++ b/src/Drawie2Sample/Cube.cs @@ -4,18 +4,51 @@ namespace Drawie2Sample; public class Cube : Mesh { - private static readonly float[] Vertices = + private static readonly float[] Vertices = new float[] { - // position - 0.0f, 0.8f, 0.0f, - -0.8f, -0.8f, 0.0f, - 0.8f, -0.8f, 0.0f + -1.0f,-1.0f,-1.0f, // triangle 1 : begin + -1.0f,-1.0f, 1.0f, + -1.0f, 1.0f, 1.0f, // triangle 1 : end + 1.0f, 1.0f,-1.0f, // triangle 2 : begin + -1.0f,-1.0f,-1.0f, + -1.0f, 1.0f,-1.0f, // triangle 2 : end + 1.0f,-1.0f, 1.0f, + -1.0f,-1.0f,-1.0f, + 1.0f,-1.0f,-1.0f, + 1.0f, 1.0f,-1.0f, + 1.0f,-1.0f,-1.0f, + -1.0f,-1.0f,-1.0f, + -1.0f,-1.0f,-1.0f, + -1.0f, 1.0f, 1.0f, + -1.0f, 1.0f,-1.0f, + 1.0f,-1.0f, 1.0f, + -1.0f,-1.0f, 1.0f, + -1.0f,-1.0f,-1.0f, + -1.0f, 1.0f, 1.0f, + -1.0f,-1.0f, 1.0f, + 1.0f,-1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f,-1.0f,-1.0f, + 1.0f, 1.0f,-1.0f, + 1.0f,-1.0f,-1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f,-1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + 1.0f, 1.0f,-1.0f, + -1.0f, 1.0f,-1.0f, + 1.0f, 1.0f, 1.0f, + -1.0f, 1.0f,-1.0f, + -1.0f, 1.0f, 1.0f, + 1.0f, 1.0f, 1.0f, + -1.0f, 1.0f, 1.0f, + 1.0f,-1.0f, 1.0f }; private static readonly uint[] Indices = { - 0, 1, 2, - }; + 0, 1, 3, + 1, 2, 3 + }; public Cube() : base(Vertices, Indices, Indices.Length) { diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 6bd1fd3..af9d402 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -1,18 +1,16 @@ -using System.Text; -using Drawie.Backend.Core.Bridge; +using System.Numerics; +using System.Text; using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.ColorsImpl.Paintables; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Core.Text; +using Drawie.Backend.Vertie.Core; using Drawie.Backend.Vertie.Helpers; using Drawie.Backend.Vertie.Rendering; -using Drawie.Layer.ThreeD.Test; -using Drawie.Layer.UI.ImGui; using Drawie.Numerics; -using Drawie.RenderApi.Abstraction.RenderTargets; using Drawie.Rendering; +using Drawie.Windowing.Input; using DrawiEngine; -using Silk.NET.Windowing; using IWindow = Drawie.Windowing.IWindow; namespace Drawie2Sample; @@ -20,10 +18,37 @@ namespace Drawie2Sample; public class Drawie2SampleApp : DrawieApp { private string shader = """ + struct VertexInput + { + float3 vPos : POSITION; + }; + + struct VertexOutput + { + float4 position : SV_Position; + float3 fPos : TEXCOORD0; + }; + + + [[vk::binding(0, 0)]] + cbuffer Transform + { + float4x4 uModel; + float4x4 uView; + float4x4 uProjection; + }; + [shader("vertex")] - float4 VSMain(float3 position : POSITION) : SV_Position + VertexOutput VSMain(VertexInput input) { - return float4(position, 1.0); + VertexOutput output; + + output.position = mul(mul(mul(uProjection, uView), uModel), float4(input.vPos, 1.0)); + + //We want to know the fragment's position in World space, so we multiply ONLY by uModel and not uView or uProjection + output.fPos = mul(uModel, float4(input.vPos, 1.0)).xyz; + + return output; } [shader("fragment")] @@ -36,6 +61,9 @@ float4 FSMain() : SV_Target private IWindow window; private Material material; + private static Camera camera; + private static VecD lastMousePosition; + public override IWindow CreateMainWindow() { window = Engine.WindowingPlatform.CreateWindow("Drawie 2 Sample", new VecI(1920, 1080)); @@ -51,15 +79,25 @@ private void RenderImGui(double dt) protected override void OnInitialize() { - var matShader = new ShaderDefiniton(this.shader); + var matShader = new ShaderDefinition(this.shader); var compiled = matShader.Compile(); Material mat = new Material("Basic", compiled); + camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); + Cube cube = new Cube(); + cube.Transform.Position = new Vector3(0, 0, 0); + + RegisterMouse(window.InputController); + + window.Update += d => + { + HandleMovement((float)d, camera, window.InputController.PrimaryKeyboard); + }; window.Render += (targetTexture, deltaTime) => { targetTexture.Clear(); - - targetTexture.DrawMesh(new Cube(), mat); + + targetTexture.DrawMesh(cube , mat, camera); using Font defaultFont = Font.CreateDefault(); Paintable color = new ColorPaintable(Colors.White); @@ -78,17 +116,61 @@ protected override void OnInitialize() }; } -} + + + private void RegisterMouse(InputController input) + { + for (int i = 0; i < input.Pointers.Count; i++) + { + var mouse = input.Pointers[i]; + mouse.PointerMoved += OnMouseMove; + mouse.PointerScrolled += OnScroll; + } + } -class DefaultFramebuffer : IRenderTarget -{ - public DefaultFramebuffer(VecI size) + private static void OnScroll(IPointer pointer, VecD scrollDelta) { - Size = size; + camera.Zoom = (float)scrollDelta.Y; } - public uint FramebufferId { get; } = 0; - public VecI Size { get; } - + private static void OnMouseMove(IPointer pointer, VecD position) + { + float lookSensitivity = 0.1f; + if (lastMousePosition == default) + { + lastMousePosition = position; + } + else + { + double offsetX = (position.X - lastMousePosition.X) * lookSensitivity; + double offsetY = (position.Y - lastMousePosition.Y) * lookSensitivity; + lastMousePosition = position; + + camera.SetDirection((float)offsetX, (float)offsetY); + } + } + private static void HandleMovement(float deltaTime, Camera camera, IKeyboard primaryKeyboard) + { + float moveSpeed = 5f * (float)deltaTime; + if (primaryKeyboard.IsKeyPressed(Key.W)) + { + camera.Position += moveSpeed * camera.Forward; + } + + if (primaryKeyboard.IsKeyPressed(Key.S)) + { + camera.Position -= moveSpeed * camera.Forward; + } + + if (primaryKeyboard.IsKeyPressed(Key.A)) + { + camera.Position -= Vector3.Normalize(Vector3.Cross(camera.Forward, camera.Up)) * moveSpeed; + } + + if (primaryKeyboard.IsKeyPressed(Key.D)) + { + camera.Position += Vector3.Normalize(Vector3.Cross(camera.Forward, camera.Up)) * moveSpeed; + } + } } \ No newline at end of file diff --git a/src/ShaderPlayground/Program.cs b/src/ShaderPlayground/Program.cs index 46fa5cd..c15c4d7 100644 --- a/src/ShaderPlayground/Program.cs +++ b/src/ShaderPlayground/Program.cs @@ -90,5 +90,5 @@ void CSMain(uint3 DTid: SV_DispatchThreadID) } """; -ShaderDefiniton shaderDefiniton = new ShaderDefiniton(code); -shaderDefiniton.Compile(); \ No newline at end of file +ShaderDefinition shaderDefinition = new ShaderDefinition(code); +shaderDefinition.Compile(); \ No newline at end of file From c6056f592e5aaf5640b05d016c0de0036d642773 Mon Sep 17 00:00:00 2001 From: flabbet Date: Tue, 11 Aug 2026 15:39:41 +0200 Subject: [PATCH 11/55] Improved shader management --- .../Drawie.Backend.Vertie.csproj | 7 ++- .../Helpers/TextureFramebufferExtensions.cs | 13 ++-- .../Rendering/BuiltInShaders.cs | 20 ++++++ .../Rendering/CompiledShader.cs | 32 +++++++--- .../Rendering/Material.cs | 19 +++--- .../Rendering/ShaderDefinition.cs | 18 +----- .../Shaders/BasicVertex.slang | 32 ++++++++++ src/Drawie.Backend.Vertie/Shaders/Unlit.slang | 5 ++ src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 63 ++++++------------- .../Abstraction/Shaders/ShaderProgramDesc.cs | 22 +++++-- .../Abstraction/Shaders/ShaderType.cs | 3 +- src/Drawie2Sample/Drawie2SampleApp.cs | 45 +------------ 12 files changed, 144 insertions(+), 135 deletions(-) create mode 100644 src/Drawie.Backend.Vertie/Rendering/BuiltInShaders.cs create mode 100644 src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang create mode 100644 src/Drawie.Backend.Vertie/Shaders/Unlit.slang diff --git a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj index a4a9fea..dfcf630 100644 --- a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj +++ b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj @@ -18,7 +18,12 @@ - + + + + + PreserveNewest + diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 7dd51be..8bac57b 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -2,7 +2,6 @@ using Drawie.Backend.Vertie.Core; using Drawie.Backend.Vertie.Rendering; using Drawie.Numerics; -using Drawie.RenderApi; using Drawie.RenderApi.Abstraction; using Drawie.RenderApi.Abstraction.Buffers; using Drawie.RenderApi.Abstraction.CommandRecording; @@ -18,8 +17,8 @@ public static class TextureFramebufferExtensions { private static Dictionary cachedMeshBuffers = new Dictionary(); - private static Dictionary cachedShaderPrograms = - new Dictionary(); + private static Dictionary cachedShaderPrograms = + new Dictionary(); private static ICommandList? cmdList; @@ -86,14 +85,14 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsDevice, Material material) { - if (cachedShaderPrograms.ContainsKey(material.Shader)) + if (cachedShaderPrograms.ContainsKey(material)) { - return cachedShaderPrograms[material.Shader]; + return cachedShaderPrograms[material]; } var program = - graphicsDevice.CreateShaderProgram(new ShaderProgramDesc(material.Shader.Vertex, material.Shader.Fragment)); - cachedShaderPrograms.Add(material.Shader, program); + graphicsDevice.CreateShaderProgram(new ShaderProgramDesc(material.Shaders.Select(x => new ShaderDesc(x.EntryName, x.ShaderBytes, x.ShaderType)))); + cachedShaderPrograms.Add(material, program); return program; } diff --git a/src/Drawie.Backend.Vertie/Rendering/BuiltInShaders.cs b/src/Drawie.Backend.Vertie/Rendering/BuiltInShaders.cs new file mode 100644 index 0000000..e837901 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Rendering/BuiltInShaders.cs @@ -0,0 +1,20 @@ +using Drawie.RenderApi.Abstraction.Shaders; + +namespace Drawie.Backend.Vertie.Rendering; + +public static class BuiltInShaders +{ + static BuiltInShaders() + { + var matShader = new ShaderDefinition(File.ReadAllText("Shaders/BasicVertex.slang")); + var compiled = matShader.Compile(); + BasicVertexShader = compiled; + + var fragmentShader = new ShaderDefinition(File.ReadAllText("Shaders/Unlit.slang")); + var compiledFragment = fragmentShader.Compile(); + UnlitFragmentShader = compiledFragment; + } + + public static CompiledShader BasicVertexShader { get; private set; } + public static CompiledShader UnlitFragmentShader { get; private set; } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs b/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs index 7cd0ebc..944479c 100644 --- a/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs +++ b/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs @@ -3,21 +3,22 @@ namespace Drawie.Backend.Vertie.Rendering; -public class CompiledShader(byte[] vertex, byte[] fragment, SlangReflection vertexReflection, SlangReflection fragmentReflection) +public class CompiledShader(byte[] shaderBytes, SlangReflection reflection) { - public byte[] Vertex { get; } = vertex; - public byte[] Fragment { get; } = fragment; - - public SlangReflection VertexReflection { get; } = vertexReflection; - public SlangReflection FragmentReflection { get; } = fragmentReflection; + public byte[] ShaderBytes { get; } = shaderBytes; + + public ShaderType ShaderType { get; } = StageToType(reflection.EntryPoints.FirstOrDefault()?.Stage); + public string EntryName { get; } = reflection.EntryPoints.FirstOrDefault()?.Name ?? throw new ArgumentException("Shader entry point not found in the compiled shader."); + + public SlangReflection Reflection { get; } = reflection; public IReadOnlyDictionary Properties => properties; private Dictionary properties = new Dictionary(); - public bool HasUniform(string name) + public bool HasUniformBlock(string name) { - return Properties.ContainsKey(name); + return Reflection.Parameters.Any(x => x.Name == name); } public void SetUniformBlock(UniformBlock block) @@ -28,7 +29,7 @@ public void SetUniformBlock(UniformBlock block) private void SetBlockLayout(UniformBlock block) { - var elementVarLayout = VertexReflection.Parameters.FirstOrDefault(x => x.Name == block.Name) + var elementVarLayout = Reflection.Parameters.FirstOrDefault(x => x.Name == block.Name) ?.Type.ConstantBuffer?.ElementVarLayout; if (elementVarLayout?.Binding == null) @@ -45,6 +46,19 @@ private void SetBlockLayout(UniformBlock block) UniformProperties = propLayouts }; } + + private static ShaderType StageToType(SlangStage? stage) + { + if(stage == null) throw new ArgumentException("Shader stage cannot be null."); + + return stage switch + { + SlangStage.Vertex => ShaderType.Vertex, + SlangStage.Fragment => ShaderType.Fragment, + SlangStage.Compute => ShaderType.Compute, + _ => throw new ArgumentException($"Unsupported shader stage: {stage}") + }; + } private List GetPropertyLayouts(SlangVar elementVarLayout) { diff --git a/src/Drawie.Backend.Vertie/Rendering/Material.cs b/src/Drawie.Backend.Vertie/Rendering/Material.cs index 3ffcfa0..e37656b 100644 --- a/src/Drawie.Backend.Vertie/Rendering/Material.cs +++ b/src/Drawie.Backend.Vertie/Rendering/Material.cs @@ -1,8 +1,5 @@ -using System.Collections; -using System.Numerics; -using Drawie.Backend.Core.Shaders; +using System.Numerics; using Drawie.Backend.Vertie.Core; -using Drawie.Numerics; using Drawie.RenderApi; using Drawie.RenderApi.Abstraction.Shaders; @@ -11,16 +8,16 @@ namespace Drawie.Backend.Vertie.Rendering; public class Material { public string Name { get; set; } - public CompiledShader Shader { get; set; } + public CompiledShader[] Shaders { get; set; } public Dictionary Properties { get; set; } = new(); public TextureMaterial[] Textures { get; set; } = Array.Empty(); private int _textureCount; - public Material(string name, CompiledShader shader) + public Material(string name, CompiledShader[] shaders) { Name = name; - Shader = shader; + Shaders = shaders; Properties.Add("Transform", new UniformBlock("Transform") @@ -64,7 +61,13 @@ public void UpdateShader() private void ApplyToShader(UniformBlock prop) { - Shader.SetUniformBlock(prop); + foreach (var shader in Shaders) + { + if (shader.HasUniformBlock(prop.Name)) + { + shader.SetUniformBlock(prop); + } + } } } diff --git a/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs b/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs index 0aa1869..2933650 100644 --- a/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs +++ b/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs @@ -15,26 +15,14 @@ public ShaderDefinition(string slangCode) public CompiledShader Compile() { - var vertex = SlangCompiler.CompileWithReflection(SourceCode, + var bytes = SlangCompiler.CompileWithReflection(SourceCode, [ "-profile", "glsl_450", "-matrix-layout-row-major", "-fvk-use-entrypoint-name", - "-entry", "VSMain", - "-stage", "vertex", "-target", "spirv" - ], out var vertexReflection); + ], out var reflection); - var fragment = SlangCompiler.CompileWithReflection(SourceCode, - [ - "-profile", "glsl_450", - "-matrix-layout-row-major", - "-fvk-use-entrypoint-name", - "-entry", "FSMain", - "-stage", "fragment", - "-target", "spirv" - ], out var fragmentReflection); - - return new CompiledShader(vertex, fragment, vertexReflection, fragmentReflection); + return new CompiledShader(bytes, reflection); } } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang new file mode 100644 index 0000000..a902a7e --- /dev/null +++ b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang @@ -0,0 +1,32 @@ +struct VertexInput +{ + float3 vPos : POSITION; +}; + +struct VertexOutput +{ + float4 position : SV_Position; + float3 fPos : TEXCOORD0; +}; + +[[vk::binding(0, 0)]] +cbuffer Transform +{ + float4x4 uModel; + float4x4 uView; + float4x4 uProjection; +}; + +[shader("vertex")] +VertexOutput VSMain(VertexInput input) +{ + VertexOutput output; + + output.position = mul(mul(mul(uProjection, uView), uModel), float4(input.vPos, 1.0)); + + // We want to know the fragment's position in World space, so we multiply ONLY by uModel and not uView or uProjection + output.fPos = mul(uModel, float4(input.vPos, 1.0)).xyz; + + return output; +} + diff --git a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang new file mode 100644 index 0000000..d2fc48c --- /dev/null +++ b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang @@ -0,0 +1,5 @@ +[shader("fragment")] +float4 FSMain() : SV_Target +{ + return float4(1, 0, 0, 1); +} diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index 5ac5484..51f69a6 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -56,57 +56,33 @@ public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) { var program = Api.CreateProgram(); - uint vertex = 0; - uint fragment = 0; + uint[] shaders = new uint[desc.Shaders.Count]; - if (desc.VertexShaderBytes != null) + for (var i = 0; i < desc.Shaders.Count; i++) { - vertex = Api.CreateShader( - ToOpenGlShaderType(ShaderType.Vertex)); + var shader = desc.Shaders[i]; + shaders[i] = Api.CreateShader( + ToOpenGlShaderType(shader.Type)); - fixed (byte* bytes = desc.VertexShaderBytes) + uint shaderPtr = shaders[i]; + fixed (byte* bytes = shader.Bytes) { Api.ShaderBinary( 1, - &vertex, + &shaderPtr, ShaderBinaryFormat.ShaderBinaryFormatSpirV, bytes, - (uint)desc.VertexShaderBytes.Length); + (uint)shader.Bytes.Length); } Api.SpecializeShader( - vertex, - "VSMain", + shaderPtr, + shader.EntryName, 0, null, null); - Api.AttachShader(program, vertex); - } - - if (desc.FragmentShaderBytes != null) - { - fragment = Api.CreateShader( - ToOpenGlShaderType(ShaderType.Fragment)); - - fixed (byte* bytes = desc.FragmentShaderBytes) - { - Api.ShaderBinary( - 1, - &fragment, - ShaderBinaryFormat.ShaderBinaryFormatSpirV, - bytes, - (uint)desc.FragmentShaderBytes.Length); - } - - Api.SpecializeShader( - fragment, - "FSMain", - 0, - null, - null); - - Api.AttachShader(program, fragment); + Api.AttachShader(program, shaderPtr); } Api.LinkProgram(program); @@ -118,16 +94,13 @@ public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) throw new Exception($"Program failed to link with error: {Api.GetProgramInfoLog(program)}"); } - if (vertex != 0) + for (var i = 0; i < shaders.Length; i++) { - Api.DetachShader(program, vertex); - Api.DeleteShader(vertex); - } - - if (fragment != 0) - { - Api.DetachShader(program, fragment); - Api.DeleteShader(fragment); + if (shaders[i] != 0) + { + Api.DetachShader(program, shaders[i]); + Api.DeleteShader(shaders[i]); + } } return new OpenGlShaderProgram(Api, program); diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs index b4eee0b..f3f7de4 100644 --- a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs @@ -2,12 +2,24 @@ namespace Drawie.RenderApi.Abstraction.Shaders; public struct ShaderProgramDesc { - public byte[] VertexShaderBytes { get; } - public byte[] FragmentShaderBytes { get; } + public List Shaders { get; } - public ShaderProgramDesc(byte[] vertexShaderBytes, byte[] fragmentShaderBytes) + public ShaderProgramDesc(IEnumerable desc) { - VertexShaderBytes = vertexShaderBytes; - FragmentShaderBytes = fragmentShaderBytes; + Shaders = new List(desc); + } +} + +public struct ShaderDesc +{ + public string EntryName { get; set; } + public byte[] Bytes { get; } + public ShaderType Type { get; } + + public ShaderDesc(string entryName, byte[] bytes, ShaderType type) + { + EntryName = entryName; + Bytes = bytes; + Type = type; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs index a901a75..925059b 100644 --- a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs +++ b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs @@ -3,5 +3,6 @@ namespace Drawie.RenderApi.Abstraction.Shaders; public enum ShaderType { Vertex, - Fragment + Fragment, + Compute } \ No newline at end of file diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index af9d402..393e055 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -17,47 +17,6 @@ namespace Drawie2Sample; public class Drawie2SampleApp : DrawieApp { - private string shader = """ - struct VertexInput - { - float3 vPos : POSITION; - }; - - struct VertexOutput - { - float4 position : SV_Position; - float3 fPos : TEXCOORD0; - }; - - - [[vk::binding(0, 0)]] - cbuffer Transform - { - float4x4 uModel; - float4x4 uView; - float4x4 uProjection; - }; - - [shader("vertex")] - VertexOutput VSMain(VertexInput input) - { - VertexOutput output; - - output.position = mul(mul(mul(uProjection, uView), uModel), float4(input.vPos, 1.0)); - - //We want to know the fragment's position in World space, so we multiply ONLY by uModel and not uView or uProjection - output.fPos = mul(uModel, float4(input.vPos, 1.0)).xyz; - - return output; - } - - [shader("fragment")] - float4 FSMain() : SV_Target - { - return float4(1, 0, 0, 1); - } - """; - private IWindow window; private Material material; @@ -79,9 +38,7 @@ private void RenderImGui(double dt) protected override void OnInitialize() { - var matShader = new ShaderDefinition(this.shader); - var compiled = matShader.Compile(); - Material mat = new Material("Basic", compiled); + Material mat = new Material("Basic", [BuiltInShaders.BasicVertexShader, BuiltInShaders.UnlitFragmentShader]); camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); Cube cube = new Cube(); cube.Transform.Position = new Vector3(0, 0, 0); From d7d58c2c69a92f61259a2d3b42f19ff1e7fd65e3 Mon Sep 17 00:00:00 2001 From: flabbet Date: Tue, 11 Aug 2026 19:02:58 +0200 Subject: [PATCH 12/55] Bind texture works --- .../Drawie.Backend.Vertie.csproj | 4 +- .../Helpers/TextureFramebufferExtensions.cs | 16 +++- .../Rendering/Material.cs | 14 ++-- .../Rendering/ShaderDefinition.cs | 4 +- .../Shaders/BasicVertex.slang | 36 ++++++-- src/Drawie.Backend.Vertie/Shaders/Unlit.slang | 16 +++- .../Drawie.RenderApi.OpenGl.csproj | 1 + .../OpenGlCommandList.cs | 29 ++++--- src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 11 ++- src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs | 33 ++++++++ .../OpenGlShaderProgram.cs | 22 ----- src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs | 56 +++++++++++++ .../CommandRecording/ICommandList.cs | 3 +- .../Abstraction/IGraphicsDevice.cs | 4 +- .../Abstraction/Textures/ISampler.cs | 6 ++ .../Abstraction/Textures/SamplerDesc.cs | 6 ++ src/Drawie.Rendering/IGraphicsStore.cs | 6 ++ src/Drawie2Sample/Cube.cs | 78 ++++++++++-------- src/Drawie2Sample/Drawie2Sample.csproj | 15 ++++ src/Drawie2Sample/Drawie2SampleApp.cs | 15 ++++ src/Drawie2Sample/Images/dancing-dog.gif | Bin 0 -> 227225 bytes src/Drawie2Sample/Images/silkBoxed.png | Bin 0 -> 11484 bytes src/Drawie2Sample/Images/silkSpecular.png | Bin 0 -> 12099 bytes src/Drawie2Sample/Images/texture.png | Bin 0 -> 2826 bytes 24 files changed, 276 insertions(+), 99 deletions(-) create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Textures/ISampler.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Textures/SamplerDesc.cs create mode 100644 src/Drawie2Sample/Images/dancing-dog.gif create mode 100644 src/Drawie2Sample/Images/silkBoxed.png create mode 100644 src/Drawie2Sample/Images/silkSpecular.png create mode 100644 src/Drawie2Sample/Images/texture.png diff --git a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj index dfcf630..227e588 100644 --- a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj +++ b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj @@ -21,9 +21,9 @@ - + PreserveNewest - + diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 8bac57b..45b92c1 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -2,6 +2,7 @@ using Drawie.Backend.Vertie.Core; using Drawie.Backend.Vertie.Rendering; using Drawie.Numerics; +using Drawie.RenderApi; using Drawie.RenderApi.Abstraction; using Drawie.RenderApi.Abstraction.Buffers; using Drawie.RenderApi.Abstraction.CommandRecording; @@ -16,6 +17,7 @@ namespace Drawie.Backend.Vertie.Helpers; public static class TextureFramebufferExtensions { private static Dictionary cachedMeshBuffers = new Dictionary(); + private static Dictionary cachedSamplers = new Dictionary(); private static Dictionary cachedShaderPrograms = new Dictionary(); @@ -65,12 +67,18 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came material.PrepareForObject(mesh.Transform); shader.UpdateUniforms(material.Properties.Values.ToList()); - - foreach (var texture in material.Textures) + + foreach (var materialTexture in material.Textures) { - cmdList.BindTexture(texture.Name, texture.Texture); + var sampler = cachedSamplers.GetValueOrDefault(materialTexture); + if (sampler == null) + { + sampler = device.CreateSampler(new SamplerDesc()); + cachedSamplers[materialTexture] = sampler; + } + cmdList.BindTexture(materialTexture, sampler); } - + cmdList.DrawIndexed(mesh.IndexCount); var recordedRenderPass = cmdList.EndRenderPass(fb); diff --git a/src/Drawie.Backend.Vertie/Rendering/Material.cs b/src/Drawie.Backend.Vertie/Rendering/Material.cs index e37656b..6b701fa 100644 --- a/src/Drawie.Backend.Vertie/Rendering/Material.cs +++ b/src/Drawie.Backend.Vertie/Rendering/Material.cs @@ -10,7 +10,7 @@ public class Material public string Name { get; set; } public CompiledShader[] Shaders { get; set; } public Dictionary Properties { get; set; } = new(); - public TextureMaterial[] Textures { get; set; } = Array.Empty(); + public List Textures { get; set; } = new(); private int _textureCount; @@ -24,6 +24,7 @@ public Material(string name, CompiledShader[] shaders) .AddProperty(new ShaderProperty("uModel", Matrix4x4.Identity)) .AddProperty(new ShaderProperty("uView", Matrix4x4.Identity)) .AddProperty(new ShaderProperty("uProjection", Matrix4x4.Identity))); + /* if (shader.HasUniform("viewPos")) { @@ -31,6 +32,11 @@ public Material(string name, CompiledShader[] shaders) } */ } + + public void AddTexture(ITexture texture) + { + Textures.Add(texture); + } public void Use(Camera camera) { @@ -69,10 +75,4 @@ private void ApplyToShader(UniformBlock prop) } } } -} - -public struct TextureMaterial -{ - public string Name { get; set; } - public ITexture Texture { get; set; } } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs b/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs index 2933650..060f48e 100644 --- a/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs +++ b/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs @@ -18,10 +18,12 @@ public CompiledShader Compile() var bytes = SlangCompiler.CompileWithReflection(SourceCode, [ "-profile", "glsl_450", - "-matrix-layout-row-major", + "-matrix-layout-column-major", "-fvk-use-entrypoint-name", "-target", "spirv" ], out var reflection); + + File.WriteAllBytes("shader.spv", bytes); return new CompiledShader(bytes, reflection); } diff --git a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang index a902a7e..46a3771 100644 --- a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang +++ b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang @@ -1,12 +1,16 @@ struct VertexInput { - float3 vPos : POSITION; + float3 vPos : POSITION; + float3 vNormal : NORMAL; + float2 vTexCoords : TEXCOORD0; }; struct VertexOutput { - float4 position : SV_Position; - float3 fPos : TEXCOORD0; + float4 position : SV_Position; + float3 fNormal : TEXCOORD0; + float3 fPos : TEXCOORD1; + float2 fTexCoords : TEXCOORD2; }; [[vk::binding(0, 0)]] @@ -22,11 +26,27 @@ VertexOutput VSMain(VertexInput input) { VertexOutput output; - output.position = mul(mul(mul(uProjection, uView), uModel), float4(input.vPos, 1.0)); + output.position = mul( + mul( + mul(uProjection, uView), + uModel + ), + float4(input.vPos, 1.0) + ); - // We want to know the fragment's position in World space, so we multiply ONLY by uModel and not uView or uProjection - output.fPos = mul(uModel, float4(input.vPos, 1.0)).xyz; + output.fPos = mul( + uModel, + float4(input.vPos, 1.0) + ).xyz; - return output; -} + float3x3 model3x3 = float3x3(uModel); + + output.fNormal = mul( + float3x3(uModel), + input.vNormal + ); + output.fTexCoords = input.vTexCoords; + + return output; +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang index d2fc48c..3691d88 100644 --- a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang +++ b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang @@ -1,5 +1,15 @@ +struct FragmentInput +{ + float3 fNormal : TEXCOORD0; + float3 fPos : TEXCOORD1; + float2 fTexCoords : TEXCOORD2; +}; + +[[vk::binding(0, 0)]] +Sampler2D uTexture; + [shader("fragment")] -float4 FSMain() : SV_Target +float4 PSMain(FragmentInput input) : SV_Target { - return float4(1, 0, 0, 1); -} + return uTexture.Sample(input.fTexCoords); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj b/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj index 6013806..9bde73b 100644 --- a/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj +++ b/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj @@ -13,6 +13,7 @@ + diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index 32084a6..787d104 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -2,6 +2,7 @@ using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.OpenGL.Extensions; using Silk.NET.OpenGL; @@ -49,9 +50,13 @@ public void SetIndexBuffer(IBuffer indexBuffer) Api.BindBuffer(indexBuffer.Usage.ToOpenGlTargetARB(), indexBuffer.NativeHandle); } - public void BindTexture(string textureName, ITexture texture) + public void BindTexture(ITexture texture, ISampler sampler) { - throw new NotImplementedException(); + if (texture is not IOpenGlTexture openGlTexture) throw new ArgumentException("Cannot bind non opengl textures"); + if (sampler is not OpenGlSampler openGlSampler) throw new ArgumentException("Cannot bind non opengl samplers"); + Api.ActiveTexture(TextureUnit.Texture0); + Api.BindTexture(TextureTarget.Texture2D, openGlTexture.TextureId); + //Api.BindSampler(0, openGlSampler.SamplerId); } public void DrawIndexed(int indexCount) @@ -104,14 +109,16 @@ private unsafe void HandleVao() Api.BindBuffer(indexBuffer.Usage.ToOpenGlTargetARB(), indexBuffer?.NativeHandle ?? 0); - Api.EnableVertexAttribArray(0); - - Api.VertexAttribPointer( - 0, - 3, - VertexAttribPointerType.Float, - false, - 3 * sizeof(float), - null); + VertexAttributePointer(0, 3, VertexAttribPointerType.Float, 8, 0); + VertexAttributePointer(1, 3, VertexAttribPointerType.Float, 8, 3); + VertexAttributePointer(2, 2, VertexAttribPointerType.Float, 8, 6); + } + + private unsafe void VertexAttributePointer(uint index, int count, VertexAttribPointerType type, uint vertexSize, + int offset) + { + int vTypeSize = sizeof(float); + Api.VertexAttribPointer(index, count, type, false, vertexSize * (uint) vTypeSize, (void*) (offset * vTypeSize)); + Api.EnableVertexAttribArray(index); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index 51f69a6..c09bce9 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -14,12 +14,14 @@ namespace Drawie.RenderApi.OpenGL; public class OpenGlDevice : IGraphicsDevice { + public static GL DEBUG_API; private int handleCounter = 0; public GL Api { get; } public OpenGlDevice(GL api) { Api = api; + DEBUG_API = api; } public Dictionary ManagedObjects { get; } = new Dictionary(); @@ -31,7 +33,7 @@ public IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData public ITexture CreateTexture(TextureDesc desc) { - throw new NotImplementedException(); + return new OpenGlTexture(Api, desc.Width, desc.Height); } public IPipeline CreatePipeline(PipelineDesc desc) @@ -44,6 +46,11 @@ public ICommandList CreateCommandList() return new OpenGlCommandList(Api); } + public ISampler CreateSampler(SamplerDesc desc) + { + return new OpenGlSampler(Api); + } + public void Submit(RecordedRenderPass recordedRenderPass) { foreach (var instruction in recordedRenderPass.Instructions) @@ -86,7 +93,7 @@ public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) } Api.LinkProgram(program); - + Api.GetProgram(program, GLEnum.LinkStatus, out var status); if (status == 0) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs b/src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs new file mode 100644 index 0000000..e407a96 --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs @@ -0,0 +1,33 @@ +using Drawie.RenderApi.Abstraction.Textures; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; + +public class OpenGlSampler : ISampler +{ + public uint SamplerId { get; } + + public OpenGlSampler(GL api) + { + SamplerId = api.CreateSampler(); + api.SamplerParameter( + SamplerId, + SamplerParameterI.MinFilter, + (int)TextureMinFilter.Linear); + + api.SamplerParameter( + SamplerId, + SamplerParameterI.MagFilter, + (int)TextureMagFilter.Linear); + + api.SamplerParameter( + SamplerId, + SamplerParameterI.WrapS, + (int)TextureWrapMode.Repeat); + + api.SamplerParameter( + SamplerId, + SamplerParameterI.WrapT, + (int)TextureWrapMode.Repeat); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs b/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs index 5e2b770..10220a7 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs @@ -1,9 +1,5 @@ -using System.Numerics; using System.Runtime.InteropServices; -using System.Text; -using Drawie.Numerics; using Drawie.RenderApi.Abstraction.Shaders; -using Silk.NET.Core.Native; using Silk.NET.OpenGL; namespace Drawie.RenderApi.OpenGL; @@ -83,30 +79,12 @@ public unsafe void UpdateUniforms(List uniformBlocks) } } - private int GetUniformBlockSize(uint blockIndex) - { - int[] size = new int[1]; - - Api.GetActiveUniformBlock( - ProgramHandle, - blockIndex, - UniformBlockPName.DataSize, - size); - - return size[0]; - } - private unsafe void UploadProperty( object value, UniformPropertyLayout layout) { int size = layout.Size; - if (value is Matrix4x4 matrix4X4) - { - value = Matrix4x4.Transpose(matrix4X4); - } - GCHandle handle = GCHandle.Alloc( value, GCHandleType.Pinned); diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs index 0c569b8..c8ac950 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs @@ -1,4 +1,6 @@ using Silk.NET.OpenGL; +using SixLabors.ImageSharp; +using SixLabors.ImageSharp.PixelFormats; namespace Drawie.RenderApi.OpenGL; @@ -62,6 +64,60 @@ public unsafe OpenGlTexture(GL api, int width, int height) TextureParameterName.TextureMagFilter, (int)GLEnum.Nearest); } + + public unsafe OpenGlTexture(GL api, int width, int height, string path) + { + Api = api; + + Width = width; + Height = height; + + TextureId = Api.GenTexture(); + + Activate(0); + Bind(); + + LoadTextureFromPath(path); + + Api.TexParameterI( + TextureTarget.Texture2D, + TextureParameterName.TextureWrapS, + (int)GLEnum.ClampToEdge); + + Api.TexParameterI( + TextureTarget.Texture2D, + TextureParameterName.TextureWrapT, + (int)GLEnum.ClampToEdge); + + Api.TexParameterI( + TextureTarget.Texture2D, + TextureParameterName.TextureMinFilter, + (int)GLEnum.Nearest); + + Api.TexParameterI( + TextureTarget.Texture2D, + TextureParameterName.TextureMagFilter, + (int)GLEnum.Nearest); + } + + private unsafe void LoadTextureFromPath(string path) + { + using var img = Image.Load(path); + // Reserve memory in GPU for whole image + Api.TexImage2D(TextureTarget.Texture2D, 0, InternalFormat.Rgba8, (uint)img.Width, (uint)img.Height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, null); + + img.ProcessPixelRows(accessor => + { + for (int y = 0; y < accessor.Height; y++) + { + fixed (void* data = accessor.GetRowSpan(y)) + { + // Load the actual image + Api.TexSubImage2D(TextureTarget.Texture2D, 0, 0, y, (uint)accessor.Width, 1, PixelFormat.Rgba, PixelType.UnsignedByte, data); + } + } + }); + } public void Bind() { diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs index e7c1362..4e2130a 100644 --- a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs @@ -1,6 +1,7 @@ using Drawie.RenderApi.Abstraction.Buffers; using Drawie.RenderApi.Abstraction.Pipeline; using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.RenderApi.Abstraction.CommandRecording; @@ -10,7 +11,7 @@ public interface ICommandList void SetPipeline(IPipeline pipeline); void SetVertexBuffer(IBuffer vertexBuffer); void SetIndexBuffer(IBuffer indexBuffer); - void BindTexture(string textureName, ITexture texture); + void BindTexture(ITexture texture, ISampler sampler); void DrawIndexed(int indexCount); RecordedRenderPass EndRenderPass(IRenderTarget blitTo); RecordedRenderPass EndRenderPass(); diff --git a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs index c77d53e..bb2151d 100644 --- a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs +++ b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs @@ -15,9 +15,9 @@ public interface IGraphicsDevice ICommandList CreateCommandList(); Dictionary ManagedObjects { get; } - - /* ISampler CreateSampler(SamplerDesc desc); + + /* IShader CreateShader(ShaderDesc desc); */ void Submit(RecordedRenderPass cmdList); diff --git a/src/Drawie.RenderApi/Abstraction/Textures/ISampler.cs b/src/Drawie.RenderApi/Abstraction/Textures/ISampler.cs new file mode 100644 index 0000000..d1745bd --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Textures/ISampler.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.Abstraction.Textures; + +public interface ISampler +{ + +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Textures/SamplerDesc.cs b/src/Drawie.RenderApi/Abstraction/Textures/SamplerDesc.cs new file mode 100644 index 0000000..0675844 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Textures/SamplerDesc.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.Abstraction.Textures; + +public struct SamplerDesc +{ + +} \ No newline at end of file diff --git a/src/Drawie.Rendering/IGraphicsStore.cs b/src/Drawie.Rendering/IGraphicsStore.cs index cb3f0ba..652f59d 100644 --- a/src/Drawie.Rendering/IGraphicsStore.cs +++ b/src/Drawie.Rendering/IGraphicsStore.cs @@ -27,6 +27,12 @@ public GraphicsStore(IGraphicsContext graphicsContext) #endif } + public Texture Create(VecI size) + { + textures.Add(new Texture(new NativeTexture(size))); + return textures[^1]; + } + public Texture CreateNativeRenderSurface(VecI size, ITexture nativeTexture, SurfaceOrigin origin) { if (!GraphicsContext.OwnsTexture(nativeTexture)) diff --git a/src/Drawie2Sample/Cube.cs b/src/Drawie2Sample/Cube.cs index a9028a5..1860ce0 100644 --- a/src/Drawie2Sample/Cube.cs +++ b/src/Drawie2Sample/Cube.cs @@ -6,42 +6,48 @@ public class Cube : Mesh { private static readonly float[] Vertices = new float[] { - -1.0f,-1.0f,-1.0f, // triangle 1 : begin - -1.0f,-1.0f, 1.0f, - -1.0f, 1.0f, 1.0f, // triangle 1 : end - 1.0f, 1.0f,-1.0f, // triangle 2 : begin - -1.0f,-1.0f,-1.0f, - -1.0f, 1.0f,-1.0f, // triangle 2 : end - 1.0f,-1.0f, 1.0f, - -1.0f,-1.0f,-1.0f, - 1.0f,-1.0f,-1.0f, - 1.0f, 1.0f,-1.0f, - 1.0f,-1.0f,-1.0f, - -1.0f,-1.0f,-1.0f, - -1.0f,-1.0f,-1.0f, - -1.0f, 1.0f, 1.0f, - -1.0f, 1.0f,-1.0f, - 1.0f,-1.0f, 1.0f, - -1.0f,-1.0f, 1.0f, - -1.0f,-1.0f,-1.0f, - -1.0f, 1.0f, 1.0f, - -1.0f,-1.0f, 1.0f, - 1.0f,-1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, - 1.0f,-1.0f,-1.0f, - 1.0f, 1.0f,-1.0f, - 1.0f,-1.0f,-1.0f, - 1.0f, 1.0f, 1.0f, - 1.0f,-1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, - 1.0f, 1.0f,-1.0f, - -1.0f, 1.0f,-1.0f, - 1.0f, 1.0f, 1.0f, - -1.0f, 1.0f,-1.0f, - -1.0f, 1.0f, 1.0f, - 1.0f, 1.0f, 1.0f, - -1.0f, 1.0f, 1.0f, - 1.0f,-1.0f, 1.0f + //X Y Z Normals U V + -1f, -1f, -1f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, + 1f, -1f, -1f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, + 1f, 1f, -1f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, + 1f, 1f, -1f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, + -1f, 1f, -1f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, + -1f, -1f, -1f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, + + -1f, -1f, 1f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, + 1f, -1f, 1f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, + 1f, 1f, 1f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, + 1f, 1f, 1f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, + -1f, 1f, 1f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, + -1f, -1f, 1f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, + + -1f, 1f, 1f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + -1f, 1f, -1f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, + -1f, -1f, -1f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + -1f, -1f, -1f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + -1f, -1f, 1f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + -1f, 1f, 1f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + + 1f, 1f, 1f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + 1f, 1f, -1f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, + 1f, -1f, -1f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + 1f, -1f, -1f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, + 1f, -1f, 1f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, + 1f, 1f, 1f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, + + -1f, -1f, -1f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, + 1f, -1f, -1f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f, + 1f, -1f, 1f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, + 1f, -1f, 1f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, + -1f, -1f, 1f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, + -1f, -1f, -1f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, + + -1f, 1f, -1f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, + 1f, 1f, -1f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, + 1f, 1f, 1f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, + 1f, 1f, 1f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, + -1f, 1f, 1f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, + -1f, 1f, -1f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f }; private static readonly uint[] Indices = diff --git a/src/Drawie2Sample/Drawie2Sample.csproj b/src/Drawie2Sample/Drawie2Sample.csproj index 2eadc60..7715ef2 100644 --- a/src/Drawie2Sample/Drawie2Sample.csproj +++ b/src/Drawie2Sample/Drawie2Sample.csproj @@ -13,5 +13,20 @@ + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 393e055..5961ae6 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -1,5 +1,7 @@ using System.Numerics; using System.Text; +using Drawie.Backend.Core; +using Drawie.Backend.Core.Bridge; using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.ColorsImpl.Paintables; using Drawie.Backend.Core.Surfaces.PaintImpl; @@ -8,6 +10,8 @@ using Drawie.Backend.Vertie.Helpers; using Drawie.Backend.Vertie.Rendering; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Textures; +using Drawie.RenderApi.OpenGL; using Drawie.Rendering; using Drawie.Windowing.Input; using DrawiEngine; @@ -39,6 +43,17 @@ private void RenderImGui(double dt) protected override void OnInitialize() { Material mat = new Material("Basic", [BuiltInShaders.BasicVertexShader, BuiltInShaders.UnlitFragmentShader]); + var tex = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice.CreateTexture(new TextureDesc(){ + Width = 512, + Height = 512, + Format = TextureFormat.RGBA8_Unorm, + Depth = DepthFormat.NoDepth, + }); + + var surf = DrawingBackendApi.Current.CreateRenderSurface(new VecI(512, 512), tex, SurfaceOrigin.BottomLeft); + surf.Canvas.DrawCircle(256, 256, 128, new Paint(){Color = Colors.Red}); + + mat.AddTexture(new OpenGlTexture(OpenGlDevice.DEBUG_API, 359, 359, "Images/silkBoxed.png")); camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); Cube cube = new Cube(); cube.Transform.Position = new Vector3(0, 0, 0); diff --git a/src/Drawie2Sample/Images/dancing-dog.gif b/src/Drawie2Sample/Images/dancing-dog.gif new file mode 100644 index 0000000000000000000000000000000000000000..39d4366fa73781e000753a685833931f5dae8a4b GIT binary patch literal 227225 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 _+moOD$d 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 JR;ZW^R?T&R}Lqjn*b*v=H;QTAG$I96hG7 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 z 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⪚tQrN_qmAr)4rkc2p$im+t*)x) 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

f%N}+k(nosM=>;LwRs?75v>IoqDTf)%$ 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 EKQ^rfr2qf` literal 0 HcmV?d00001 diff --git a/src/Drawie2Sample/Images/silkSpecular.png b/src/Drawie2Sample/Images/silkSpecular.png new file mode 100644 index 0000000000000000000000000000000000000000..6a5a415ee4bd5ce10fa046bdb2522635459232b1 GIT binary patch literal 12099 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 BjX(eZ literal 0 HcmV?d00001 From 775eef983249c7815484ca93037b78887096d1ee Mon Sep 17 00:00:00 2001 From: flabbet Date: Wed, 12 Aug 2026 09:01:54 +0200 Subject: [PATCH 13/55] Removed ImageSharp --- .../Drawie.RenderApi.OpenGl.csproj | 1 - src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs | 52 +++++-------------- src/Drawie2Sample/Drawie2SampleApp.cs | 4 +- 3 files changed, 16 insertions(+), 41 deletions(-) diff --git a/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj b/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj index 9bde73b..6013806 100644 --- a/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj +++ b/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj @@ -13,7 +13,6 @@ - diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs index c8ac950..6e6db81 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs @@ -1,6 +1,4 @@ using Silk.NET.OpenGL; -using SixLabors.ImageSharp; -using SixLabors.ImageSharp.PixelFormats; namespace Drawie.RenderApi.OpenGL; @@ -44,28 +42,10 @@ public unsafe OpenGlTexture(GL api, int width, int height) PixelType.UnsignedByte, null); - Api.TexParameterI( - TextureTarget.Texture2D, - TextureParameterName.TextureWrapS, - (int)GLEnum.ClampToEdge); - - Api.TexParameterI( - TextureTarget.Texture2D, - TextureParameterName.TextureWrapT, - (int)GLEnum.ClampToEdge); - - Api.TexParameterI( - TextureTarget.Texture2D, - TextureParameterName.TextureMinFilter, - (int)GLEnum.Nearest); - - Api.TexParameterI( - TextureTarget.Texture2D, - TextureParameterName.TextureMagFilter, - (int)GLEnum.Nearest); + ApplyParameters(); } - public unsafe OpenGlTexture(GL api, int width, int height, string path) + public unsafe OpenGlTexture(GL api, int width, int height, Span data, PixelFormat format = PixelFormat.Rgba) { Api = api; @@ -77,8 +57,13 @@ public unsafe OpenGlTexture(GL api, int width, int height, string path) Activate(0); Bind(); - LoadTextureFromPath(path); + LoadTextureFromBytes(data, format); + ApplyParameters(); + } + + private void ApplyParameters() + { Api.TexParameterI( TextureTarget.Texture2D, TextureParameterName.TextureWrapS, @@ -99,24 +84,13 @@ public unsafe OpenGlTexture(GL api, int width, int height, string path) TextureParameterName.TextureMagFilter, (int)GLEnum.Nearest); } - - private unsafe void LoadTextureFromPath(string path) + + private unsafe void LoadTextureFromBytes(Span data, PixelFormat format) { - using var img = Image.Load(path); - // Reserve memory in GPU for whole image - Api.TexImage2D(TextureTarget.Texture2D, 0, InternalFormat.Rgba8, (uint)img.Width, (uint)img.Height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, null); - - img.ProcessPixelRows(accessor => + fixed (void* d = &data[0]) { - for (int y = 0; y < accessor.Height; y++) - { - fixed (void* data = accessor.GetRowSpan(y)) - { - // Load the actual image - Api.TexSubImage2D(TextureTarget.Texture2D, 0, 0, y, (uint)accessor.Width, 1, PixelFormat.Rgba, PixelType.UnsignedByte, data); - } - } - }); + Api.TexImage2D(TextureTarget.Texture2D, 0, (int)InternalFormat.Rgba, (uint)Width, (uint)Height, 0, format, PixelType.UnsignedByte, d); + } } public void Bind() diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 5961ae6..c2ebc00 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -15,6 +15,7 @@ using Drawie.Rendering; using Drawie.Windowing.Input; using DrawiEngine; +using Silk.NET.OpenGL; using IWindow = Drawie.Windowing.IWindow; namespace Drawie2Sample; @@ -53,7 +54,8 @@ protected override void OnInitialize() var surf = DrawingBackendApi.Current.CreateRenderSurface(new VecI(512, 512), tex, SurfaceOrigin.BottomLeft); surf.Canvas.DrawCircle(256, 256, 128, new Paint(){Color = Colors.Red}); - mat.AddTexture(new OpenGlTexture(OpenGlDevice.DEBUG_API, 359, 359, "Images/silkBoxed.png")); + var pixelSpan = Surface.Load("Images/silkBoxed.png").DrawingSurface.PeekPixels().GetPixelSpan(); + mat.AddTexture(new OpenGlTexture(OpenGlDevice.DEBUG_API, 359, 359, pixelSpan, PixelFormat.Bgra)); camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); Cube cube = new Cube(); cube.Transform.Position = new Vector3(0, 0, 0); From c4e5c5da0dd6563e7495ae11b18768f8e8ec1dc5 Mon Sep 17 00:00:00 2001 From: flabbet Date: Wed, 12 Aug 2026 12:52:04 +0200 Subject: [PATCH 14/55] Custom model drawing --- .../DesktopDrawingEngine.cs | 2 +- src/DrawiEngine/DrawieApp.cs | 2 +- src/DrawiEngine/DrawieRenderingDispatcher.cs | 37 +- .../Bridge/DrawingBackendApi.cs | 6 +- .../Bridge/IDrawingBackend.cs | 1 + .../Bridge/Operations/IImageImplementation.cs | 1 + .../IRenderingDispatcher.cs | 1 + src/Drawie.Backend.Core/NativeTexture.cs | 3 +- .../Surfaces/DrawingSurface.cs | 2 + .../Surfaces/ImageData/Image.cs | 6 +- .../SkiaImageImplementation.cs | 5 + .../SkiaSurfaceImplementation.cs | 10 +- src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 12 +- src/Drawie.Backend.Vertie/Core/Mesh.cs | 74 +- .../Drawie.Backend.Vertie.csproj | 1 + .../Helpers/TextureFramebufferExtensions.cs | 29 +- .../Rendering/Material.cs | 1 + .../RenderApiResources.cs | 1 + .../OpenGlRenderApiResources.cs | 1 + .../Vk/VulkanResources.cs | 1 + src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs | 20 +- .../OpenGlBufferList.cs | 8 + .../OpenGlCommandList.cs | 67 +- src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 9 +- .../OpenGlGraphicsContext.cs | 3 +- src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs | 1 + .../OpenGlRenderTarget.cs | 2 +- src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs | 6 +- .../OpenGlVertexArrayObject.cs | 27 + .../OpenGlWindowRenderApi.cs | 1 + .../Buffers/VulkanTexture.cs | 2 + .../VulkanWindowRenderApi.cs | 1 + src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs | 3 +- .../WebGlGraphicsContext.cs | 1 + .../WebGlWindowRenderApi.cs | 1 + .../Abstraction/Buffers/BufferUsage.cs | 2 +- .../Abstraction/Buffers/IBuffer.cs | 5 + .../Abstraction/Buffers/IBufferGroup.cs | 7 + .../Abstraction/Buffers/IBufferGroupList.cs | 6 + .../CommandRecording/ICommandList.cs | 3 +- .../Abstraction/IGraphicsDevice.cs | 6 +- .../Abstraction/Textures/ITexture.cs | 3 +- src/Drawie.RenderApi/ICanvasTexture.cs | 4 +- src/Drawie.RenderApi/IGraphicsContext.cs | 2 + src/Drawie.RenderApi/IOpenGlTexture.cs | 5 +- src/Drawie.RenderApi/IVkTexture.cs | 2 + src/Drawie.RenderApi/IWebGlTexture.cs | 4 +- src/Drawie.RenderApi/IWindowRenderApi.cs | 1 + src/Drawie.Rendering/IGraphicsStore.cs | 1 + src/Drawie.Windowing.Glfw/GlfwWindow.cs | 9 +- src/Drawie.sln.DotSettings.user | 5 + .../{Images => Assets}/silkBoxed.png | Bin .../{Images => Assets}/silkSpecular.png | Bin src/Drawie2Sample/Assets/teapot.obj | 4663 +++++++++++++++++ src/Drawie2Sample/Cube.cs | 62 - src/Drawie2Sample/Drawie2Sample.csproj | 11 +- src/Drawie2Sample/Drawie2SampleApp.cs | 20 +- src/Drawie2Sample/Images/dancing-dog.gif | Bin 227225 -> 0 bytes src/Drawie2Sample/Images/texture.png | Bin 2826 -> 0 bytes 59 files changed, 4959 insertions(+), 210 deletions(-) create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlBufferList.cs create mode 100644 src/Drawie.RenderApi.OpenGl/OpenGlVertexArrayObject.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Buffers/IBufferGroup.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Buffers/IBufferGroupList.cs rename src/Drawie2Sample/{Images => Assets}/silkBoxed.png (100%) rename src/Drawie2Sample/{Images => Assets}/silkSpecular.png (100%) create mode 100644 src/Drawie2Sample/Assets/teapot.obj delete mode 100644 src/Drawie2Sample/Cube.cs delete mode 100644 src/Drawie2Sample/Images/dancing-dog.gif delete mode 100644 src/Drawie2Sample/Images/texture.png diff --git a/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs b/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs index fb52b94..2c855b0 100644 --- a/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs +++ b/src/DrawiEngine.Desktop/DesktopDrawingEngine.cs @@ -17,7 +17,7 @@ public static DrawingEngine CreateDefaultDesktop(bool preferVulkan = true) renderApi = new OpenGlRenderApi(); } - return new DrawingEngine(renderApi, new GlfwWindowingPlatform(renderApi), new SkiaDrawingBackend(renderApi.GraphicsDevice), + return new DrawingEngine(renderApi, new GlfwWindowingPlatform(renderApi), new SkiaDrawingBackend(), new DrawieRenderingDispatcher()); } } diff --git a/src/DrawiEngine/DrawieApp.cs b/src/DrawiEngine/DrawieApp.cs index 1777b8f..0b04922 100644 --- a/src/DrawiEngine/DrawieApp.cs +++ b/src/DrawiEngine/DrawieApp.cs @@ -21,7 +21,7 @@ public void Initialize(DrawingEngine engine) public void Run() { - if (DrawingBackendApi.HasBackend) + if (DrawingBackendApi.Initialized) { OnInitialize(); } diff --git a/src/DrawiEngine/DrawieRenderingDispatcher.cs b/src/DrawiEngine/DrawieRenderingDispatcher.cs index 77391da..62c0f40 100644 --- a/src/DrawiEngine/DrawieRenderingDispatcher.cs +++ b/src/DrawiEngine/DrawieRenderingDispatcher.cs @@ -4,7 +4,40 @@ namespace DrawiEngine; public class DrawieRenderingDispatcher : IRenderingDispatcher { - public Action Invoke { get; } = action => action(); + private bool renderApiReady = false; + + private List queuedActions = new List(); + + public Action Invoke { get; } + + public DrawieRenderingDispatcher() + { + Invoke = OnInvoke; + } + + private void OnInvoke(Action action) + { + if (renderApiReady) + { + action(); + } + else + { + queuedActions.Add(action); + } + } + + void IRenderingDispatcher.RenderApiReady() + { + renderApiReady = true; + + foreach (var action in queuedActions) + { + action(); + } + + queuedActions.Clear(); + } public async Task InvokeAsync(Func func) { @@ -32,4 +65,4 @@ public class EmptyDisposable : IDisposable public void Dispose() { } -} +} \ No newline at end of file diff --git a/src/Drawie.Backend.Core/Bridge/DrawingBackendApi.cs b/src/Drawie.Backend.Core/Bridge/DrawingBackendApi.cs index dccf998..a78ce3b 100644 --- a/src/Drawie.Backend.Core/Bridge/DrawingBackendApi.cs +++ b/src/Drawie.Backend.Core/Bridge/DrawingBackendApi.cs @@ -22,6 +22,7 @@ public static IDrawingBackend Current } public static bool HasBackend => _current != null; + public static bool Initialized { get; private set; } public static void SetupBackend(IDrawingBackend backend, IRenderingDispatcher dispatcher) { @@ -32,8 +33,6 @@ public static void SetupBackend(IDrawingBackend backend, IRenderingDispatcher di _current = backend; _current.RenderingDispatcher = dispatcher; - - OnBackendInitialized?.Invoke(); } public static void InitializeBackend(IRenderApi renderApi) @@ -44,6 +43,9 @@ public static void InitializeBackend(IRenderApi renderApi) } _current.Setup(renderApi); + _current.RenderingDispatcher.RenderApiReady(); + OnBackendInitialized?.Invoke(); + Initialized = true; } } } diff --git a/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs b/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs index 576e769..e3f5cc4 100644 --- a/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs +++ b/src/Drawie.Backend.Core/Bridge/IDrawingBackend.cs @@ -3,6 +3,7 @@ using Drawie.Backend.Core.Surfaces; using Drawie.Numerics; using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Backend.Core.Bridge { diff --git a/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs b/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs index 056b7bb..9a4168f 100644 --- a/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs +++ b/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs @@ -29,5 +29,6 @@ public Shader ToShader(IntPtr objectPointer, TileMode tileX, TileMode tileY, Sam Matrix3X3 localMatrix); public Shader ToRawShader(IntPtr objectPointer); public Shader? ToShader(IntPtr objectPointer, TileMode clamp, TileMode tileMode, Matrix3X3 fillMatrixValue); + public uint GetUniqueId(IntPtr objectPointer); } } diff --git a/src/Drawie.Backend.Core/IRenderingDispatcher.cs b/src/Drawie.Backend.Core/IRenderingDispatcher.cs index 0a05624..8f540b1 100644 --- a/src/Drawie.Backend.Core/IRenderingDispatcher.cs +++ b/src/Drawie.Backend.Core/IRenderingDispatcher.cs @@ -3,6 +3,7 @@ public interface IRenderingDispatcher { public Action Invoke { get; } + protected internal void RenderApiReady(); public Task InvokeAsync(Func func); public Task InvokeInBackgroundAsync(Func function); public Task InvokeInBackgroundAsync(Action function); diff --git a/src/Drawie.Backend.Core/NativeTexture.cs b/src/Drawie.Backend.Core/NativeTexture.cs index f8e249c..b834ecd 100644 --- a/src/Drawie.Backend.Core/NativeTexture.cs +++ b/src/Drawie.Backend.Core/NativeTexture.cs @@ -120,11 +120,12 @@ public NativeTexture(ImageInfo imageImageInfo) throw new Exception("Could not create DrawingSurface for Texture."); } } + + DrawingSurface.Changed += DrawingSurfaceOnChanged; } ); ImageInfo = imageImageInfo; - DrawingSurface.Changed += DrawingSurfaceOnChanged; Changed += OnChanged; } diff --git a/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs b/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs index ebc67d1..74aa76a 100644 --- a/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs +++ b/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs @@ -2,6 +2,8 @@ using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Numerics; +using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Backend.Core.Surfaces { diff --git a/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs b/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs index 378f8ca..24c51c5 100644 --- a/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs +++ b/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs @@ -2,6 +2,8 @@ using Drawie.Backend.Core.Numerics; using Drawie.Backend.Core.Shaders; using Drawie.Numerics; +using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Backend.Core.Surfaces.ImageData { @@ -13,13 +15,14 @@ namespace Drawie.Backend.Core.Surfaces.ImageData /// /// An image always has a non-zero dimensions. If there is a request to create a new image, either directly or via a surface, and either of the requested dimensions are zero, then will be returned. /// - public class Image : NativeObject, ICloneable, IPixelsMap + public class Image : NativeObject, ICloneable, IPixelsMap, ITexture { public override object Native => DrawingBackendApi.Current.ImageImplementation.GetNativeImage(ObjectPointer); public int Width => DrawingBackendApi.Current.ImageImplementation.GetWidth(ObjectPointer); public int Height => DrawingBackendApi.Current.ImageImplementation.GetHeight(ObjectPointer); + public ulong TextureId => DrawingBackendApi.Current.ImageImplementation.GetUniqueId(ObjectPointer); public ImageInfo Info => DrawingBackendApi.Current.ImageImplementation.GetImageInfo(ObjectPointer); @@ -100,5 +103,6 @@ public Shader ToRawShader() { return DrawingBackendApi.Current.ImageImplementation.ToShader(ObjectPointer, clamp, tileMode, fillMatrixValue); } + } } diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs index 1566cc0..84fae0e 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs @@ -203,6 +203,11 @@ public Shader ToRawShader(IntPtr objectPointer) return new Shader(shader.Handle); } + public uint GetUniqueId(IntPtr objectPointer) + { + return this[objectPointer].UniqueId; + } + public object GetNativeImage(IntPtr objectPointer) { return this[objectPointer]; diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index 920d252..3af370b 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -20,14 +20,14 @@ public class SkiaSurfaceImplementation : SkObjectImplementation, ISur private Dictionary framebufferInfos = new Dictionary(); internal GRContext? GrContext { get; set; } - private readonly IGraphicsDevice _graphicsDevice; + internal IGraphicsDevice GraphicsDevice { get; set; } + private readonly SurfaceOrigin defaultSurfaceOrigin; - public SkiaSurfaceImplementation(GRContext context, IGraphicsDevice graphicsDevice, SurfaceOrigin surfaceOrigin, + public SkiaSurfaceImplementation(GRContext context, SurfaceOrigin surfaceOrigin, SkiaPixmapImplementation pixmapImplementation, SkiaCanvasImplementation canvasImplementation, SkiaPaintImplementation paintImplementation) { - _graphicsDevice = graphicsDevice; _pixmapImplementation = pixmapImplementation; _canvasImplementation = canvasImplementation; _paintImplementation = paintImplementation; @@ -138,7 +138,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int return SKSurface.Create(info); } - var texture = _graphicsDevice.CreateTexture(new TextureDesc() + var texture = GraphicsDevice.CreateTexture(new TextureDesc() { Format = TextureFormat.RGBA8_Unorm, Width = info.Width, Height = info.Height }); @@ -180,7 +180,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int uint textureId = renderTexture switch { IWebGlTexture wgl => wgl.TextureId, - IOpenGlTexture ogl => ogl.TextureId, + IOpenGlTexture ogl => (uint)ogl.TextureId, _ => throw new ArgumentException("Unsupported texture type.") }; diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index d5af7d9..5900a86 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -7,6 +7,7 @@ using Drawie.Numerics; using Drawie.RenderApi; using Drawie.RenderApi.Abstraction; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.Skia.Exceptions; using Drawie.Skia.Implementations; using SkiaSharp; @@ -32,7 +33,7 @@ private set } } - public IGraphicsDevice GraphicsDevice { get; } + public IGraphicsDevice GraphicsDevice { get; private set; } public IPathEffectImplementation PathEffectImplementation { get; set; } public bool IsHardwareAccelerated => SkiaGraphicsContext != null; @@ -62,13 +63,11 @@ private set private GRContext _grContext; - public SkiaDrawingBackend(IGraphicsDevice renderApiGraphicsDevice) + public SkiaDrawingBackend() { SKColorSpace.CreateSrgb(); SKColorSpace.CreateSrgbLinear(); - GraphicsDevice = renderApiGraphicsDevice; - ColorImplementation = new SkiaColorImplementation(); SkiaImgDataImplementation dataImpl = new SkiaImgDataImplementation(); @@ -126,7 +125,7 @@ public SkiaDrawingBackend(IGraphicsDevice renderApiGraphicsDevice) SkiaCanvasImplementation canvasImpl = new SkiaCanvasImplementation(paintImpl, imgImpl, bitmapImpl, pathImpl, fontImpl, meshImplementation); - SurfaceImplementation = new SkiaSurfaceImplementation(SkiaGraphicsContext, GraphicsDevice, SurfaceOrigin.BottomLeft, pixmapImpl, canvasImpl, paintImpl); + SurfaceImplementation = new SkiaSurfaceImplementation(SkiaGraphicsContext, SurfaceOrigin.BottomLeft, pixmapImpl, canvasImpl, paintImpl); canvasImpl.SetSurfaceImplementation(SurfaceImplementation); imgImpl.SetSurfaceImplementation(SurfaceImplementation); @@ -144,6 +143,9 @@ public SkiaDrawingBackend(IGraphicsDevice renderApiGraphicsDevice) public void Setup(IRenderApi renderApi) { ActiveRenderApi = renderApi; + GraphicsDevice = renderApi.GraphicsDevice; + SurfaceImplementation.GraphicsDevice = renderApi.GraphicsDevice; + if (renderApi is IVulkanRenderApi vulkanRenderApi) { SetupVulkan(vulkanRenderApi.VulkanContext); diff --git a/src/Drawie.Backend.Vertie/Core/Mesh.cs b/src/Drawie.Backend.Vertie/Core/Mesh.cs index f1c0f51..4912193 100644 --- a/src/Drawie.Backend.Vertie/Core/Mesh.cs +++ b/src/Drawie.Backend.Vertie/Core/Mesh.cs @@ -1,3 +1,6 @@ +using System.Numerics; +using Assimp; +using Assimp.Configs; using Drawie.RenderApi.Abstraction; using Drawie.RenderApi.Abstraction.Buffers; @@ -6,14 +9,69 @@ namespace Drawie.Backend.Vertie.Core; public class Mesh { public Transform Transform { get; } = new Transform(); - public float[] Vertices { get; set; } - public uint[] Indicies { get; set; } - public int IndexCount { get; set; } - - public Mesh(float[] vertices, uint[] indicies, int indexCount) + public IReadOnlyList Vertices => vertices; + public IReadOnlyList Normals => normals; + public IReadOnlyList TexCoords => texCoords; + public IReadOnlyList Indicies => indicies; + public int IndexCount => Indicies.Count; + + internal bool BuffersInitialized { get; private set; } = false; + public IBufferGroup Buffers { get; private set; } + + private Vector3[] vertices; + private Vector3[] normals; + private Vector2[] texCoords; + private uint[] indicies; + + public Mesh(Vector3[] vertices, uint[] indicies, Vector3[] normals, Vector2[] texCoords) + { + this.vertices = vertices; + this.indicies = indicies; + this.normals = normals; + this.texCoords = texCoords; + } + + public Mesh(string path) + { + AssimpContext ctx = new AssimpContext(); + var scene = ctx.ImportFile(path, PostProcessPreset.TargetRealTimeMaximumQuality); + if (!scene.HasMeshes) return; + var mesh = scene.Meshes.FirstOrDefault(); + this.vertices = mesh!.Vertices.Select(x => new Vector3(x.X, x.Y, x.Z)).ToArray(); + this.indicies = mesh.GetUnsignedIndices().ToArray(); + this.normals = mesh.Normals.Select(x => new Vector3(x.X, x.Y, x.Z)).ToArray(); + this.texCoords = mesh.TextureCoordinateChannels[0].Select(x => new Vector2(x.X, x.Y)).ToArray(); + } + + internal void GenerateBuffers(IGraphicsDevice device) + { + Buffers = device.CreateBufferGroup(); + // TODO: Fragile api, CreateBuffer is assumed to be created in buffer Open func (vao is bound there) + Buffers.Open(list => + { + list.Buffers.AddRange( + device.CreateBuffer(BufferUsage.Vertex, CreateVertexData()), + device.CreateBuffer(BufferUsage.Index, indicies)); + } + ); + + BuffersInitialized = true; + } + + private float[] CreateVertexData() { - Vertices = vertices; - Indicies = indicies; - IndexCount = indexCount; + float[] vertData = new float[vertices.Length * 8]; + for (int i = 0; i < vertices.Length; i++) + { + vertData[i * 8 + 0] = vertices[i].X; + vertData[i * 8 + 1] = vertices[i].Y; + vertData[i * 8 + 2] = vertices[i].Z; + vertData[i * 8 + 3] = normals.ElementAtOrDefault(i).X; + vertData[i * 8 + 4] = normals.ElementAtOrDefault(i).Y; + vertData[i * 8 + 5] = normals.ElementAtOrDefault(i).Z; + vertData[i * 8 + 6] = texCoords.ElementAtOrDefault(i).X; + vertData[i * 8 + 7] = texCoords.ElementAtOrDefault(i).Y; + } + return vertData; } } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj index 227e588..380551a 100644 --- a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj +++ b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj @@ -13,6 +13,7 @@ + diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 45b92c1..fc31c4e 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -16,7 +16,6 @@ namespace Drawie.Backend.Vertie.Helpers; public static class TextureFramebufferExtensions { - private static Dictionary cachedMeshBuffers = new Dictionary(); private static Dictionary cachedSamplers = new Dictionary(); private static Dictionary cachedShaderPrograms = @@ -59,23 +58,28 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came cmdList.BeginRenderPass(sceneTarget); cmdList.SetPipeline(pipeline); - (IBuffer vertex, IBuffer index) buffers = InitializeBuffers(mesh, device); - cmdList.SetIndexBuffer(buffers.index); - cmdList.SetVertexBuffer(buffers.vertex); + if (!mesh.BuffersInitialized) + { + mesh.GenerateBuffers(device); + } + + cmdList.SetBuffers(mesh.Buffers); material.Use(camera); material.PrepareForObject(mesh.Transform); shader.UpdateUniforms(material.Properties.Values.ToList()); - foreach (var materialTexture in material.Textures) + for (var i = 0; i < material.Textures.Count; i++) { + var materialTexture = material.Textures[i]; var sampler = cachedSamplers.GetValueOrDefault(materialTexture); if (sampler == null) { sampler = device.CreateSampler(new SamplerDesc()); cachedSamplers[materialTexture] = sampler; } + cmdList.BindTexture(materialTexture, sampler); } @@ -104,19 +108,4 @@ private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsD return program; } - - private static (IBuffer vertex, IBuffer index) InitializeBuffers(Mesh mesh, IGraphicsDevice device) - { - if (cachedMeshBuffers.TryGetValue(mesh, out var buffers)) - { - return buffers; - } - - var vertex = device.CreateBuffer(BufferUsage.Vertex, mesh.Vertices); - var index = device.CreateBuffer(BufferUsage.Index, mesh.Indicies); - - cachedMeshBuffers[mesh] = (vertex, index); - - return (vertex, index); - } } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/Material.cs b/src/Drawie.Backend.Vertie/Rendering/Material.cs index 6b701fa..550567f 100644 --- a/src/Drawie.Backend.Vertie/Rendering/Material.cs +++ b/src/Drawie.Backend.Vertie/Rendering/Material.cs @@ -2,6 +2,7 @@ using Drawie.Backend.Vertie.Core; using Drawie.RenderApi; using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Backend.Vertie.Rendering; diff --git a/src/Drawie.Interop.Avalonia.Core/RenderApiResources.cs b/src/Drawie.Interop.Avalonia.Core/RenderApiResources.cs index 5730cfb..90d3410 100644 --- a/src/Drawie.Interop.Avalonia.Core/RenderApiResources.cs +++ b/src/Drawie.Interop.Avalonia.Core/RenderApiResources.cs @@ -1,6 +1,7 @@ using Avalonia; using Avalonia.Rendering.Composition; using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Interop.Avalonia.Core; diff --git a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlRenderApiResources.cs b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlRenderApiResources.cs index f5c6548..63add87 100644 --- a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlRenderApiResources.cs +++ b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlRenderApiResources.cs @@ -4,6 +4,7 @@ using Drawie.Backend.Core.Bridge; using Drawie.Interop.Avalonia.Core; using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.OpenGL; using Silk.NET.OpenGL; diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanResources.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanResources.cs index a8f5aad..b6c0ea6 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanResources.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanResources.cs @@ -2,6 +2,7 @@ using Avalonia.Rendering.Composition; using Drawie.Interop.Avalonia.Core; using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Interop.Avalonia.Vulkan.Vk; diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs b/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs index 6282544..ccdc94f 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs @@ -5,7 +5,7 @@ namespace Drawie.RenderApi.OpenGL; -public class OpenGlBuffer : IBuffer where TData : unmanaged +public class OpenGlBuffer : IBuffer where TData : unmanaged { public int Handle { get; } public uint NativeHandle => openglHandle; @@ -15,11 +15,13 @@ public class OpenGlBuffer : IBuffer where TData : unmanaged private uint openglHandle; private GL api; + public OpenGlBuffer(GL api, int handle, BufferUsage usage, TData[]? data = null) { Handle = handle; Usage = usage; this.api = api; + openglHandle = api.GenBuffer(); if (data != null) { @@ -34,7 +36,13 @@ public OpenGlBuffer(GL api, int handle, BufferUsage usage, TData[]? data = null) } } } - + + if (usage == BufferUsage.Vertex) + { + VertexAttributePointer(0, 3, VertexAttribPointerType.Float, 8, 0); + VertexAttributePointer(1, 3, VertexAttribPointerType.Float, 8, 3); + VertexAttributePointer(2, 2, VertexAttribPointerType.Float, 8, 6); + } } public void Dispose() @@ -46,4 +54,12 @@ private BufferTargetARB ToBufferType() { return Usage.ToOpenGlTargetARB(); } + + private unsafe void VertexAttributePointer(uint index, int count, VertexAttribPointerType type, uint vertexSize, + int offset) + { + int vTypeSize = sizeof(float); + api.VertexAttribPointer(index, count, type, false, vertexSize * (uint) vTypeSize, (void*) (offset * vTypeSize)); + api.EnableVertexAttribArray(index); + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlBufferList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlBufferList.cs new file mode 100644 index 0000000..f5c3883 --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlBufferList.cs @@ -0,0 +1,8 @@ +using Drawie.RenderApi.Abstraction.Buffers; + +namespace Drawie.RenderApi.OpenGL; + +public class OpenGlBufferList : IBufferGroupList +{ + public List Buffers { get; } = new List(); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index 787d104..d2523c3 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -15,14 +15,14 @@ public class OpenGlCommandList(GL api) : ICommandList private List instructions = new List(); private IRenderTarget source; - private IBuffer? vertexBuffer; - private IBuffer? indexBuffer; - private uint vao; private uint originalFb; + private int lastBoundTextureSlot = 0; + public void BeginRenderPass(IRenderTarget fb) { source = fb; + lastBoundTextureSlot = 0; instructions?.Clear(); RecordInstruction(() => { @@ -33,35 +33,29 @@ public void BeginRenderPass(IRenderTarget fb) public void SetPipeline(IPipeline pipeline) { - RecordInstruction(() => pipeline.Apply()); + RecordInstruction(pipeline.Apply); } - public void SetVertexBuffer(IBuffer vertexBuffer) + public void SetBuffers(IBufferGroup bufferGroup) { - this.vertexBuffer = vertexBuffer; - Api.BindBuffer(vertexBuffer.Usage.ToOpenGlTargetARB(), vertexBuffer.NativeHandle); - HandleVao(); - RecordInstruction(() => Api.BindVertexArray(vao)); - } - - public void SetIndexBuffer(IBuffer indexBuffer) - { - this.indexBuffer = indexBuffer; - Api.BindBuffer(indexBuffer.Usage.ToOpenGlTargetARB(), indexBuffer.NativeHandle); + RecordInstruction(() => { Api.BindVertexArray(bufferGroup.Handle); }); } public void BindTexture(ITexture texture, ISampler sampler) { - if (texture is not IOpenGlTexture openGlTexture) throw new ArgumentException("Cannot bind non opengl textures"); if (sampler is not OpenGlSampler openGlSampler) throw new ArgumentException("Cannot bind non opengl samplers"); - Api.ActiveTexture(TextureUnit.Texture0); - Api.BindTexture(TextureTarget.Texture2D, openGlTexture.TextureId); - //Api.BindSampler(0, openGlSampler.SamplerId); + Api.ActiveTexture(TextureUnit.Texture0 + lastBoundTextureSlot); + Api.BindTexture(TextureTarget.Texture2D, (uint)texture.TextureId); + Api.BindSampler((uint)lastBoundTextureSlot, openGlSampler.SamplerId); + lastBoundTextureSlot++; } - public void DrawIndexed(int indexCount) + public unsafe void DrawIndexed(int indexCount) { - RecordInstruction(() => Api.DrawArrays(PrimitiveType.Triangles, 0, 36)); + RecordInstruction(() => + { + Api.DrawElements(PrimitiveType.Triangles, (uint)indexCount, DrawElementsType.UnsignedInt, (void*)0); + }); } public RecordedRenderPass EndRenderPass(IRenderTarget blitTo) @@ -90,35 +84,4 @@ private void RecordInstruction(Action instruction) { instructions.Add(instruction); } - - private unsafe void HandleVao() - { - if (vertexBuffer == null || indexBuffer == null) - return; - - if (vao == 0) - { - vao = Api.GenVertexArray(); - } - - Api.BindVertexArray(vao); - Api.BindBuffer( - vertexBuffer.Usage.ToOpenGlTargetARB(), - vertexBuffer.NativeHandle); - - Api.BindBuffer(indexBuffer.Usage.ToOpenGlTargetARB(), - indexBuffer?.NativeHandle ?? 0); - - VertexAttributePointer(0, 3, VertexAttribPointerType.Float, 8, 0); - VertexAttributePointer(1, 3, VertexAttribPointerType.Float, 8, 3); - VertexAttributePointer(2, 2, VertexAttribPointerType.Float, 8, 6); - } - - private unsafe void VertexAttributePointer(uint index, int count, VertexAttribPointerType type, uint vertexSize, - int offset) - { - int vTypeSize = sizeof(float); - Api.VertexAttribPointer(index, count, type, false, vertexSize * (uint) vTypeSize, (void*) (offset * vTypeSize)); - Api.EnableVertexAttribArray(index); - } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index c09bce9..c9b5266 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -14,19 +14,17 @@ namespace Drawie.RenderApi.OpenGL; public class OpenGlDevice : IGraphicsDevice { - public static GL DEBUG_API; private int handleCounter = 0; public GL Api { get; } public OpenGlDevice(GL api) { Api = api; - DEBUG_API = api; } public Dictionary ManagedObjects { get; } = new Dictionary(); - public IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged + public IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged { return new OpenGlBuffer(Api, GetNextHandle(), usage, data); } @@ -119,6 +117,11 @@ public IRenderTarget CreateRenderTarget(TextureDesc textureDesc) return new OpenGlRenderTarget(Api, textureDesc.Width, textureDesc.Height, textureDesc.Depth); } + public IBufferGroup CreateBufferGroup() + { + return new OpenGlVertexArrayObject(Api); + } + private Silk.NET.OpenGL.ShaderType ToOpenGlShaderType(ShaderType shaderType) { diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs index dabe115..42ca087 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs @@ -1,3 +1,4 @@ +using Drawie.RenderApi.Abstraction.Textures; using Silk.NET.Core.Contexts; using Silk.NET.OpenGL; @@ -7,7 +8,7 @@ public class OpenGlGraphicsContext(GL api, IGLContext glContext) : IGraphicsCont { public readonly IGLContext GlContext = glContext; public readonly GL Api = api; - private HashSet ownedTextures = new HashSet(); + private HashSet ownedTextures = new HashSet(); public bool OwnsTexture(ITexture nativeTexture) { diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs index c64ae0b..3c0fadb 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs @@ -45,6 +45,7 @@ public void Apply() Api.Disable(EnableCap.CullFace); Api.ClearColor(0, 0, 0, 1); Api.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit); + //Api.PolygonMode(TriangleFace.FrontAndBack, PolygonMode.Line); Description.ShaderProgram?.Use(); } diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs index b42a9ff..4125f3a 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs @@ -47,7 +47,7 @@ public OpenGlRenderTarget( FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, TextureTarget.Texture2D, - Color.TextureId, + (uint)Color.TextureId, 0); if (Depth != null) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs index 6e6db81..d38a2da 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs @@ -4,7 +4,7 @@ namespace Drawie.RenderApi.OpenGL; public class OpenGlTexture : IOpenGlTexture, IDisposable { - public uint TextureId { get; } + public ulong TextureId { get; } public int Width { get; } public int Height { get; } @@ -97,7 +97,7 @@ public void Bind() { Api.BindTexture( TextureTarget.Texture2D, - TextureId); + (uint)TextureId); } public void Activate(int textureUnit) @@ -108,6 +108,6 @@ public void Activate(int textureUnit) public void Dispose() { - Api.DeleteTexture(TextureId); + Api.DeleteTexture((uint)TextureId); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlVertexArrayObject.cs b/src/Drawie.RenderApi.OpenGl/OpenGlVertexArrayObject.cs new file mode 100644 index 0000000..8dc2b3b --- /dev/null +++ b/src/Drawie.RenderApi.OpenGl/OpenGlVertexArrayObject.cs @@ -0,0 +1,27 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; + +public class OpenGlVertexArrayObject : IBufferGroup +{ + public uint Handle { get; } + + public GL Api { get; } + + private OpenGlBufferList bufferList; + + public OpenGlVertexArrayObject(GL api) + { + Api = api; + Handle = Api.GenVertexArray(); + bufferList = new OpenGlBufferList(); + } + + public void Open(Action list) + { + Api.BindVertexArray(Handle); + list(bufferList); + Api.BindVertexArray(0); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs b/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs index b1b7170..ac202f4 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs @@ -1,4 +1,5 @@ using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Textures; using Silk.NET.Core.Contexts; using Silk.NET.OpenGL; diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index 0430c96..3ae9d93 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -28,6 +28,7 @@ public class VulkanTexture : IDisposable, IVkTexture public uint TargetSharingMode { get; } = (uint)SharingMode.Exclusive; public static uint ColorAttachmentOptimal => (uint)ImageLayout.ColorAttachmentOptimal; public static uint ShaderReadOnlyOptimal => (uint)ImageLayout.ShaderReadOnlyOptimal; + public ulong TextureId => ImageHandle; private Image textureImage; private DeviceMemory textureImageMemory; @@ -267,4 +268,5 @@ public void TransitionLayoutTo(CommandBuffer buffer, ImageLayout from, ImageLayo { TransitionImageLayout(textureImage, from, to, buffer); } + } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs index 55ac9e0..3b9d961 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs @@ -1,6 +1,7 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.Vulkan.Buffers; using Drawie.RenderApi.Vulkan.Exceptions; using Drawie.RenderApi.Vulkan.Helpers; diff --git a/src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs b/src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs index daca214..1fa120e 100644 --- a/src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs +++ b/src/Drawie.RenderApi.Web.Common/HtmlCanvas.cs @@ -4,5 +4,6 @@ namespace Drawie.RenderApi.Web.Common; public class HtmlCanvas() : HtmlObject("canvas"), ICanvasTexture { - public string CanvasId => Id; + public string CanvasId => Id; + public ulong TextureId { get; } = ulong.MaxValue; } diff --git a/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs b/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs index a42de23..a75604b 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs @@ -1,4 +1,5 @@ using Drawie.JSInterop; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.WebGl.Enums; namespace Drawie.RenderApi.WebGl; diff --git a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs b/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs index a82bf96..5f4d4c3 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs @@ -1,5 +1,6 @@ using Drawie.JSInterop; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.Web.Common; using Drawie.RenderApi.WebGl.Enums; using Drawie.RenderApi.WebGl.Exceptions; diff --git a/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs b/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs index 8ca6f43..465ffcf 100644 --- a/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs +++ b/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs @@ -5,5 +5,5 @@ public enum BufferUsage Vertex, Index, Uniform, - Storage + Storage, } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs b/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs index 22fe92a..9b9fb6d 100644 --- a/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs +++ b/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs @@ -3,4 +3,9 @@ namespace Drawie.RenderApi.Abstraction.Buffers; public interface IBuffer : INativeObject { public BufferUsage Usage { get; } +} + +public interface IBuffer : IBuffer where T : unmanaged +{ + public uint Size { get; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Buffers/IBufferGroup.cs b/src/Drawie.RenderApi/Abstraction/Buffers/IBufferGroup.cs new file mode 100644 index 0000000..7099fa3 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Buffers/IBufferGroup.cs @@ -0,0 +1,7 @@ +namespace Drawie.RenderApi.Abstraction.Buffers; + +public interface IBufferGroup +{ + public uint Handle { get; } + void Open(Action list); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Buffers/IBufferGroupList.cs b/src/Drawie.RenderApi/Abstraction/Buffers/IBufferGroupList.cs new file mode 100644 index 0000000..44d09c2 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Buffers/IBufferGroupList.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.Abstraction.Buffers; + +public interface IBufferGroupList +{ + public List Buffers { get; } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs index 4e2130a..aa7207a 100644 --- a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs @@ -9,8 +9,7 @@ public interface ICommandList { void BeginRenderPass(IRenderTarget fb); void SetPipeline(IPipeline pipeline); - void SetVertexBuffer(IBuffer vertexBuffer); - void SetIndexBuffer(IBuffer indexBuffer); + void SetBuffers(IBufferGroup bufferGroup); void BindTexture(ITexture texture, ISampler sampler); void DrawIndexed(int indexCount); RecordedRenderPass EndRenderPass(IRenderTarget blitTo); diff --git a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs index bb2151d..7a1ba31 100644 --- a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs +++ b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs @@ -9,7 +9,7 @@ namespace Drawie.RenderApi.Abstraction; public interface IGraphicsDevice { - IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged; + IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged; ITexture CreateTexture(TextureDesc desc); IPipeline CreatePipeline(PipelineDesc desc); ICommandList CreateCommandList(); @@ -17,10 +17,8 @@ public interface IGraphicsDevice Dictionary ManagedObjects { get; } ISampler CreateSampler(SamplerDesc desc); - /* - IShader CreateShader(ShaderDesc desc); - */ void Submit(RecordedRenderPass cmdList); IShaderProgram CreateShaderProgram(ShaderProgramDesc shaderProgramDesc); IRenderTarget CreateRenderTarget(TextureDesc textureDesc); + IBufferGroup CreateBufferGroup(); } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Textures/ITexture.cs b/src/Drawie.RenderApi/Abstraction/Textures/ITexture.cs index 3637c88..249db5e 100644 --- a/src/Drawie.RenderApi/Abstraction/Textures/ITexture.cs +++ b/src/Drawie.RenderApi/Abstraction/Textures/ITexture.cs @@ -1,5 +1,6 @@ -namespace Drawie.RenderApi; +namespace Drawie.RenderApi.Abstraction.Textures; public interface ITexture { + public ulong TextureId { get; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/ICanvasTexture.cs b/src/Drawie.RenderApi/ICanvasTexture.cs index 0301a00..9282889 100644 --- a/src/Drawie.RenderApi/ICanvasTexture.cs +++ b/src/Drawie.RenderApi/ICanvasTexture.cs @@ -1,4 +1,6 @@ -namespace Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; + +namespace Drawie.RenderApi; public interface ICanvasTexture : ITexture { diff --git a/src/Drawie.RenderApi/IGraphicsContext.cs b/src/Drawie.RenderApi/IGraphicsContext.cs index 8a45ad6..4163e7f 100644 --- a/src/Drawie.RenderApi/IGraphicsContext.cs +++ b/src/Drawie.RenderApi/IGraphicsContext.cs @@ -1,3 +1,5 @@ +using Drawie.RenderApi.Abstraction.Textures; + namespace Drawie.RenderApi; public interface IGraphicsContext diff --git a/src/Drawie.RenderApi/IOpenGlTexture.cs b/src/Drawie.RenderApi/IOpenGlTexture.cs index eea4d83..4360c5f 100644 --- a/src/Drawie.RenderApi/IOpenGlTexture.cs +++ b/src/Drawie.RenderApi/IOpenGlTexture.cs @@ -1,6 +1,7 @@ -namespace Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; + +namespace Drawie.RenderApi; public interface IOpenGlTexture : ITexture { - public uint TextureId { get; } } diff --git a/src/Drawie.RenderApi/IVkTexture.cs b/src/Drawie.RenderApi/IVkTexture.cs index e41c7c9..f47af74 100644 --- a/src/Drawie.RenderApi/IVkTexture.cs +++ b/src/Drawie.RenderApi/IVkTexture.cs @@ -1,3 +1,5 @@ +using Drawie.RenderApi.Abstraction.Textures; + namespace Drawie.RenderApi; public interface IVkTexture : ITexture diff --git a/src/Drawie.RenderApi/IWebGlTexture.cs b/src/Drawie.RenderApi/IWebGlTexture.cs index 0ad1c1b..53284be 100644 --- a/src/Drawie.RenderApi/IWebGlTexture.cs +++ b/src/Drawie.RenderApi/IWebGlTexture.cs @@ -1,4 +1,6 @@ -namespace Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; + +namespace Drawie.RenderApi; public interface IWebGlTexture : ITexture { diff --git a/src/Drawie.RenderApi/IWindowRenderApi.cs b/src/Drawie.RenderApi/IWindowRenderApi.cs index f0c32cf..51bb959 100644 --- a/src/Drawie.RenderApi/IWindowRenderApi.cs +++ b/src/Drawie.RenderApi/IWindowRenderApi.cs @@ -1,4 +1,5 @@ using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.RenderApi; diff --git a/src/Drawie.Rendering/IGraphicsStore.cs b/src/Drawie.Rendering/IGraphicsStore.cs index 652f59d..c7052d7 100644 --- a/src/Drawie.Rendering/IGraphicsStore.cs +++ b/src/Drawie.Rendering/IGraphicsStore.cs @@ -3,6 +3,7 @@ using Drawie.Backend.Core.Bridge; using Drawie.Numerics; using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Rendering; diff --git a/src/Drawie.Windowing.Glfw/GlfwWindow.cs b/src/Drawie.Windowing.Glfw/GlfwWindow.cs index 1116738..2fb56ef 100644 --- a/src/Drawie.Windowing.Glfw/GlfwWindow.cs +++ b/src/Drawie.Windowing.Glfw/GlfwWindow.cs @@ -2,6 +2,7 @@ using Drawie.Backend.Core.Bridge; using Drawie.Numerics; using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.Rendering; using Drawie.Silk.Extensions; using Drawie.Silk.Input; @@ -94,11 +95,10 @@ public GlfwWindow(string name, VecI size, IWindowRenderApi renderApi) public void Initialize() { if (initialized) return; - + window.Initialize(); - InitInput(); - + if (RenderApi is IVulkanWindowRenderApi) { if (window.VkSurface == null) @@ -120,6 +120,7 @@ public void Initialize() store = new GraphicsStore(RenderApi.GraphicsContext); + foreach (var layer in layers) { layer.Initialize(this); @@ -159,7 +160,7 @@ public void Show() { Initialize(); } - + window.FramebufferResize += WindowOnFramebufferResize; RenderApi.FramebufferResized += RenderApiOnFramebufferResized; diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index e0892c1..097585b 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -1,6 +1,7 @@  ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -42,10 +43,13 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -81,6 +85,7 @@ + True diff --git a/src/Drawie2Sample/Images/silkBoxed.png b/src/Drawie2Sample/Assets/silkBoxed.png similarity index 100% rename from src/Drawie2Sample/Images/silkBoxed.png rename to src/Drawie2Sample/Assets/silkBoxed.png diff --git a/src/Drawie2Sample/Images/silkSpecular.png b/src/Drawie2Sample/Assets/silkSpecular.png similarity index 100% rename from src/Drawie2Sample/Images/silkSpecular.png rename to src/Drawie2Sample/Assets/silkSpecular.png diff --git a/src/Drawie2Sample/Assets/teapot.obj b/src/Drawie2Sample/Assets/teapot.obj new file mode 100644 index 0000000..cedb196 --- /dev/null +++ b/src/Drawie2Sample/Assets/teapot.obj @@ -0,0 +1,4663 @@ +# Blender v2.61 (sub 0) OBJ File: '' +# www.blender.org +v 0.605903 0.005903 -0.000000 +v 0.000000 0.000000 0.000000 +v 0.584584 0.005902 -0.162696 +v 0.524218 0.005902 -0.307888 +v 0.430191 0.005901 -0.430191 +v 0.307888 0.005901 -0.524218 +v 0.162696 0.005901 -0.584584 +v 0.000000 0.005901 -0.605903 +v -0.162696 0.005901 -0.584584 +v -0.307888 0.005901 -0.524218 +v -0.430191 0.005901 -0.430191 +v -0.524218 0.005902 -0.307888 +v -0.584584 0.005902 -0.162696 +v -0.605903 0.005903 -0.000000 +v -0.584584 0.005904 0.162696 +v -0.524218 0.005904 0.307888 +v -0.430191 0.005905 0.430191 +v -0.307888 0.005905 0.524218 +v -0.162696 0.005905 0.584584 +v 0.000000 0.005905 0.605903 +v 0.162696 0.005905 0.584584 +v 0.307888 0.005905 0.524218 +v 0.430191 0.005905 0.430191 +v 0.524218 0.005904 0.307888 +v 0.584584 0.005904 0.162696 +v 1.400000 2.400000 -0.000008 +v 1.350740 2.400000 0.375917 +v 1.332760 2.454690 0.370913 +v 1.381370 2.454690 -0.000009 +v 1.384260 2.487500 -0.000009 +v 1.335550 2.487500 0.371690 +v 1.403120 2.498440 -0.000009 +v 1.353760 2.498440 0.376756 +v 1.382010 2.487500 0.384619 +v 1.432410 2.487500 -0.000009 +v 1.414950 2.454690 0.393787 +v 1.466550 2.454690 -0.000009 +v 1.447220 2.400000 0.402769 +v 1.500000 2.400000 -0.000008 +v 1.211260 2.400000 0.711398 +v 1.195140 2.454690 0.701929 +v 1.197640 2.487500 0.703400 +v 1.213960 2.498440 0.712986 +v 1.239300 2.487500 0.727866 +v 1.268840 2.454690 0.745216 +v 1.297780 2.400000 0.762213 +v 0.994000 2.400000 0.993991 +v 0.980770 2.454690 0.980761 +v 0.982824 2.487500 0.982815 +v 0.996219 2.498440 0.996210 +v 1.017010 2.487500 1.017000 +v 1.041250 2.454690 1.041240 +v 1.065000 2.400000 1.064990 +v 0.711407 2.400000 1.211250 +v 0.701938 2.454690 1.195130 +v 0.703409 2.487500 1.197630 +v 0.712995 2.498440 1.213950 +v 0.727875 2.487500 1.239290 +v 0.745225 2.454690 1.268830 +v 0.762222 2.400000 1.297770 +v 0.375926 2.400010 1.350730 +v 0.370922 2.454690 1.332750 +v 0.371699 2.487500 1.335540 +v 0.376765 2.498450 1.353750 +v 0.384628 2.487500 1.382000 +v 0.393796 2.454700 1.414940 +v 0.402778 2.400010 1.447210 +v 0.000000 2.400010 1.399990 +v 0.000000 2.454690 1.381360 +v 0.000000 2.487500 1.384250 +v 0.000000 2.498450 1.403110 +v 0.000000 2.487510 1.432400 +v 0.000000 2.454700 1.466540 +v 0.000000 2.400010 1.499990 +v -0.375926 2.400010 1.350730 +v -0.370922 2.454690 1.332750 +v -0.371699 2.487500 1.335540 +v -0.376765 2.498450 1.353750 +v -0.384628 2.487500 1.382000 +v -0.393796 2.454700 1.414940 +v -0.402778 2.400010 1.447210 +v -0.711407 2.400000 1.211250 +v -0.701938 2.454690 1.195130 +v -0.703409 2.487500 1.197630 +v -0.712995 2.498440 1.213950 +v -0.727875 2.487500 1.239290 +v -0.745225 2.454690 1.268830 +v -0.762222 2.400000 1.297770 +v -0.994000 2.400000 0.993991 +v -0.980770 2.454690 0.980761 +v -0.982824 2.487500 0.982815 +v -0.996219 2.498440 0.996210 +v -1.017010 2.487500 1.017000 +v -1.041250 2.454690 1.041240 +v -1.065000 2.400000 1.064990 +v -1.211260 2.400000 0.711398 +v -1.195140 2.454690 0.701929 +v -1.197640 2.487500 0.703400 +v -1.213960 2.498440 0.712986 +v -1.239300 2.487500 0.727866 +v -1.268840 2.454690 0.745216 +v -1.297780 2.400000 0.762213 +v -1.350740 2.400000 0.375917 +v -1.332760 2.454690 0.370913 +v -1.335550 2.487500 0.371690 +v -1.353760 2.498440 0.376756 +v -1.382010 2.487500 0.384619 +v -1.414950 2.454690 0.393787 +v -1.447220 2.400000 0.402769 +v -1.400000 2.400000 -0.000008 +v -1.381370 2.454690 -0.000009 +v -1.384260 2.487500 -0.000009 +v -1.403120 2.498440 -0.000009 +v -1.432410 2.487500 -0.000009 +v -1.466550 2.454690 -0.000009 +v -1.500000 2.400000 -0.000008 +v -1.350740 2.400000 -0.375935 +v -1.332760 2.454690 -0.370931 +v -1.335550 2.487500 -0.371708 +v -1.353760 2.498440 -0.376774 +v -1.382010 2.487500 -0.384637 +v -1.414950 2.454690 -0.393805 +v -1.447220 2.400000 -0.402787 +v -1.211260 2.400000 -0.711416 +v -1.195140 2.454690 -0.701947 +v -1.197640 2.487500 -0.703418 +v -1.213960 2.498440 -0.713004 +v -1.239300 2.487500 -0.727884 +v -1.268840 2.454690 -0.745234 +v -1.297780 2.400000 -0.762231 +v -0.994000 2.400000 -0.994009 +v -0.980770 2.454690 -0.980779 +v -0.982824 2.487500 -0.982833 +v -0.996219 2.498440 -0.996228 +v -1.017010 2.487500 -1.017020 +v -1.041250 2.454690 -1.041260 +v -1.065000 2.400000 -1.065010 +v -0.711407 2.400000 -1.211270 +v -0.701938 2.454690 -1.195150 +v -0.703409 2.487500 -1.197650 +v -0.712995 2.498440 -1.213970 +v -0.727875 2.487500 -1.239310 +v -0.745225 2.454690 -1.268850 +v -0.762222 2.400000 -1.297790 +v -0.375926 2.400000 -1.350750 +v -0.370922 2.454680 -1.332770 +v -0.371699 2.487490 -1.335560 +v -0.376765 2.498440 -1.353770 +v -0.384628 2.487490 -1.382020 +v -0.393796 2.454680 -1.414960 +v -0.402778 2.399990 -1.447230 +v 0.000000 2.399990 -1.400010 +v 0.000000 2.454680 -1.381380 +v 0.000000 2.487490 -1.384270 +v 0.000000 2.498430 -1.403130 +v 0.000000 2.487490 -1.432420 +v 0.000000 2.454680 -1.466560 +v 0.000000 2.399990 -1.500010 +v 0.375926 2.400000 -1.350750 +v 0.370922 2.454680 -1.332770 +v 0.371699 2.487490 -1.335560 +v 0.376765 2.498440 -1.353770 +v 0.384628 2.487490 -1.382020 +v 0.393796 2.454680 -1.414960 +v 0.402778 2.399990 -1.447230 +v 0.711407 2.400000 -1.211270 +v 0.701938 2.454690 -1.195150 +v 0.703409 2.487500 -1.197650 +v 0.712995 2.498440 -1.213970 +v 0.727875 2.487500 -1.239310 +v 0.745225 2.454690 -1.268850 +v 0.762222 2.400000 -1.297790 +v 0.994000 2.400000 -0.994009 +v 0.980770 2.454690 -0.980779 +v 0.982824 2.487500 -0.982833 +v 0.996219 2.498440 -0.996228 +v 1.017010 2.487500 -1.017020 +v 1.041250 2.454690 -1.041260 +v 1.065000 2.400000 -1.065010 +v 1.211260 2.400000 -0.711416 +v 1.195140 2.454690 -0.701947 +v 1.197640 2.487500 -0.703418 +v 1.213960 2.498440 -0.713004 +v 1.239300 2.487500 -0.727884 +v 1.268840 2.454690 -0.745234 +v 1.297780 2.400000 -0.762231 +v 1.350740 2.400000 -0.375935 +v 1.332760 2.454690 -0.370931 +v 1.335550 2.487500 -0.371708 +v 1.353760 2.498440 -0.376774 +v 1.382010 2.487500 -0.384637 +v 1.414950 2.454690 -0.393805 +v 1.447220 2.400000 -0.402787 +v 1.566710 2.137850 0.436024 +v 1.623840 2.137850 -0.000008 +v 1.679490 1.877780 0.467414 +v 1.740740 1.877780 -0.000007 +v 1.778880 1.621880 0.495075 +v 1.843750 1.621870 -0.000006 +v 1.858160 1.372220 0.517142 +v 1.925930 1.372220 -0.000005 +v 1.910650 1.130900 0.531750 +v 1.980320 1.130900 -0.000004 +v 1.929630 0.900002 0.537034 +v 2.000000 0.900000 -0.000003 +v 1.404920 2.137850 0.825145 +v 1.506060 1.877780 0.884547 +v 1.595190 1.621880 0.936892 +v 1.666280 1.372220 0.978651 +v 1.713350 1.130900 1.006300 +v 1.730370 0.900004 1.016300 +v 1.152930 2.137850 1.152920 +v 1.235930 1.877780 1.235920 +v 1.309060 1.621870 1.309050 +v 1.367410 1.372230 1.367400 +v 1.406030 1.130910 1.406030 +v 1.420000 0.900005 1.420000 +v 0.825153 2.137860 1.404910 +v 0.884554 1.877790 1.506050 +v 0.936898 1.621890 1.595180 +v 0.978656 1.372230 1.666270 +v 1.006300 1.130910 1.713350 +v 1.016300 0.900006 1.730370 +v 0.436032 2.137860 1.566700 +v 0.467421 1.877790 1.679480 +v 0.495081 1.621880 1.778870 +v 0.517147 1.372230 1.858150 +v 0.531754 1.130910 1.910650 +v 0.537037 0.900007 1.929630 +v 0.000000 2.137860 1.623830 +v 0.000000 1.877790 1.740730 +v 0.000000 1.621880 1.843740 +v 0.000000 1.372230 1.925920 +v 0.000000 1.130910 1.980320 +v 0.000000 0.900007 2.000000 +v -0.436032 2.137860 1.566700 +v -0.467421 1.877790 1.679480 +v -0.495081 1.621890 1.778870 +v -0.517147 1.372230 1.858150 +v -0.531754 1.130910 1.910650 +v -0.537037 0.900007 1.929630 +v -0.825153 2.137860 1.404910 +v -0.884554 1.877790 1.506050 +v -0.936898 1.621890 1.595180 +v -0.978656 1.372230 1.666270 +v -1.006300 1.130910 1.713350 +v -1.016300 0.900006 1.730370 +v -1.152930 2.137850 1.152920 +v -1.235930 1.877780 1.235920 +v -1.309060 1.621870 1.309050 +v -1.367410 1.372230 1.367400 +v -1.406030 1.130910 1.406030 +v -1.420000 0.900005 1.420000 +v -1.404920 2.137850 0.825145 +v -1.506060 1.877780 0.884547 +v -1.595190 1.621880 0.936892 +v -1.666280 1.372220 0.978651 +v -1.713350 1.130900 1.006300 +v -1.730370 0.900004 1.016300 +v -1.566710 2.137850 0.436024 +v -1.679490 1.877780 0.467414 +v -1.778880 1.621870 0.495075 +v -1.858160 1.372220 0.517142 +v -1.910650 1.130900 0.531750 +v -1.929630 0.900002 0.537034 +v -1.623840 2.137850 -0.000008 +v -1.740740 1.877780 -0.000007 +v -1.843750 1.621870 -0.000006 +v -1.925930 1.372220 -0.000005 +v -1.980320 1.130900 -0.000004 +v -2.000000 0.900000 -0.000003 +v -1.566710 2.137850 -0.436040 +v -1.679490 1.877780 -0.467428 +v -1.778880 1.621880 -0.495087 +v -1.858160 1.372220 -0.517152 +v -1.910650 1.130900 -0.531758 +v -1.929630 0.899998 -0.537040 +v -1.404920 2.137850 -0.825161 +v -1.506060 1.877780 -0.884561 +v -1.595190 1.621880 -0.936904 +v -1.666280 1.372220 -0.978661 +v -1.713350 1.130900 -1.006300 +v -1.730370 0.899996 -1.016300 +v -1.152930 2.137850 -1.152940 +v -1.235930 1.877780 -1.235940 +v -1.309060 1.621870 -1.309070 +v -1.367410 1.372220 -1.367420 +v -1.406030 1.130890 -1.406030 +v -1.420000 0.899995 -1.420000 +v -0.825153 2.137840 -1.404930 +v -0.884554 1.877770 -1.506070 +v -0.936898 1.621870 -1.595200 +v -0.978656 1.372210 -1.666290 +v -1.006300 1.130890 -1.713350 +v -1.016300 0.899994 -1.730370 +v -0.436032 2.137840 -1.566720 +v -0.467421 1.877770 -1.679500 +v -0.495081 1.621860 -1.778890 +v -0.517147 1.372210 -1.858170 +v -0.531754 1.130890 -1.910650 +v -0.537037 0.899993 -1.929630 +v 0.000000 2.137840 -1.623850 +v 0.000000 1.877770 -1.740750 +v 0.000000 1.621860 -1.843760 +v 0.000000 1.372210 -1.925940 +v 0.000000 1.130890 -1.980320 +v 0.000000 0.899993 -2.000000 +v 0.436032 2.137840 -1.566720 +v 0.467421 1.877770 -1.679500 +v 0.495081 1.621870 -1.778890 +v 0.517147 1.372210 -1.858170 +v 0.531754 1.130890 -1.910650 +v 0.537037 0.899993 -1.929630 +v 0.825153 2.137840 -1.404930 +v 0.884554 1.877770 -1.506070 +v 0.936898 1.621870 -1.595200 +v 0.978656 1.372210 -1.666290 +v 1.006300 1.130890 -1.713350 +v 1.016300 0.899994 -1.730370 +v 1.152930 2.137850 -1.152940 +v 1.235930 1.877780 -1.235940 +v 1.309060 1.621870 -1.309070 +v 1.367410 1.372220 -1.367420 +v 1.406030 1.130890 -1.406030 +v 1.420000 0.899995 -1.420000 +v 1.404920 2.137850 -0.825161 +v 1.506060 1.877780 -0.884561 +v 1.595190 1.621880 -0.936904 +v 1.666280 1.372220 -0.978661 +v 1.713350 1.130900 -1.006300 +v 1.730370 0.899996 -1.016300 +v 1.566710 2.137850 -0.436040 +v 1.679490 1.877780 -0.467428 +v 1.778880 1.621870 -0.495087 +v 1.858160 1.372220 -0.517152 +v 1.910650 1.130900 -0.531758 +v 1.929630 0.899998 -0.537040 +v 1.893900 0.693405 0.527089 +v 1.962960 0.693403 -0.000002 +v 1.804560 0.522224 0.502227 +v 1.870370 0.522222 -0.000002 +v 1.688430 0.384377 0.469906 +v 1.750000 0.384375 -0.000001 +v 1.572290 0.277780 0.437585 +v 1.629630 0.277778 -0.000001 +v 1.482960 0.200349 0.412722 +v 1.537040 0.200347 -0.000001 +v 1.447220 0.150001 0.402777 +v 1.500000 0.150000 -0.000001 +v 1.698330 0.693407 0.997473 +v 1.618220 0.522225 0.950423 +v 1.514070 0.384378 0.889258 +v 1.409930 0.277781 0.828092 +v 1.329820 0.200350 0.781042 +v 1.297780 0.150003 0.762221 +v 1.393700 0.693408 1.393700 +v 1.327960 0.522227 1.327960 +v 1.242500 0.384380 1.242500 +v 1.157040 0.277782 1.157040 +v 1.091300 0.200351 1.091300 +v 1.065000 0.150004 1.065000 +v 0.997476 0.693409 1.698330 +v 0.950425 0.522228 1.618220 +v 0.889259 0.384381 1.514070 +v 0.828093 0.277783 1.409930 +v 0.781043 0.200352 1.329820 +v 0.762222 0.150005 1.297780 +v 0.527092 0.693410 1.893900 +v 0.502229 0.522229 1.804560 +v 0.469907 0.384381 1.688430 +v 0.437586 0.277784 1.572290 +v 0.412723 0.200352 1.482960 +v 0.402778 0.150005 1.447220 +v 0.000000 0.693410 1.962960 +v 0.000000 0.522229 1.870370 +v 0.000000 0.384381 1.750000 +v 0.000000 0.277784 1.629630 +v 0.000000 0.200353 1.537040 +v 0.000000 0.150006 1.500000 +v -0.527092 0.693410 1.893900 +v -0.502229 0.522229 1.804560 +v -0.469907 0.384381 1.688430 +v -0.437586 0.277784 1.572290 +v -0.412723 0.200352 1.482960 +v -0.402778 0.150005 1.447220 +v -0.997476 0.693409 1.698330 +v -0.950425 0.522228 1.618220 +v -0.889259 0.384381 1.514070 +v -0.828093 0.277783 1.409930 +v -0.781043 0.200352 1.329820 +v -0.762222 0.150005 1.297780 +v -1.393700 0.693408 1.393700 +v -1.327960 0.522227 1.327960 +v -1.242500 0.384380 1.242500 +v -1.157040 0.277782 1.157040 +v -1.091300 0.200351 1.091300 +v -1.065000 0.150004 1.065000 +v -1.698330 0.693407 0.997473 +v -1.618220 0.522225 0.950423 +v -1.514070 0.384378 0.889258 +v -1.409930 0.277781 0.828092 +v -1.329820 0.200350 0.781042 +v -1.297780 0.150003 0.762221 +v -1.893900 0.693405 0.527089 +v -1.804560 0.522224 0.502227 +v -1.688430 0.384377 0.469906 +v -1.572290 0.277780 0.437585 +v -1.482960 0.200349 0.412722 +v -1.447220 0.150001 0.402777 +v -1.962960 0.693403 -0.000002 +v -1.870370 0.522222 -0.000002 +v -1.750000 0.384375 -0.000001 +v -1.629630 0.277778 -0.000001 +v -1.537040 0.200347 -0.000001 +v -1.500000 0.150000 -0.000001 +v -1.893900 0.693401 -0.527095 +v -1.804560 0.522220 -0.502231 +v -1.688430 0.384373 -0.469908 +v -1.572290 0.277776 -0.437587 +v -1.482960 0.200345 -0.412724 +v -1.447220 0.149999 -0.402779 +v -1.698330 0.693399 -0.997479 +v -1.618220 0.522218 -0.950427 +v -1.514070 0.384372 -0.889260 +v -1.409930 0.277775 -0.828094 +v -1.329820 0.200344 -0.781044 +v -1.297780 0.149997 -0.762223 +v -1.393700 0.693398 -1.393700 +v -1.327960 0.522217 -1.327960 +v -1.242500 0.384370 -1.242500 +v -1.157040 0.277774 -1.157040 +v -1.091300 0.200343 -1.091300 +v -1.065000 0.149996 -1.065000 +v -0.997476 0.693397 -1.698330 +v -0.950425 0.522216 -1.618220 +v -0.889259 0.384369 -1.514070 +v -0.828093 0.277773 -1.409930 +v -0.781043 0.200342 -1.329820 +v -0.762222 0.149995 -1.297780 +v -0.527092 0.693396 -1.893900 +v -0.502229 0.522215 -1.804560 +v -0.469907 0.384369 -1.688430 +v -0.437586 0.277772 -1.572290 +v -0.412723 0.200342 -1.482960 +v -0.402778 0.149995 -1.447220 +v 0.000000 0.693396 -1.962960 +v 0.000000 0.522215 -1.870370 +v 0.000000 0.384369 -1.750000 +v 0.000000 0.277772 -1.629630 +v 0.000000 0.200341 -1.537040 +v 0.000000 0.149994 -1.500000 +v 0.527092 0.693396 -1.893900 +v 0.502229 0.522215 -1.804560 +v 0.469907 0.384369 -1.688430 +v 0.437586 0.277772 -1.572290 +v 0.412723 0.200342 -1.482960 +v 0.402778 0.149995 -1.447220 +v 0.997476 0.693397 -1.698330 +v 0.950425 0.522216 -1.618220 +v 0.889259 0.384369 -1.514070 +v 0.828093 0.277773 -1.409930 +v 0.781043 0.200342 -1.329820 +v 0.762222 0.149995 -1.297780 +v 1.393700 0.693398 -1.393700 +v 1.327960 0.522217 -1.327960 +v 1.242500 0.384370 -1.242500 +v 1.157040 0.277774 -1.157040 +v 1.091300 0.200343 -1.091300 +v 1.065000 0.149996 -1.065000 +v 1.698330 0.693399 -0.997479 +v 1.618220 0.522218 -0.950427 +v 1.514070 0.384372 -0.889260 +v 1.409930 0.277775 -0.828094 +v 1.329820 0.200344 -0.781044 +v 1.297780 0.149997 -0.762223 +v 1.893900 0.693401 -0.527095 +v 1.804560 0.522220 -0.502231 +v 1.688430 0.384373 -0.469908 +v 1.572290 0.277776 -0.437587 +v 1.482960 0.200345 -0.412724 +v 1.447220 0.149999 -0.402779 +v 1.022220 0.022222 -0.000000 +v 0.986255 0.022221 -0.274486 +v 1.284370 0.046875 -0.000000 +v 1.239180 0.046874 -0.344878 +v 1.427780 0.077778 -0.000000 +v 1.377540 0.077777 -0.383385 +v 1.487850 0.112847 -0.000000 +v 1.435500 0.112846 -0.399515 +v 0.884412 0.022220 -0.519440 +v 1.111220 0.046873 -0.652653 +v 1.235290 0.077775 -0.725523 +v 1.287260 0.112844 -0.756047 +v 0.725778 0.022219 -0.725778 +v 0.911906 0.046872 -0.911906 +v 1.013720 0.077774 -1.013720 +v 1.056370 0.112843 -1.056370 +v 0.519440 0.022219 -0.884412 +v 0.652653 0.046871 -1.111220 +v 0.725523 0.077774 -1.235290 +v 0.756047 0.112842 -1.287260 +v 0.274486 0.022219 -0.986255 +v 0.344878 0.046871 -1.239180 +v 0.383385 0.077773 -1.377540 +v 0.399515 0.112842 -1.435500 +v 0.000000 0.022218 -1.022220 +v 0.000000 0.046871 -1.284370 +v 0.000000 0.077773 -1.427780 +v 0.000000 0.112842 -1.487850 +v -0.274486 0.022219 -0.986255 +v -0.344878 0.046871 -1.239180 +v -0.383385 0.077773 -1.377540 +v -0.399515 0.112842 -1.435500 +v -0.519440 0.022219 -0.884412 +v -0.652653 0.046871 -1.111220 +v -0.725523 0.077774 -1.235290 +v -0.756047 0.112842 -1.287260 +v -0.725778 0.022219 -0.725778 +v -0.911906 0.046872 -0.911906 +v -1.013720 0.077774 -1.013720 +v -1.056370 0.112843 -1.056370 +v -0.884412 0.022220 -0.519440 +v -1.111220 0.046873 -0.652653 +v -1.235290 0.077775 -0.725523 +v -1.287260 0.112844 -0.756047 +v -0.986255 0.022221 -0.274486 +v -1.239180 0.046874 -0.344878 +v -1.377540 0.077777 -0.383385 +v -1.435500 0.112846 -0.399515 +v -1.022220 0.022222 -0.000000 +v -1.284370 0.046875 -0.000000 +v -1.427780 0.077778 -0.000000 +v -1.487850 0.112847 -0.000000 +v -0.986255 0.022223 0.274486 +v -1.239180 0.046876 0.344878 +v -1.377540 0.077779 0.383385 +v -1.435500 0.112848 0.399515 +v -0.884412 0.022224 0.519440 +v -1.111220 0.046877 0.652653 +v -1.235290 0.077781 0.725523 +v -1.287260 0.112850 0.756047 +v -0.725778 0.022225 0.725778 +v -0.911906 0.046878 0.911906 +v -1.013720 0.077782 1.013720 +v -1.056370 0.112851 1.056370 +v -0.519440 0.022225 0.884412 +v -0.652653 0.046879 1.111220 +v -0.725523 0.077782 1.235290 +v -0.756047 0.112852 1.287260 +v -0.274486 0.022225 0.986255 +v -0.344878 0.046879 1.239180 +v -0.383385 0.077783 1.377540 +v -0.399515 0.112852 1.435500 +v 0.000000 0.022226 1.022220 +v 0.000000 0.046879 1.284370 +v 0.000000 0.077783 1.427780 +v 0.000000 0.112852 1.487850 +v 0.274486 0.022225 0.986255 +v 0.344878 0.046879 1.239180 +v 0.383385 0.077783 1.377540 +v 0.399515 0.112852 1.435500 +v 0.519440 0.022225 0.884412 +v 0.652653 0.046879 1.111220 +v 0.725523 0.077782 1.235290 +v 0.756047 0.112852 1.287260 +v 0.725778 0.022225 0.725778 +v 0.911906 0.046878 0.911906 +v 1.013720 0.077782 1.013720 +v 1.056370 0.112851 1.056370 +v 0.884412 0.022224 0.519440 +v 1.111220 0.046877 0.652653 +v 1.235290 0.077781 0.725523 +v 1.287260 0.112850 0.756047 +v 0.986255 0.022223 0.274486 +v 1.239180 0.046876 0.344878 +v 1.377540 0.077779 0.383385 +v 1.435500 0.112848 0.399515 +v 0.192963 2.700000 0.053694 +v 0.200000 2.700000 -0.000010 +v 0.165279 2.785420 0.046035 +v 0.171296 2.785420 -0.000010 +v 0.173037 2.700000 0.101620 +v 0.148234 2.785420 0.087096 +v 0.142000 2.700000 0.141990 +v 0.121672 2.785420 0.121662 +v 0.101630 2.700000 0.173027 +v 0.087106 2.785420 0.148224 +v 0.053704 2.700000 0.192953 +v 0.046045 2.785420 0.165269 +v 0.000000 2.700000 0.199990 +v 0.000000 2.785420 0.171286 +v -0.053704 2.700000 0.192953 +v -0.046045 2.785420 0.165269 +v -0.101630 2.700000 0.173027 +v -0.087106 2.785420 0.148224 +v -0.142000 2.700000 0.141990 +v -0.121672 2.785420 0.121662 +v -0.173037 2.700000 0.101620 +v -0.148234 2.785420 0.087096 +v -0.192963 2.700000 0.053694 +v -0.165279 2.785420 0.046035 +v -0.200000 2.700000 -0.000010 +v -0.171296 2.785420 -0.000010 +v -0.192963 2.700000 -0.053714 +v -0.165279 2.785420 -0.046055 +v -0.173037 2.700000 -0.101640 +v -0.148234 2.785420 -0.087116 +v -0.142000 2.700000 -0.142010 +v -0.121672 2.785420 -0.121682 +v -0.101630 2.700000 -0.173047 +v -0.087106 2.785420 -0.148244 +v -0.053704 2.700000 -0.192973 +v -0.046045 2.785420 -0.165289 +v 0.000000 2.700000 -0.200010 +v 0.000000 2.785420 -0.171306 +v 0.053704 2.700000 -0.192973 +v 0.046045 2.785420 -0.165289 +v 0.101630 2.700000 -0.173047 +v 0.087106 2.785420 -0.148244 +v 0.142000 2.700000 -0.142010 +v 0.121672 2.785420 -0.121682 +v 0.173037 2.700000 -0.101640 +v 0.148234 2.785420 -0.087116 +v 0.192963 2.700000 -0.053714 +v 0.165279 2.785420 -0.046055 +v 0.338579 2.636110 0.094221 +v 0.350926 2.636110 -0.000009 +v 0.553875 2.588890 0.154140 +v 0.574074 2.588890 -0.000009 +v 0.795972 2.550000 0.221519 +v 0.825000 2.550000 -0.000009 +v 1.021990 2.511110 0.284422 +v 1.059260 2.511110 -0.000009 +v 1.189040 2.463890 0.330915 +v 1.232410 2.463890 -0.000009 +v 1.254260 2.400000 0.349065 +v 1.300000 2.400000 -0.000008 +v 0.303616 2.636110 0.178312 +v 0.496680 2.588890 0.291705 +v 0.713778 2.550000 0.419213 +v 0.916455 2.511110 0.538252 +v 1.066260 2.463890 0.626237 +v 1.124740 2.400000 0.660584 +v 0.249157 2.636110 0.249147 +v 0.407593 2.588890 0.407583 +v 0.585750 2.550000 0.585741 +v 0.752074 2.511110 0.752065 +v 0.875009 2.463890 0.875000 +v 0.923000 2.400000 0.922991 +v 0.178322 2.636110 0.303606 +v 0.291715 2.588890 0.496670 +v 0.419222 2.550000 0.713769 +v 0.538261 2.511110 0.916446 +v 0.626246 2.463890 1.066250 +v 0.660593 2.400000 1.124730 +v 0.094230 2.636110 0.338569 +v 0.154150 2.588890 0.553865 +v 0.221528 2.550000 0.795963 +v 0.284431 2.511110 1.021980 +v 0.330924 2.463890 1.189030 +v 0.349074 2.400000 1.254250 +v 0.000000 2.636110 0.350916 +v 0.000000 2.588890 0.574064 +v 0.000000 2.550000 0.824991 +v 0.000000 2.511110 1.059250 +v 0.000000 2.463890 1.232400 +v 0.000000 2.400000 1.299990 +v -0.094230 2.636110 0.338569 +v -0.154150 2.588890 0.553865 +v -0.221528 2.550000 0.795963 +v -0.284431 2.511110 1.021980 +v -0.330924 2.463890 1.189030 +v -0.349074 2.400000 1.254250 +v -0.178322 2.636110 0.303606 +v -0.291715 2.588890 0.496670 +v -0.419222 2.550000 0.713769 +v -0.538261 2.511110 0.916446 +v -0.626246 2.463890 1.066250 +v -0.660593 2.400000 1.124730 +v -0.249157 2.636110 0.249147 +v -0.407593 2.588890 0.407583 +v -0.585750 2.550000 0.585741 +v -0.752074 2.511110 0.752065 +v -0.875009 2.463890 0.875000 +v -0.923000 2.400000 0.922991 +v -0.303616 2.636110 0.178312 +v -0.496680 2.588890 0.291705 +v -0.713778 2.550000 0.419213 +v -0.916455 2.511110 0.538252 +v -1.066260 2.463890 0.626237 +v -1.124740 2.400000 0.660584 +v -0.338579 2.636110 0.094221 +v -0.553875 2.588890 0.154140 +v -0.795972 2.550000 0.221519 +v -1.021990 2.511110 0.284422 +v -1.189040 2.463890 0.330915 +v -1.254260 2.400000 0.349065 +v -0.350926 2.636110 -0.000009 +v -0.574074 2.588890 -0.000009 +v -0.825000 2.550000 -0.000009 +v -1.059260 2.511110 -0.000009 +v -1.232410 2.463890 -0.000009 +v -1.300000 2.400000 -0.000008 +v -0.338579 2.636110 -0.094239 +v -0.553875 2.588890 -0.154160 +v -0.795972 2.550000 -0.221537 +v -1.021990 2.511110 -0.284440 +v -1.189040 2.463890 -0.330933 +v -1.254260 2.400000 -0.349083 +v -0.303616 2.636110 -0.178332 +v -0.496680 2.588890 -0.291725 +v -0.713778 2.550000 -0.419231 +v -0.916455 2.511110 -0.538270 +v -1.066260 2.463890 -0.626255 +v -1.124740 2.400000 -0.660602 +v -0.249157 2.636110 -0.249167 +v -0.407593 2.588890 -0.407603 +v -0.585750 2.550000 -0.585759 +v -0.752074 2.511110 -0.752083 +v -0.875009 2.463890 -0.875018 +v -0.923000 2.400000 -0.923009 +v -0.178322 2.636110 -0.303626 +v -0.291715 2.588890 -0.496690 +v -0.419222 2.550000 -0.713787 +v -0.538261 2.511110 -0.916464 +v -0.626246 2.463890 -1.066270 +v -0.660593 2.400000 -1.124750 +v -0.094230 2.636110 -0.338589 +v -0.154150 2.588890 -0.553885 +v -0.221528 2.550000 -0.795981 +v -0.284431 2.511110 -1.022000 +v -0.330924 2.463890 -1.189050 +v -0.349074 2.400000 -1.254270 +v 0.000000 2.636110 -0.350936 +v 0.000000 2.588890 -0.574084 +v 0.000000 2.550000 -0.825009 +v 0.000000 2.511110 -1.059270 +v 0.000000 2.463890 -1.232420 +v 0.000000 2.400000 -1.300010 +v 0.094230 2.636110 -0.338589 +v 0.154150 2.588890 -0.553885 +v 0.221528 2.550000 -0.795981 +v 0.284431 2.511110 -1.022000 +v 0.330924 2.463890 -1.189050 +v 0.349074 2.400000 -1.254270 +v 0.178322 2.636110 -0.303626 +v 0.291715 2.588890 -0.496690 +v 0.419222 2.550000 -0.713787 +v 0.538261 2.511110 -0.916464 +v 0.626246 2.463890 -1.066270 +v 0.660593 2.400000 -1.124750 +v 0.249157 2.636110 -0.249167 +v 0.407593 2.588890 -0.407603 +v 0.585750 2.550000 -0.585759 +v 0.752074 2.511110 -0.752083 +v 0.875009 2.463890 -0.875018 +v 0.923000 2.400000 -0.923009 +v 0.303616 2.636110 -0.178332 +v 0.496680 2.588890 -0.291725 +v 0.713778 2.550000 -0.419231 +v 0.916455 2.511110 -0.538270 +v 1.066260 2.463890 -0.626255 +v 1.124740 2.400000 -0.660602 +v 0.338579 2.636110 -0.094239 +v 0.553875 2.588890 -0.154160 +v 0.795972 2.550000 -0.221537 +v 1.021990 2.511110 -0.284440 +v 1.189040 2.463890 -0.330933 +v 1.254260 2.400000 -0.349083 +v -1.924540 2.023960 -0.000007 +v -1.600000 2.025000 -0.000007 +v -1.927040 2.040550 0.124992 +v -1.592590 2.041670 0.124992 +v -2.196300 2.016670 -0.000007 +v -2.206450 2.032720 0.124992 +v -2.428240 2.011460 0.124993 +v -2.412500 1.996870 -0.000007 +v -2.589850 1.970060 0.124993 +v -2.570370 1.958330 -0.000007 +v -2.688700 1.901810 0.124993 +v -2.667130 1.894790 -0.000007 +v -2.722220 1.800000 0.124993 +v -2.700000 1.800000 -0.000006 +v -1.933300 2.082020 0.199992 +v -1.574070 2.083330 0.199992 +v -2.231820 2.072840 0.199992 +v -2.467590 2.047920 0.199992 +v -2.638550 1.999380 0.199993 +v -2.742630 1.919370 0.199993 +v -2.777780 1.800000 0.199993 +v -1.941440 2.135940 0.224992 +v -1.550000 2.137500 0.224992 +v -2.264810 2.125000 0.224992 +v -2.518750 2.095310 0.224992 +v -2.701850 2.037500 0.224992 +v -2.812730 1.942190 0.224993 +v -2.850000 1.800000 0.224993 +v -1.949570 2.189850 0.199992 +v -1.525930 2.191670 0.199992 +v -2.297810 2.177160 0.199992 +v -2.569910 2.142710 0.199992 +v -2.765160 2.075620 0.199992 +v -2.882840 1.965010 0.199993 +v -2.922220 1.800000 0.199993 +v -1.955830 2.231330 0.124992 +v -1.507410 2.233330 0.124992 +v -2.323180 2.217280 0.124992 +v -2.609260 2.179170 0.124992 +v -2.813850 2.104940 0.124992 +v -2.936760 1.982560 0.124993 +v -2.977780 1.800000 0.124993 +v -1.958330 2.247920 -0.000008 +v -1.500000 2.250000 -0.000008 +v -2.333330 2.233330 -0.000008 +v -2.625000 2.193750 -0.000008 +v -2.833330 2.116670 -0.000007 +v -2.958330 1.989580 -0.000007 +v -3.000000 1.800000 -0.000006 +v -1.507410 2.233330 -0.125008 +v -1.955830 2.231330 -0.125008 +v -2.323180 2.217280 -0.125008 +v -2.609260 2.179170 -0.125008 +v -2.813850 2.104940 -0.125008 +v -2.936760 1.982560 -0.125007 +v -2.977780 1.800000 -0.125007 +v -1.525930 2.191670 -0.200008 +v -1.949570 2.189850 -0.200008 +v -2.297810 2.177160 -0.200008 +v -2.569910 2.142710 -0.200008 +v -2.765160 2.075620 -0.200008 +v -2.882840 1.965010 -0.200007 +v -2.922220 1.800000 -0.200007 +v -1.550000 2.137500 -0.225008 +v -1.941440 2.135940 -0.225008 +v -2.264810 2.125000 -0.225008 +v -2.518750 2.095310 -0.225008 +v -2.701850 2.037500 -0.225008 +v -2.812730 1.942190 -0.225007 +v -2.850000 1.800000 -0.225007 +v -1.574070 2.083330 -0.200008 +v -1.933300 2.082020 -0.200008 +v -2.231820 2.072840 -0.200008 +v -2.467590 2.047920 -0.200008 +v -2.638550 1.999380 -0.200007 +v -2.742630 1.919370 -0.200007 +v -2.777780 1.800000 -0.200007 +v -1.592590 2.041670 -0.125008 +v -1.927040 2.040550 -0.125008 +v -2.206450 2.032720 -0.125008 +v -2.428240 2.011460 -0.125007 +v -2.589850 1.970060 -0.125007 +v -2.688700 1.901810 -0.125007 +v -2.722220 1.800000 -0.125007 +v -2.704180 1.663980 0.124994 +v -2.682870 1.670830 -0.000006 +v -2.648290 1.505350 0.124994 +v -2.629630 1.516670 -0.000005 +v -2.551850 1.335760 0.124995 +v -2.537500 1.350000 -0.000005 +v -2.412210 1.166870 0.124996 +v -2.403700 1.183330 -0.000004 +v -2.226680 1.010330 0.124996 +v -2.225460 1.029170 -0.000004 +v -1.992590 0.877778 0.124997 +v -2.000000 0.900000 -0.000003 +v -2.757470 1.646840 0.199994 +v -2.694920 1.477060 0.199995 +v -2.587730 1.300170 0.199995 +v -2.433470 1.125720 0.199996 +v -2.229720 0.963228 0.199996 +v -1.974070 0.822223 0.199997 +v -2.826740 1.624570 0.224994 +v -2.755560 1.440280 0.224995 +v -2.634370 1.253910 0.224995 +v -2.461110 1.072220 0.224996 +v -2.233680 0.901998 0.224997 +v -1.950000 0.750001 0.224997 +v -2.896000 1.602290 0.199994 +v -2.816190 1.403500 0.199995 +v -2.681020 1.207640 0.199996 +v -2.488750 1.018720 0.199996 +v -2.237640 0.840767 0.199997 +v -1.925930 0.677779 0.199997 +v -2.949290 1.585150 0.124994 +v -2.862830 1.375210 0.124995 +v -2.716900 1.172050 0.124996 +v -2.510010 0.977573 0.124996 +v -2.240680 0.793666 0.124997 +v -1.907410 0.622222 0.124998 +v -2.970600 1.578300 -0.000006 +v -2.881480 1.363890 -0.000005 +v -2.731250 1.157810 -0.000004 +v -2.518520 0.961111 -0.000003 +v -2.241900 0.774826 -0.000003 +v -1.900000 0.600000 -0.000002 +v -2.949290 1.585150 -0.125006 +v -2.862830 1.375210 -0.125005 +v -2.716900 1.172050 -0.125004 +v -2.510010 0.977572 -0.125004 +v -2.240680 0.793666 -0.125003 +v -1.907410 0.622222 -0.125002 +v -2.896000 1.602290 -0.200006 +v -2.816190 1.403500 -0.200005 +v -2.681020 1.207640 -0.200004 +v -2.488750 1.018720 -0.200004 +v -2.237640 0.840765 -0.200003 +v -1.925930 0.677777 -0.200003 +v -2.826740 1.624570 -0.225006 +v -2.755560 1.440280 -0.225005 +v -2.634370 1.253910 -0.225005 +v -2.461110 1.072220 -0.225004 +v -2.233680 0.901996 -0.225003 +v -1.950000 0.749999 -0.225003 +v -2.757470 1.646840 -0.200006 +v -2.694920 1.477060 -0.200005 +v -2.587730 1.300170 -0.200005 +v -2.433470 1.125720 -0.200004 +v -2.229720 0.963226 -0.200004 +v -1.974070 0.822221 -0.200003 +v -2.704180 1.663980 -0.125006 +v -2.648290 1.505350 -0.125006 +v -2.551850 1.335760 -0.125005 +v -2.412210 1.166870 -0.125004 +v -2.226680 1.010330 -0.125004 +v -1.992590 0.877778 -0.125003 +v 1.700000 1.425000 -0.000005 +v 1.700000 1.363890 0.274995 +v 2.072380 1.425210 0.262341 +v 2.058800 1.476390 -0.000005 +v 2.290120 1.572020 0.230704 +v 2.270370 1.611110 -0.000006 +v 2.409720 1.773610 0.189576 +v 2.387500 1.800000 -0.000006 +v 2.487650 1.999280 0.148450 +v 2.462960 2.013890 -0.000007 +v 2.580400 2.218310 0.116813 +v 2.549540 2.223610 -0.000008 +v 2.700000 2.400000 -0.000008 +v 2.744440 2.400000 0.104158 +v 1.700000 1.211110 0.439996 +v 2.106330 1.297250 0.419748 +v 2.339510 1.474280 0.369131 +v 2.465280 1.707640 0.303327 +v 2.549380 1.962760 0.237524 +v 2.657560 2.205070 0.186906 +v 2.855560 2.400000 0.166658 +v 1.700000 1.012500 0.494996 +v 2.150460 1.130900 0.472218 +v 2.403700 1.347220 0.415273 +v 2.537500 1.621870 0.341244 +v 2.629630 1.915280 0.267215 +v 2.757870 2.187850 0.210270 +v 3.000000 2.400000 0.187491 +v 1.700000 0.813891 0.439997 +v 2.194600 0.964560 0.419749 +v 2.467900 1.220160 0.369132 +v 2.609720 1.536110 0.303327 +v 2.709880 1.867800 0.237524 +v 2.858180 2.170630 0.186906 +v 3.144440 2.400000 0.166658 +v 1.700000 0.661112 0.274998 +v 2.228550 0.836601 0.262343 +v 2.517280 1.122430 0.230706 +v 2.665280 1.470140 0.189578 +v 2.771600 1.831280 0.148450 +v 2.935340 2.157380 0.116813 +v 3.255560 2.400000 0.104158 +v 1.700000 0.600000 -0.000002 +v 2.242130 0.785417 -0.000003 +v 2.537040 1.083330 -0.000004 +v 2.687500 1.443750 -0.000005 +v 2.796300 1.816670 -0.000006 +v 2.966200 2.152080 -0.000008 +v 3.300000 2.400000 -0.000008 +v 1.700000 0.661110 -0.275002 +v 2.228550 0.836599 -0.262349 +v 2.517280 1.122430 -0.230714 +v 2.665280 1.470140 -0.189588 +v 2.771600 1.831280 -0.148464 +v 2.935340 2.157380 -0.116829 +v 3.255560 2.400000 -0.104176 +v 1.700000 0.813887 -0.440003 +v 2.194600 0.964556 -0.419757 +v 2.467900 1.220160 -0.369141 +v 2.609720 1.536110 -0.303339 +v 2.709880 1.867800 -0.237538 +v 2.858180 2.170630 -0.186922 +v 3.144440 2.400000 -0.166676 +v 1.700000 1.012500 -0.495004 +v 2.150460 1.130900 -0.472226 +v 2.403700 1.347220 -0.415283 +v 2.537500 1.621870 -0.341256 +v 2.629630 1.915280 -0.267229 +v 2.757870 2.187850 -0.210286 +v 3.000000 2.400000 -0.187509 +v 1.700000 1.211110 -0.440004 +v 2.106330 1.297250 -0.419758 +v 2.339510 1.474280 -0.369141 +v 2.465280 1.707640 -0.303339 +v 2.549380 1.962760 -0.237538 +v 2.657560 2.205070 -0.186922 +v 2.855560 2.400000 -0.166676 +v 1.700000 1.363890 -0.275005 +v 2.072380 1.425210 -0.262351 +v 2.290120 1.572020 -0.230716 +v 2.409720 1.773610 -0.189590 +v 2.487650 1.999280 -0.148464 +v 2.580400 2.218310 -0.116829 +v 2.744440 2.400000 -0.104176 +v 2.749070 2.431250 -0.000009 +v 2.796410 2.431930 0.101023 +v 2.792590 2.450000 -0.000009 +v 2.839780 2.451230 0.092969 +v 2.825000 2.456250 -0.000009 +v 2.869680 2.457810 0.082022 +v 2.881210 2.451540 0.070207 +v 2.840740 2.450000 -0.000009 +v 2.869490 2.432310 0.059549 +v 2.834260 2.431250 -0.000009 +v 2.829630 2.400000 0.052074 +v 2.800000 2.400000 -0.000008 +v 2.914740 2.433610 0.161565 +v 2.957750 2.454320 0.148139 +v 2.981370 2.461720 0.129158 +v 2.982370 2.455400 0.107398 +v 2.957560 2.434960 0.085639 +v 2.903700 2.400000 0.066658 +v 3.068580 2.435810 0.181675 +v 3.111110 2.458330 0.165963 +v 3.126560 2.466800 0.142960 +v 3.113890 2.460420 0.115269 +v 3.072050 2.438410 0.085495 +v 3.000000 2.400000 0.056241 +v 3.222410 2.438000 0.161411 +v 3.264470 2.462350 0.146905 +v 3.271760 2.471870 0.124991 +v 3.245400 2.465430 0.097522 +v 3.186540 2.441860 0.066349 +v 3.096300 2.400000 0.033324 +v 3.340750 2.439690 0.100830 +v 3.382440 2.465430 0.091426 +v 3.383450 2.475780 0.076814 +v 3.346570 2.469290 0.057861 +v 3.274610 2.444510 0.035437 +v 3.170370 2.400000 0.010408 +v 3.388080 2.440360 -0.000009 +v 3.429630 2.466670 -0.000009 +v 3.428130 2.477340 -0.000009 +v 3.387040 2.470830 -0.000009 +v 3.309840 2.445570 -0.000009 +v 3.200000 2.400000 -0.000008 +v 3.340750 2.439690 -0.101089 +v 3.382440 2.465430 -0.093373 +v 3.383450 2.475780 -0.083342 +v 3.346570 2.469290 -0.073312 +v 3.274610 2.444510 -0.065595 +v 3.170370 2.400000 -0.062509 +v 3.222410 2.438000 -0.161737 +v 3.264470 2.462350 -0.149392 +v 3.271760 2.471870 -0.133342 +v 3.245400 2.465430 -0.117293 +v 3.186540 2.441860 -0.104947 +v 3.096300 2.400000 -0.100009 +v 3.068580 2.435810 -0.181953 +v 3.111110 2.458330 -0.168065 +v 3.126560 2.466800 -0.150009 +v 3.113890 2.460420 -0.131953 +v 3.072050 2.438410 -0.118065 +v 3.000000 2.400000 -0.112509 +v 2.914740 2.433610 -0.161737 +v 2.957750 2.454320 -0.149392 +v 2.981370 2.461720 -0.133342 +v 2.982370 2.455400 -0.117293 +v 2.957560 2.434960 -0.104947 +v 2.903700 2.400000 -0.100009 +v 2.796410 2.431930 -0.101089 +v 2.839780 2.451230 -0.093373 +v 2.869680 2.457810 -0.083342 +v 2.881210 2.451540 -0.073312 +v 2.869490 2.432310 -0.065595 +v 2.829630 2.400000 -0.062509 +v 0.278704 3.127080 -0.000011 +v 0.000000 3.150000 -0.000011 +v 0.268946 3.127080 0.075067 +v 0.241285 3.127080 0.141920 +v 0.198140 3.127080 0.198129 +v 0.141931 3.127080 0.241274 +v 0.075078 3.127080 0.268935 +v 0.000000 3.127080 0.278693 +v -0.075078 3.127080 0.268935 +v -0.141931 3.127080 0.241274 +v -0.198140 3.127080 0.198129 +v -0.241285 3.127080 0.141920 +v -0.268946 3.127080 0.075067 +v -0.278704 3.127080 -0.000011 +v -0.268946 3.127080 -0.075089 +v -0.241285 3.127080 -0.141942 +v -0.198140 3.127080 -0.198151 +v -0.141931 3.127080 -0.241296 +v -0.075078 3.127080 -0.268957 +v 0.000000 3.127080 -0.278715 +v 0.075078 3.127080 -0.268957 +v 0.141931 3.127080 -0.241296 +v 0.198140 3.127080 -0.198151 +v 0.241285 3.127080 -0.141942 +v 0.268946 3.127080 -0.075089 +v 0.350254 3.066670 0.097760 +v 0.362963 3.066670 -0.000011 +v 0.313617 2.981250 0.087518 +v 0.325000 2.981250 -0.000011 +v 0.228728 2.883330 0.063793 +v 0.237037 2.883330 -0.000010 +v 0.165279 2.785420 0.046035 +v 0.171296 2.785420 -0.000010 +v 0.314228 3.066670 0.184824 +v 0.281352 2.981250 0.165470 +v 0.205180 2.883330 0.120636 +v 0.148234 2.785420 0.087096 +v 0.258037 3.066670 0.258027 +v 0.231031 2.981250 0.231020 +v 0.168463 2.883330 0.168452 +v 0.121672 2.785420 0.121662 +v 0.184834 3.066670 0.314218 +v 0.165481 2.981250 0.281341 +v 0.120647 2.883330 0.205169 +v 0.087106 2.785420 0.148224 +v 0.097771 3.066670 0.350244 +v 0.087529 2.981250 0.313606 +v 0.063803 2.883330 0.228717 +v 0.046045 2.785420 0.165269 +v 0.000000 3.066670 0.362953 +v 0.000000 2.981250 0.324989 +v 0.000000 2.883330 0.237026 +v 0.000000 2.785420 0.171286 +v -0.097771 3.066670 0.350244 +v -0.087529 2.981250 0.313606 +v -0.063803 2.883330 0.228717 +v -0.046045 2.785420 0.165269 +v -0.184834 3.066670 0.314218 +v -0.165481 2.981250 0.281341 +v -0.120647 2.883330 0.205169 +v -0.087106 2.785420 0.148224 +v -0.258037 3.066670 0.258027 +v -0.231031 2.981250 0.231020 +v -0.168463 2.883330 0.168452 +v -0.121672 2.785420 0.121662 +v -0.314228 3.066670 0.184824 +v -0.281352 2.981250 0.165470 +v -0.205180 2.883330 0.120636 +v -0.148234 2.785420 0.087096 +v -0.350254 3.066670 0.097760 +v -0.313617 2.981250 0.087518 +v -0.228728 2.883330 0.063793 +v -0.165279 2.785420 0.046035 +v -0.362963 3.066670 -0.000011 +v -0.325000 2.981250 -0.000011 +v -0.237037 2.883330 -0.000010 +v -0.171296 2.785420 -0.000010 +v -0.350254 3.066670 -0.097782 +v -0.313617 2.981250 -0.087540 +v -0.228728 2.883330 -0.063813 +v -0.165279 2.785420 -0.046055 +v -0.314228 3.066670 -0.184844 +v -0.281352 2.981250 -0.165492 +v -0.205180 2.883330 -0.120658 +v -0.148234 2.785420 -0.087116 +v -0.258037 3.066670 -0.258047 +v -0.231031 2.981250 -0.231042 +v -0.168463 2.883330 -0.168474 +v -0.121672 2.785420 -0.121682 +v -0.184834 3.066670 -0.314238 +v -0.165481 2.981250 -0.281363 +v -0.120647 2.883330 -0.205191 +v -0.087106 2.785420 -0.148244 +v -0.097771 3.066670 -0.350264 +v -0.087529 2.981250 -0.313628 +v -0.063803 2.883330 -0.228739 +v -0.046045 2.785420 -0.165289 +v 0.000000 3.066670 -0.362973 +v 0.000000 2.981250 -0.325011 +v 0.000000 2.883330 -0.237048 +v 0.000000 2.785420 -0.171306 +v 0.097771 3.066670 -0.350264 +v 0.087529 2.981250 -0.313628 +v 0.063803 2.883330 -0.228739 +v 0.046045 2.785420 -0.165289 +v 0.184834 3.066670 -0.314238 +v 0.165481 2.981250 -0.281363 +v 0.120647 2.883330 -0.205191 +v 0.087106 2.785420 -0.148244 +v 0.258037 3.066670 -0.258047 +v 0.231031 2.981250 -0.231042 +v 0.168463 2.883330 -0.168474 +v 0.121672 2.785420 -0.121682 +v 0.314228 3.066670 -0.184844 +v 0.281352 2.981250 -0.165492 +v 0.205180 2.883330 -0.120658 +v 0.148234 2.785420 -0.087116 +v 0.350254 3.066670 -0.097782 +v 0.313617 2.981250 -0.087540 +v 0.228728 2.883330 -0.063813 +v 0.165279 2.785420 -0.046055 +vn 0.025666 -0.999664 0.000000 +vn 0.000000 -1.000000 0.000000 +vn 0.024781 -0.999664 -0.006623 +vn 0.022156 -0.999664 -0.012787 +vn 0.018067 -0.999664 -0.018067 +vn 0.012787 -0.999664 -0.022126 +vn 0.006623 -0.999664 -0.024751 +vn 0.000000 -0.999664 -0.025666 +vn -0.006623 -0.999664 -0.024751 +vn -0.012787 -0.999664 -0.022126 +vn -0.018067 -0.999664 -0.018067 +vn -0.022156 -0.999664 -0.012787 +vn -0.024781 -0.999664 -0.006623 +vn -0.025666 -0.999664 0.000000 +vn -0.024781 -0.999664 0.006623 +vn -0.022156 -0.999664 0.012787 +vn -0.018067 -0.999664 0.018067 +vn -0.012787 -0.999664 0.022156 +vn -0.006623 -0.999664 0.024781 +vn 0.000000 -0.999664 0.025666 +vn 0.006623 -0.999664 0.024781 +vn 0.012787 -0.999664 0.022156 +vn 0.018067 -0.999664 0.018067 +vn 0.022156 -0.999664 0.012787 +vn 0.024781 -0.999664 0.006623 +vn -0.946562 -0.322459 0.000000 +vn -0.913999 -0.322947 -0.245491 +vn -0.958617 -0.122227 -0.257057 +vn -0.992523 -0.122013 0.000000 +vn -0.832057 0.554674 0.000000 +vn -0.803217 0.555376 -0.215308 +vn -0.048616 0.998810 0.000000 +vn -0.046205 0.998840 -0.012726 +vn 0.525376 0.839106 0.140843 +vn 0.544267 0.838893 0.000000 +vn 0.756340 0.621845 0.202918 +vn 0.783471 0.621387 0.000000 +vn 0.850551 0.473769 0.228217 +vn 0.880886 0.473281 0.000000 +vn -0.818842 -0.323435 -0.474166 +vn -0.859004 -0.122410 -0.497085 +vn -0.719657 0.555559 -0.416425 +vn -0.041749 0.998810 -0.024415 +vn 0.470107 0.839625 0.272011 +vn 0.677236 0.622608 0.391980 +vn 0.761803 0.474471 0.440962 +vn -0.669027 -0.323679 -0.669027 +vn -0.701773 -0.122440 -0.701773 +vn -0.587878 0.555650 -0.587878 +vn -0.034272 0.998810 -0.034272 +vn 0.383831 0.839808 0.383831 +vn 0.553148 0.622913 0.553148 +vn 0.622303 0.474776 0.622303 +vn -0.474166 -0.323435 -0.818842 +vn -0.497085 -0.122410 -0.859004 +vn -0.416425 0.555528 -0.719657 +vn -0.024415 0.998810 -0.041749 +vn 0.272011 0.839625 0.470077 +vn 0.392010 0.622608 0.677236 +vn 0.440962 0.474502 0.761803 +vn -0.245460 -0.322977 -0.913999 +vn -0.257057 -0.122257 -0.958617 +vn -0.215339 0.555193 -0.803308 +vn -0.012726 0.998840 -0.046236 +vn 0.140873 0.839076 0.525437 +vn 0.202918 0.621906 0.756310 +vn 0.228217 0.473769 0.850551 +vn 0.000000 -0.322489 -0.946562 +vn 0.000000 -0.122044 -0.992523 +vn 0.000000 0.554491 -0.832179 +vn 0.000000 0.998779 -0.048799 +vn 0.000000 0.838893 0.544267 +vn 0.000000 0.621387 0.783471 +vn 0.000000 0.473281 0.880886 +vn 0.245460 -0.322977 -0.913999 +vn 0.257057 -0.122257 -0.958617 +vn 0.215339 0.555193 -0.803308 +vn 0.012726 0.998840 -0.046236 +vn -0.140873 0.839076 0.525437 +vn -0.202918 0.621906 0.756310 +vn -0.228217 0.473769 0.850551 +vn 0.474166 -0.323435 -0.818842 +vn 0.497085 -0.122410 -0.859004 +vn 0.416425 0.555528 -0.719657 +vn 0.024415 0.998810 -0.041749 +vn -0.272011 0.839625 0.470077 +vn -0.392010 0.622608 0.677236 +vn -0.440962 0.474502 0.761803 +vn 0.669027 -0.323679 -0.669027 +vn 0.701773 -0.122440 -0.701773 +vn 0.587878 0.555650 -0.587878 +vn 0.034272 0.998810 -0.034272 +vn -0.383831 0.839808 0.383831 +vn -0.553148 0.622913 0.553148 +vn -0.622303 0.474776 0.622303 +vn 0.818842 -0.323435 -0.474166 +vn 0.859004 -0.122410 -0.497085 +vn 0.719657 0.555559 -0.416425 +vn 0.041749 0.998810 -0.024415 +vn -0.470107 0.839625 0.272011 +vn -0.677236 0.622608 0.391980 +vn -0.761803 0.474471 0.440962 +vn 0.913999 -0.322947 -0.245491 +vn 0.958617 -0.122227 -0.257057 +vn 0.803217 0.555376 -0.215308 +vn 0.046205 0.998840 -0.012726 +vn -0.525376 0.839106 0.140843 +vn -0.756340 0.621845 0.202918 +vn -0.850551 0.473769 0.228217 +vn 0.946562 -0.322459 0.000000 +vn 0.992523 -0.122013 0.000000 +vn 0.832057 0.554674 0.000000 +vn 0.048616 0.998810 0.000000 +vn -0.544267 0.838893 0.000000 +vn -0.783471 0.621387 0.000000 +vn -0.880886 0.473281 0.000000 +vn 0.913999 -0.322947 0.245491 +vn 0.958617 -0.122227 0.257057 +vn 0.803217 0.555376 0.215308 +vn 0.046205 0.998840 0.012726 +vn -0.525376 0.839106 -0.140843 +vn -0.756340 0.621845 -0.202918 +vn -0.850551 0.473769 -0.228217 +vn 0.818842 -0.323435 0.474166 +vn 0.859004 -0.122410 0.497085 +vn 0.719657 0.555559 0.416425 +vn 0.041749 0.998810 0.024415 +vn -0.470107 0.839625 -0.272011 +vn -0.677236 0.622608 -0.391980 +vn -0.761803 0.474471 -0.440962 +vn 0.669027 -0.323679 0.669027 +vn 0.701773 -0.122440 0.701773 +vn 0.587878 0.555650 0.587878 +vn 0.034272 0.998810 0.034272 +vn -0.383831 0.839808 -0.383831 +vn -0.553148 0.622913 -0.553148 +vn -0.622303 0.474776 -0.622303 +vn 0.474166 -0.323435 0.818842 +vn 0.497085 -0.122410 0.859004 +vn 0.416425 0.555559 0.719657 +vn 0.024415 0.998810 0.041749 +vn -0.272011 0.839625 -0.470107 +vn -0.391980 0.622608 -0.677236 +vn -0.440962 0.474471 -0.761803 +vn 0.245460 -0.322977 0.913999 +vn 0.257027 -0.122257 0.958617 +vn 0.215369 0.555193 0.803308 +vn 0.012726 0.998840 0.046236 +vn -0.140873 0.839045 -0.525498 +vn -0.202918 0.621845 -0.756371 +vn -0.228187 0.473769 -0.850551 +vn 0.000000 -0.322459 0.946562 +vn 0.000000 -0.122013 0.992523 +vn 0.000000 0.554674 0.832057 +vn 0.000000 0.998810 0.048616 +vn 0.000000 0.838893 -0.544267 +vn 0.000000 0.621387 -0.783471 +vn 0.000000 0.473281 -0.880886 +vn -0.245460 -0.322977 0.913999 +vn -0.257027 -0.122257 0.958617 +vn -0.215369 0.555193 0.803308 +vn -0.012726 0.998840 0.046236 +vn 0.140873 0.839045 -0.525498 +vn 0.202918 0.621845 -0.756371 +vn 0.228187 0.473769 -0.850551 +vn -0.474166 -0.323435 0.818842 +vn -0.497085 -0.122410 0.859004 +vn -0.416425 0.555559 0.719657 +vn -0.024415 0.998810 0.041749 +vn 0.272011 0.839625 -0.470107 +vn 0.391980 0.622608 -0.677236 +vn 0.440962 0.474471 -0.761803 +vn -0.669027 -0.323679 0.669027 +vn -0.701773 -0.122440 0.701773 +vn -0.587878 0.555650 0.587878 +vn -0.034272 0.998810 0.034272 +vn 0.383831 0.839808 -0.383831 +vn 0.553148 0.622913 -0.553148 +vn 0.622303 0.474776 -0.622303 +vn -0.818842 -0.323435 0.474166 +vn -0.859004 -0.122410 0.497085 +vn -0.719657 0.555559 0.416425 +vn -0.041749 0.998810 0.024415 +vn 0.470107 0.839625 -0.272011 +vn 0.677236 0.622608 -0.391980 +vn 0.761803 0.474471 -0.440962 +vn -0.913999 -0.322947 0.245491 +vn -0.958617 -0.122227 0.257057 +vn -0.803217 0.555376 0.215308 +vn -0.046205 0.998840 0.012726 +vn 0.525376 0.839106 -0.140843 +vn 0.756340 0.621845 -0.202918 +vn 0.850551 0.473769 -0.228217 +vn 0.877041 0.418744 0.235298 +vn 0.908292 0.418256 0.000000 +vn 0.888668 0.391644 0.238441 +vn 0.920286 0.391156 0.000000 +vn 0.907315 0.342753 0.243446 +vn 0.939543 0.342357 0.000000 +vn 0.931028 0.265908 0.249855 +vn 0.964080 0.265542 0.000000 +vn 0.954558 0.152104 0.256172 +vn 0.988372 0.151891 0.000000 +vn 0.964782 -0.045717 0.258980 +vn 0.998932 -0.045656 0.000000 +vn 0.785638 0.419416 0.454756 +vn 0.796075 0.392285 0.460799 +vn 0.812830 0.343333 0.470504 +vn 0.834162 0.266366 0.482864 +vn 0.855312 0.152409 0.495132 +vn 0.864498 -0.045808 0.500504 +vn 0.641804 0.419691 0.641804 +vn 0.650349 0.392529 0.650349 +vn 0.664052 0.343577 0.664052 +vn 0.681509 0.266579 0.681509 +vn 0.698813 0.152501 0.698813 +vn 0.706351 -0.045869 0.706351 +vn 0.454756 0.419416 0.785638 +vn 0.460799 0.392285 0.796075 +vn 0.470504 0.343333 0.812830 +vn 0.482864 0.266396 0.834162 +vn 0.495132 0.152409 0.855312 +vn 0.500504 -0.045808 0.864498 +vn 0.235298 0.418744 0.877041 +vn 0.238441 0.391644 0.888668 +vn 0.243446 0.342753 0.907315 +vn 0.249825 0.265908 0.931028 +vn 0.256172 0.152135 0.954558 +vn 0.258980 -0.045717 0.964782 +vn 0.000000 0.418256 0.908292 +vn 0.000000 0.391156 0.920286 +vn 0.000000 0.342357 0.939543 +vn 0.000000 0.265572 0.964080 +vn 0.000000 0.151921 0.988372 +vn 0.000000 -0.045656 0.998932 +vn -0.235298 0.418744 0.877041 +vn -0.238441 0.391644 0.888668 +vn -0.243446 0.342753 0.907315 +vn -0.249825 0.265908 0.931028 +vn -0.256172 0.152135 0.954558 +vn -0.258980 -0.045717 0.964782 +vn -0.454756 0.419416 0.785638 +vn -0.460799 0.392285 0.796075 +vn -0.470504 0.343333 0.812830 +vn -0.482864 0.266396 0.834162 +vn -0.495132 0.152409 0.855312 +vn -0.500504 -0.045808 0.864498 +vn -0.641804 0.419691 0.641804 +vn -0.650349 0.392529 0.650349 +vn -0.664052 0.343577 0.664052 +vn -0.681509 0.266579 0.681509 +vn -0.698813 0.152501 0.698813 +vn -0.706351 -0.045869 0.706351 +vn -0.785638 0.419416 0.454756 +vn -0.796075 0.392285 0.460799 +vn -0.812830 0.343333 0.470504 +vn -0.834162 0.266366 0.482864 +vn -0.855312 0.152409 0.495132 +vn -0.864498 -0.045808 0.500504 +vn -0.877041 0.418744 0.235298 +vn -0.888668 0.391644 0.238441 +vn -0.907315 0.342753 0.243446 +vn -0.931028 0.265908 0.249825 +vn -0.954558 0.152104 0.256172 +vn -0.964782 -0.045717 0.258980 +vn -0.908292 0.418256 0.000000 +vn -0.920286 0.391156 0.000000 +vn -0.939543 0.342357 0.000000 +vn -0.964080 0.265542 0.000000 +vn -0.988372 0.151891 0.000000 +vn -0.998932 -0.045656 0.000000 +vn -0.877041 0.418744 -0.235298 +vn -0.888668 0.391644 -0.238441 +vn -0.907315 0.342753 -0.243446 +vn -0.931028 0.265877 -0.249855 +vn -0.954558 0.152104 -0.256172 +vn -0.964782 -0.045717 -0.258980 +vn -0.785638 0.419416 -0.454756 +vn -0.796075 0.392285 -0.460799 +vn -0.812830 0.343333 -0.470504 +vn -0.834162 0.266366 -0.482864 +vn -0.855312 0.152379 -0.495132 +vn -0.864498 -0.045808 -0.500504 +vn -0.641804 0.419691 -0.641804 +vn -0.650349 0.392529 -0.650349 +vn -0.664052 0.343547 -0.664052 +vn -0.681509 0.266549 -0.681509 +vn -0.698813 0.152470 -0.698813 +vn -0.706351 -0.045869 -0.706351 +vn -0.454756 0.419416 -0.785638 +vn -0.460768 0.392285 -0.796075 +vn -0.470504 0.343333 -0.812830 +vn -0.482864 0.266366 -0.834162 +vn -0.495132 0.152379 -0.855312 +vn -0.500504 -0.045808 -0.864498 +vn -0.235298 0.418744 -0.877041 +vn -0.238441 0.391644 -0.888668 +vn -0.243446 0.342753 -0.907315 +vn -0.249855 0.265877 -0.931059 +vn -0.256172 0.152074 -0.954558 +vn -0.258980 -0.045717 -0.964782 +vn 0.000000 0.418256 -0.908292 +vn 0.000000 0.391156 -0.920286 +vn 0.000000 0.342357 -0.939543 +vn 0.000000 0.265511 -0.964080 +vn 0.000000 0.151891 -0.988372 +vn 0.000000 -0.045656 -0.998932 +vn 0.235298 0.418744 -0.877041 +vn 0.238441 0.391644 -0.888668 +vn 0.243446 0.342753 -0.907315 +vn 0.249855 0.265877 -0.931059 +vn 0.256172 0.152074 -0.954558 +vn 0.258980 -0.045717 -0.964782 +vn 0.454756 0.419416 -0.785638 +vn 0.460768 0.392285 -0.796075 +vn 0.470504 0.343333 -0.812830 +vn 0.482864 0.266366 -0.834162 +vn 0.495132 0.152379 -0.855312 +vn 0.500504 -0.045808 -0.864498 +vn 0.641804 0.419691 -0.641804 +vn 0.650349 0.392529 -0.650349 +vn 0.664052 0.343547 -0.664052 +vn 0.681509 0.266549 -0.681509 +vn 0.698813 0.152470 -0.698813 +vn 0.706351 -0.045869 -0.706351 +vn 0.785638 0.419416 -0.454756 +vn 0.796075 0.392285 -0.460799 +vn 0.812830 0.343333 -0.470504 +vn 0.834162 0.266366 -0.482864 +vn 0.855312 0.152379 -0.495132 +vn 0.864498 -0.045808 -0.500504 +vn 0.877041 0.418744 -0.235298 +vn 0.888668 0.391644 -0.238441 +vn 0.907315 0.342753 -0.243446 +vn 0.931028 0.265908 -0.249825 +vn 0.954558 0.152104 -0.256172 +vn 0.964782 -0.045717 -0.258980 +vn 0.912839 -0.326609 0.245003 +vn 0.945250 -0.326273 0.000000 +vn 0.795892 -0.566485 0.213538 +vn 0.824396 -0.565996 0.000000 +vn 0.687399 -0.702445 0.184393 +vn 0.712180 -0.701987 0.000000 +vn 0.630146 -0.757805 0.169012 +vn 0.652974 -0.757347 0.000000 +vn 0.698752 -0.690329 0.187445 +vn 0.724021 -0.689749 0.000000 +vn 0.855861 -0.463454 0.229530 +vn 0.886380 -0.462905 0.000000 +vn 0.817774 -0.327158 0.473434 +vn 0.712729 -0.567248 0.412549 +vn 0.615375 -0.703146 0.356151 +vn 0.564043 -0.758446 0.326456 +vn 0.625660 -0.690939 0.362102 +vn 0.766625 -0.464125 0.443678 +vn 0.668111 -0.327403 0.668111 +vn 0.582171 -0.567522 0.582171 +vn 0.502579 -0.703421 0.502579 +vn 0.460646 -0.758660 0.460646 +vn 0.510971 -0.691183 0.510971 +vn 0.626209 -0.464370 0.626209 +vn 0.473434 -0.327158 0.817774 +vn 0.412549 -0.567248 0.712729 +vn 0.356151 -0.703146 0.615375 +vn 0.326456 -0.758446 0.564043 +vn 0.362102 -0.690939 0.625660 +vn 0.443678 -0.464125 0.766625 +vn 0.245003 -0.326609 0.912839 +vn 0.213538 -0.566485 0.795892 +vn 0.184393 -0.702445 0.687399 +vn 0.169012 -0.757805 0.630146 +vn 0.187414 -0.690329 0.698752 +vn 0.229530 -0.463454 0.855831 +vn 0.000000 -0.326273 0.945250 +vn 0.000000 -0.565996 0.824396 +vn 0.000000 -0.701987 0.712180 +vn 0.000000 -0.757347 0.652974 +vn 0.000000 -0.689749 0.724021 +vn 0.000000 -0.462905 0.886380 +vn -0.245003 -0.326609 0.912839 +vn -0.213538 -0.566485 0.795892 +vn -0.184393 -0.702445 0.687399 +vn -0.169012 -0.757805 0.630146 +vn -0.187414 -0.690329 0.698752 +vn -0.229530 -0.463454 0.855831 +vn -0.473434 -0.327158 0.817774 +vn -0.412549 -0.567248 0.712729 +vn -0.356151 -0.703146 0.615375 +vn -0.326456 -0.758446 0.564043 +vn -0.362102 -0.690939 0.625660 +vn -0.443678 -0.464125 0.766625 +vn -0.668111 -0.327403 0.668111 +vn -0.582171 -0.567522 0.582171 +vn -0.502579 -0.703421 0.502579 +vn -0.460646 -0.758660 0.460646 +vn -0.510971 -0.691183 0.510971 +vn -0.626209 -0.464370 0.626209 +vn -0.817774 -0.327158 0.473434 +vn -0.712729 -0.567248 0.412549 +vn -0.615375 -0.703146 0.356151 +vn -0.564043 -0.758446 0.326456 +vn -0.625660 -0.690939 0.362102 +vn -0.766625 -0.464125 0.443678 +vn -0.912839 -0.326609 0.245003 +vn -0.795892 -0.566485 0.213538 +vn -0.687399 -0.702445 0.184393 +vn -0.630146 -0.757805 0.169012 +vn -0.698752 -0.690329 0.187445 +vn -0.855861 -0.463454 0.229530 +vn -0.945250 -0.326273 0.000000 +vn -0.824396 -0.565996 0.000000 +vn -0.712180 -0.701987 0.000000 +vn -0.652974 -0.757347 0.000000 +vn -0.724021 -0.689749 0.000000 +vn -0.886380 -0.462905 0.000000 +vn -0.912839 -0.326609 -0.245003 +vn -0.795892 -0.566485 -0.213538 +vn -0.687399 -0.702445 -0.184393 +vn -0.630146 -0.757805 -0.169012 +vn -0.698752 -0.690329 -0.187414 +vn -0.855831 -0.463454 -0.229530 +vn -0.817774 -0.327158 -0.473434 +vn -0.712729 -0.567248 -0.412549 +vn -0.615375 -0.703146 -0.356151 +vn -0.564043 -0.758446 -0.326456 +vn -0.625660 -0.690939 -0.362102 +vn -0.766625 -0.464125 -0.443678 +vn -0.668111 -0.327403 -0.668111 +vn -0.582171 -0.567522 -0.582171 +vn -0.502579 -0.703421 -0.502579 +vn -0.460646 -0.758660 -0.460646 +vn -0.510971 -0.691183 -0.510971 +vn -0.626209 -0.464370 -0.626209 +vn -0.473434 -0.327158 -0.817774 +vn -0.412549 -0.567248 -0.712729 +vn -0.356151 -0.703146 -0.615375 +vn -0.326456 -0.758446 -0.564043 +vn -0.362102 -0.690939 -0.625660 +vn -0.443678 -0.464125 -0.766625 +vn -0.245003 -0.326609 -0.912839 +vn -0.213538 -0.566485 -0.795892 +vn -0.184393 -0.702445 -0.687399 +vn -0.169012 -0.757805 -0.630146 +vn -0.187414 -0.690329 -0.698752 +vn -0.229530 -0.463454 -0.855831 +vn 0.000000 -0.326273 -0.945250 +vn 0.000000 -0.565996 -0.824396 +vn 0.000000 -0.701987 -0.712149 +vn 0.000000 -0.757347 -0.652974 +vn 0.000000 -0.689749 -0.724021 +vn 0.000000 -0.462905 -0.886380 +vn 0.245003 -0.326609 -0.912839 +vn 0.213538 -0.566485 -0.795892 +vn 0.184393 -0.702445 -0.687399 +vn 0.169012 -0.757805 -0.630146 +vn 0.187414 -0.690329 -0.698752 +vn 0.229530 -0.463454 -0.855831 +vn 0.473434 -0.327158 -0.817774 +vn 0.412549 -0.567248 -0.712729 +vn 0.356151 -0.703146 -0.615375 +vn 0.326456 -0.758446 -0.564043 +vn 0.362102 -0.690939 -0.625660 +vn 0.443678 -0.464125 -0.766625 +vn 0.668111 -0.327403 -0.668111 +vn 0.582171 -0.567522 -0.582171 +vn 0.502579 -0.703421 -0.502579 +vn 0.460646 -0.758660 -0.460646 +vn 0.510971 -0.691183 -0.510971 +vn 0.626209 -0.464370 -0.626209 +vn 0.817774 -0.327158 -0.473434 +vn 0.712729 -0.567248 -0.412549 +vn 0.615375 -0.703146 -0.356151 +vn 0.564043 -0.758446 -0.326456 +vn 0.625660 -0.690939 -0.362102 +vn 0.766625 -0.464125 -0.443678 +vn 0.912839 -0.326609 -0.245003 +vn 0.795892 -0.566485 -0.213538 +vn 0.687399 -0.702445 -0.184393 +vn 0.630146 -0.757805 -0.169012 +vn 0.698752 -0.690329 -0.187414 +vn 0.855831 -0.463454 -0.229530 +vn 0.068667 -0.997620 0.000000 +vn 0.066256 -0.997620 -0.017731 +vn 0.157170 -0.987548 0.000000 +vn 0.151677 -0.987579 -0.040620 +vn 0.373150 -0.927763 0.000000 +vn 0.360149 -0.927885 -0.096469 +vn 0.789148 -0.614154 0.000000 +vn 0.762017 -0.614399 -0.204474 +vn 0.059236 -0.997650 -0.034242 +vn 0.135624 -0.987640 -0.078463 +vn 0.322153 -0.928129 -0.186346 +vn 0.682333 -0.615131 -0.394971 +vn 0.048341 -0.997650 -0.048341 +vn 0.110691 -0.987640 -0.110691 +vn 0.262947 -0.928251 -0.262947 +vn 0.557329 -0.615375 -0.557329 +vn 0.034272 -0.997650 -0.059236 +vn 0.078463 -0.987640 -0.135624 +vn 0.186377 -0.928129 -0.322153 +vn 0.394971 -0.615131 -0.682333 +vn 0.017731 -0.997620 -0.066256 +vn 0.040620 -0.987579 -0.151677 +vn 0.096469 -0.927885 -0.360118 +vn 0.204505 -0.614399 -0.762017 +vn 0.000000 -0.997620 -0.068667 +vn 0.000000 -0.987548 -0.157170 +vn 0.000000 -0.927763 -0.373150 +vn 0.000000 -0.614154 -0.789148 +vn -0.017731 -0.997620 -0.066256 +vn -0.040620 -0.987579 -0.151677 +vn -0.096469 -0.927885 -0.360118 +vn -0.204505 -0.614399 -0.762017 +vn -0.034272 -0.997650 -0.059236 +vn -0.078463 -0.987640 -0.135624 +vn -0.186377 -0.928129 -0.322153 +vn -0.394971 -0.615131 -0.682333 +vn -0.048341 -0.997650 -0.048341 +vn -0.110691 -0.987640 -0.110691 +vn -0.262947 -0.928251 -0.262947 +vn -0.557329 -0.615375 -0.557329 +vn -0.059236 -0.997650 -0.034242 +vn -0.135624 -0.987640 -0.078463 +vn -0.322153 -0.928129 -0.186346 +vn -0.682333 -0.615131 -0.394971 +vn -0.066256 -0.997620 -0.017731 +vn -0.151677 -0.987579 -0.040620 +vn -0.360149 -0.927885 -0.096469 +vn -0.762017 -0.614399 -0.204474 +vn -0.068667 -0.997620 0.000000 +vn -0.157170 -0.987548 0.000000 +vn -0.373150 -0.927763 0.000000 +vn -0.789148 -0.614154 0.000000 +vn -0.066256 -0.997620 0.017731 +vn -0.151677 -0.987579 0.040620 +vn -0.360118 -0.927885 0.096469 +vn -0.762017 -0.614399 0.204505 +vn -0.059236 -0.997650 0.034272 +vn -0.135624 -0.987640 0.078463 +vn -0.322153 -0.928129 0.186377 +vn -0.682333 -0.615131 0.394971 +vn -0.048341 -0.997650 0.048341 +vn -0.110691 -0.987640 0.110691 +vn -0.262947 -0.928251 0.262947 +vn -0.557329 -0.615375 0.557329 +vn -0.034272 -0.997650 0.059236 +vn -0.078463 -0.987640 0.135624 +vn -0.186377 -0.928129 0.322153 +vn -0.394971 -0.615131 0.682333 +vn -0.017731 -0.997620 0.066256 +vn -0.040620 -0.987579 0.151677 +vn -0.096469 -0.927885 0.360149 +vn -0.204474 -0.614399 0.762017 +vn 0.000000 -0.997620 0.068667 +vn 0.000000 -0.987548 0.157170 +vn 0.000000 -0.927763 0.373150 +vn 0.000000 -0.614154 0.789148 +vn 0.017731 -0.997620 0.066256 +vn 0.040620 -0.987579 0.151677 +vn 0.096469 -0.927885 0.360149 +vn 0.204474 -0.614399 0.762017 +vn 0.034272 -0.997650 0.059236 +vn 0.078463 -0.987640 0.135624 +vn 0.186377 -0.928129 0.322153 +vn 0.394971 -0.615131 0.682333 +vn 0.048341 -0.997650 0.048341 +vn 0.110691 -0.987640 0.110691 +vn 0.262947 -0.928251 0.262947 +vn 0.557329 -0.615375 0.557329 +vn 0.059236 -0.997650 0.034272 +vn 0.135624 -0.987640 0.078463 +vn 0.322153 -0.928129 0.186377 +vn 0.682333 -0.615101 0.394971 +vn 0.066256 -0.997620 0.017731 +vn 0.151677 -0.987579 0.040620 +vn 0.360118 -0.927885 0.096469 +vn 0.762017 -0.614399 0.204505 +vn 0.692129 0.697470 0.185583 +vn 0.717063 0.696982 0.000000 +vn 0.915586 0.318766 0.245064 +vn 0.947905 0.318522 0.000000 +vn 0.620045 0.697653 0.358837 +vn 0.820429 0.318979 0.474410 +vn 0.506546 0.697684 0.506546 +vn 0.670125 0.319041 0.670125 +vn 0.358837 0.697653 0.620045 +vn 0.474410 0.318979 0.820429 +vn 0.185583 0.697470 0.692129 +vn 0.245064 0.318766 0.915586 +vn 0.000000 0.696982 0.717063 +vn 0.000000 0.318522 0.947905 +vn -0.185583 0.697470 0.692129 +vn -0.245064 0.318766 0.915586 +vn -0.358837 0.697653 0.620045 +vn -0.474410 0.318979 0.820429 +vn -0.506546 0.697684 0.506546 +vn -0.670125 0.319041 0.670125 +vn -0.620045 0.697653 0.358837 +vn -0.820429 0.318979 0.474410 +vn -0.692129 0.697470 0.185583 +vn -0.915586 0.318766 0.245064 +vn -0.717063 0.696982 0.000000 +vn -0.947905 0.318522 0.000000 +vn -0.692129 0.697470 -0.185583 +vn -0.915586 0.318766 -0.245064 +vn -0.620045 0.697653 -0.358837 +vn -0.820429 0.318979 -0.474410 +vn -0.506546 0.697684 -0.506546 +vn -0.670125 0.319041 -0.670125 +vn -0.358837 0.697653 -0.620045 +vn -0.474410 0.318979 -0.820429 +vn -0.185583 0.697470 -0.692129 +vn -0.245064 0.318766 -0.915586 +vn 0.000000 0.696982 -0.717063 +vn 0.000000 0.318522 -0.947905 +vn 0.185583 0.697470 -0.692129 +vn 0.245064 0.318766 -0.915586 +vn 0.358837 0.697653 -0.620045 +vn 0.474410 0.318979 -0.820429 +vn 0.506546 0.697684 -0.506546 +vn 0.670125 0.319041 -0.670125 +vn 0.620045 0.697653 -0.358837 +vn 0.820429 0.318979 -0.474410 +vn 0.692129 0.697470 -0.185583 +vn 0.915586 0.318766 -0.245064 +vn 0.282083 0.956389 0.075686 +vn 0.292520 0.956236 0.000000 +vn 0.171606 0.984069 0.046022 +vn 0.177953 0.984008 0.000000 +vn 0.153264 0.987304 0.041078 +vn 0.158879 0.987274 0.000000 +vn 0.210059 0.976043 0.056276 +vn 0.217719 0.975982 0.000000 +vn 0.487197 0.863460 0.130558 +vn 0.504715 0.863277 0.000000 +vn 0.662801 0.727226 0.178198 +vn 0.686911 0.726707 0.000000 +vn 0.252388 0.956511 0.146092 +vn 0.153508 0.984130 0.088839 +vn 0.137059 0.987365 0.079318 +vn 0.187872 0.976135 0.108676 +vn 0.435926 0.863887 0.252205 +vn 0.593310 0.727866 0.343730 +vn 0.206091 0.956572 0.206091 +vn 0.125340 0.984161 0.125340 +vn 0.111911 0.987396 0.111911 +vn 0.153356 0.976196 0.153356 +vn 0.355907 0.864071 0.355907 +vn 0.484664 0.728111 0.484664 +vn 0.146092 0.956511 0.252388 +vn 0.088839 0.984130 0.153508 +vn 0.079318 0.987365 0.137059 +vn 0.108676 0.976135 0.187872 +vn 0.252205 0.863887 0.435926 +vn 0.343730 0.727866 0.593310 +vn 0.075686 0.956389 0.282083 +vn 0.046022 0.984069 0.171606 +vn 0.041078 0.987304 0.153264 +vn 0.056276 0.976043 0.210059 +vn 0.130558 0.863460 0.487197 +vn 0.178198 0.727226 0.662801 +vn 0.000000 0.956236 0.292520 +vn 0.000000 0.984008 0.177953 +vn 0.000000 0.987274 0.158879 +vn 0.000000 0.975982 0.217719 +vn 0.000000 0.863277 0.504715 +vn 0.000000 0.726707 0.686911 +vn -0.075686 0.956389 0.282083 +vn -0.046022 0.984069 0.171606 +vn -0.041078 0.987304 0.153264 +vn -0.056276 0.976043 0.210059 +vn -0.130558 0.863460 0.487197 +vn -0.178198 0.727226 0.662801 +vn -0.146092 0.956511 0.252388 +vn -0.088839 0.984130 0.153508 +vn -0.079318 0.987365 0.137059 +vn -0.108676 0.976135 0.187872 +vn -0.252205 0.863887 0.435926 +vn -0.343730 0.727866 0.593310 +vn -0.206091 0.956572 0.206091 +vn -0.125340 0.984161 0.125340 +vn -0.111911 0.987396 0.111911 +vn -0.153356 0.976196 0.153356 +vn -0.355907 0.864071 0.355907 +vn -0.484664 0.728111 0.484664 +vn -0.252388 0.956511 0.146092 +vn -0.153508 0.984130 0.088839 +vn -0.137059 0.987365 0.079318 +vn -0.187872 0.976135 0.108676 +vn -0.435926 0.863887 0.252205 +vn -0.593310 0.727866 0.343730 +vn -0.282083 0.956389 0.075686 +vn -0.171606 0.984069 0.046022 +vn -0.153264 0.987304 0.041078 +vn -0.210059 0.976043 0.056276 +vn -0.487197 0.863460 0.130558 +vn -0.662801 0.727226 0.178198 +vn -0.292520 0.956236 0.000000 +vn -0.177953 0.984008 0.000000 +vn -0.158879 0.987274 0.000000 +vn -0.217719 0.975982 0.000000 +vn -0.504715 0.863277 0.000000 +vn -0.686911 0.726707 0.000000 +vn -0.282083 0.956389 -0.075686 +vn -0.171606 0.984069 -0.046022 +vn -0.153264 0.987304 -0.041078 +vn -0.210059 0.976043 -0.056276 +vn -0.487197 0.863460 -0.130558 +vn -0.662801 0.727226 -0.178198 +vn -0.252388 0.956511 -0.146092 +vn -0.153508 0.984130 -0.088839 +vn -0.137059 0.987365 -0.079318 +vn -0.187872 0.976135 -0.108676 +vn -0.435926 0.863887 -0.252205 +vn -0.593310 0.727866 -0.343730 +vn -0.206091 0.956572 -0.206091 +vn -0.125340 0.984161 -0.125340 +vn -0.111911 0.987396 -0.111911 +vn -0.153356 0.976196 -0.153356 +vn -0.355907 0.864071 -0.355907 +vn -0.484664 0.728111 -0.484664 +vn -0.146092 0.956511 -0.252388 +vn -0.088839 0.984130 -0.153508 +vn -0.079318 0.987365 -0.137059 +vn -0.108676 0.976135 -0.187872 +vn -0.252205 0.863887 -0.435926 +vn -0.343730 0.727866 -0.593310 +vn -0.075686 0.956389 -0.282083 +vn -0.046022 0.984069 -0.171606 +vn -0.041078 0.987304 -0.153264 +vn -0.056276 0.976043 -0.210059 +vn -0.130558 0.863460 -0.487197 +vn -0.178198 0.727226 -0.662801 +vn 0.000000 0.956236 -0.292520 +vn 0.000000 0.984008 -0.177953 +vn 0.000000 0.987274 -0.158879 +vn 0.000000 0.975982 -0.217719 +vn 0.000000 0.863277 -0.504715 +vn 0.000000 0.726707 -0.686911 +vn 0.075686 0.956389 -0.282083 +vn 0.046022 0.984069 -0.171606 +vn 0.041078 0.987304 -0.153264 +vn 0.056276 0.976043 -0.210059 +vn 0.130558 0.863460 -0.487197 +vn 0.178198 0.727226 -0.662801 +vn 0.146092 0.956511 -0.252388 +vn 0.088839 0.984130 -0.153508 +vn 0.079318 0.987365 -0.137059 +vn 0.108676 0.976135 -0.187872 +vn 0.252205 0.863887 -0.435926 +vn 0.343730 0.727866 -0.593310 +vn 0.206091 0.956572 -0.206091 +vn 0.125340 0.984161 -0.125340 +vn 0.111911 0.987396 -0.111911 +vn 0.153356 0.976196 -0.153356 +vn 0.355907 0.864071 -0.355907 +vn 0.484664 0.728111 -0.484664 +vn 0.252388 0.956511 -0.146092 +vn 0.153508 0.984130 -0.088839 +vn 0.137059 0.987365 -0.079318 +vn 0.187872 0.976135 -0.108676 +vn 0.435926 0.863887 -0.252205 +vn 0.593310 0.727866 -0.343730 +vn 0.282083 0.956389 -0.075686 +vn 0.171606 0.984069 -0.046022 +vn 0.153264 0.987304 -0.041078 +vn 0.210059 0.976043 -0.056276 +vn 0.487197 0.863460 -0.130558 +vn 0.662801 0.727226 -0.178198 +vn 0.015290 -0.999878 0.000000 +vn 0.003296 -0.999969 0.000000 +vn 0.015168 -0.949339 0.313852 +vn 0.003265 -0.944395 0.328715 +vn 0.058870 -0.998260 0.000000 +vn 0.058046 -0.947630 0.314005 +vn 0.158361 -0.934690 0.318155 +vn 0.159764 -0.987152 0.000000 +vn 0.373943 -0.860958 0.344798 +vn 0.391583 -0.920103 0.000000 +vn 0.726829 -0.553880 0.406049 +vn 0.784570 -0.620014 0.000000 +vn 0.908139 -0.082766 0.410321 +vn 0.994995 -0.099796 0.000000 +vn 0.011902 -0.679403 0.733634 +vn 0.002380 -0.636219 0.771477 +vn 0.046449 -0.674398 0.736869 +vn 0.125980 -0.648946 0.750298 +vn 0.270089 -0.562120 0.781671 +vn 0.460067 -0.316263 0.829615 +vn 0.563036 -0.041200 0.825373 +vn 0.000153 0.004242 0.999969 +vn -0.000519 0.113254 0.993561 +vn 0.003510 0.014008 0.999878 +vn 0.005921 0.035951 0.999329 +vn -0.007813 0.058840 0.998230 +vn -0.046510 0.041536 0.998047 +vn -0.039155 0.003113 0.999207 +vn -0.014161 0.682394 0.730796 +vn -0.003204 0.727744 0.685812 +vn -0.055361 0.680074 0.731010 +vn -0.150029 0.655660 0.739952 +vn -0.322520 0.565203 0.759239 +vn -0.537645 0.315806 0.781762 +vn -0.611530 0.029939 0.790613 +vn -0.020569 0.949400 0.313334 +vn -0.004273 0.954772 0.297281 +vn -0.082705 0.944945 0.316507 +vn -0.229591 0.914548 0.332926 +vn -0.502335 0.785943 0.360454 +vn -0.810633 0.443220 0.382611 +vn -0.921232 0.039705 0.386944 +vn -0.021851 0.999756 0.000000 +vn -0.004517 0.999969 0.000000 +vn -0.087649 0.996124 0.000000 +vn -0.246223 0.969207 0.000000 +vn -0.549211 0.835658 0.000000 +vn -0.881039 0.472976 0.000000 +vn -0.999115 0.041444 0.000000 +vn -0.004273 0.954772 -0.297281 +vn -0.020569 0.949400 -0.313334 +vn -0.082705 0.944945 -0.316507 +vn -0.229591 0.914548 -0.332926 +vn -0.502335 0.785943 -0.360454 +vn -0.810633 0.443220 -0.382611 +vn -0.921232 0.039705 -0.386944 +vn -0.003204 0.727744 -0.685812 +vn -0.014161 0.682394 -0.730796 +vn -0.055361 0.680074 -0.731010 +vn -0.150029 0.655660 -0.739952 +vn -0.322520 0.565203 -0.759239 +vn -0.537645 0.315806 -0.781762 +vn -0.611530 0.029939 -0.790613 +vn -0.000519 0.113254 -0.993561 +vn 0.000153 0.004242 -0.999969 +vn 0.003510 0.014008 -0.999878 +vn 0.005921 0.035951 -0.999329 +vn -0.007813 0.058809 -0.998230 +vn -0.046510 0.041536 -0.998047 +vn -0.039155 0.003113 -0.999207 +vn 0.002380 -0.636219 -0.771477 +vn 0.011902 -0.679403 -0.733634 +vn 0.046449 -0.674398 -0.736869 +vn 0.125980 -0.648946 -0.750298 +vn 0.270089 -0.562151 -0.781671 +vn 0.460067 -0.316263 -0.829615 +vn 0.563036 -0.041231 -0.825373 +vn 0.003265 -0.944395 -0.328715 +vn 0.015168 -0.949339 -0.313852 +vn 0.058046 -0.947630 -0.314005 +vn 0.158361 -0.934690 -0.318155 +vn 0.373943 -0.860958 -0.344798 +vn 0.726829 -0.553880 -0.406049 +vn 0.908139 -0.082766 -0.410321 +vn 0.890500 0.214759 0.401044 +vn 0.972930 0.231025 0.000000 +vn 0.836634 0.384075 0.390515 +vn 0.912503 0.408979 0.000000 +vn 0.765191 0.530198 0.365123 +vn 0.828791 0.559496 0.000000 +vn 0.671041 0.663228 0.331339 +vn 0.718955 0.695029 0.000000 +vn 0.549455 0.776238 0.309000 +vn 0.580859 0.813990 0.000000 +vn 0.461165 0.821528 0.335215 +vn 0.497085 0.867672 0.000000 +vn 0.559679 0.139714 0.816828 +vn 0.528581 0.255501 0.809473 +vn 0.494888 0.359783 0.790948 +vn 0.445143 0.467879 0.763451 +vn 0.376049 0.559984 0.738212 +vn 0.287332 0.527940 0.799188 +vn -0.024537 -0.005737 0.999664 +vn -0.020844 -0.012207 0.999695 +vn -0.014466 -0.014466 0.999786 +vn -0.009796 -0.013276 0.999847 +vn -0.014771 -0.013886 0.999786 +vn -0.101779 -0.196661 0.975158 +vn -0.585437 -0.154668 0.795801 +vn -0.538499 -0.291696 0.790490 +vn -0.487228 -0.408918 0.771599 +vn -0.428327 -0.511948 0.744560 +vn -0.360820 -0.584735 0.726524 +vn -0.357311 -0.691549 0.627735 +vn -0.889126 -0.238868 0.390332 +vn -0.807001 -0.448500 0.384075 +vn -0.700980 -0.613392 0.363750 +vn -0.590442 -0.733757 0.336009 +vn -0.486190 -0.814966 0.315256 +vn -0.440138 -0.855586 0.272439 +vn -0.965453 -0.260506 0.000000 +vn -0.872097 -0.489273 0.000000 +vn -0.748253 -0.663381 0.000000 +vn -0.621784 -0.783166 0.000000 +vn -0.507614 -0.861568 0.000000 +vn -0.456954 -0.889462 0.000000 +vn -0.889126 -0.238868 -0.390332 +vn -0.807001 -0.448531 -0.384075 +vn -0.700980 -0.613392 -0.363750 +vn -0.590442 -0.733757 -0.336009 +vn -0.486190 -0.814966 -0.315256 +vn -0.440138 -0.855586 -0.272439 +vn -0.585437 -0.154668 -0.795801 +vn -0.538499 -0.291696 -0.790490 +vn -0.487228 -0.408918 -0.771599 +vn -0.428327 -0.511948 -0.744560 +vn -0.360820 -0.584735 -0.726524 +vn -0.357311 -0.691549 -0.627705 +vn -0.024537 -0.005737 -0.999664 +vn -0.020844 -0.012238 -0.999695 +vn -0.014466 -0.014466 -0.999786 +vn -0.009766 -0.013276 -0.999847 +vn -0.014771 -0.013916 -0.999786 +vn -0.101779 -0.196661 -0.975158 +vn 0.559679 0.139714 -0.816828 +vn 0.528581 0.255501 -0.809473 +vn 0.494888 0.359783 -0.790948 +vn 0.445143 0.467879 -0.763451 +vn 0.376049 0.559984 -0.738212 +vn 0.287332 0.527940 -0.799188 +vn 0.890500 0.214759 -0.401044 +vn 0.836634 0.384075 -0.390515 +vn 0.765191 0.530198 -0.365123 +vn 0.671041 0.663228 -0.331339 +vn 0.549455 0.776238 -0.309000 +vn 0.461165 0.821528 -0.335215 +vn -0.149937 0.988678 0.000000 +vn -0.137028 0.872402 0.469131 +vn -0.297769 0.840358 0.452895 +vn -0.350505 0.936552 0.000000 +vn -0.617512 0.663961 0.421613 +vn -0.715506 0.698569 0.000000 +vn -0.801324 0.450209 0.393872 +vn -0.900845 0.434065 0.000000 +vn -0.828028 0.379803 0.412397 +vn -0.929289 0.369274 0.000000 +vn -0.729179 0.503464 0.463393 +vn -0.857875 0.513810 0.000000 +vn -0.663076 0.748527 0.000000 +vn -0.531449 0.686514 0.496170 +vn -0.066713 0.491440 0.868313 +vn -0.117893 0.503159 0.856105 +vn -0.254341 0.474349 0.842769 +vn -0.411115 0.399182 0.819483 +vn -0.459395 0.346446 0.817835 +vn -0.385876 0.395734 0.833338 +vn -0.270669 0.487838 0.829890 +vn 0.062716 -0.043458 0.997070 +vn 0.135929 -0.002472 0.990692 +vn 0.247963 0.095187 0.964049 +vn 0.209296 0.170660 0.962828 +vn 0.096194 0.178625 0.979186 +vn 0.009552 0.154332 0.987945 +vn -0.000122 0.151952 0.988372 +vn 0.202582 -0.542894 0.814966 +vn 0.360088 -0.479232 0.800378 +vn 0.611988 -0.282235 0.738762 +vn 0.679220 -0.106754 0.726096 +vn 0.583911 -0.078524 0.807978 +vn 0.402722 -0.205237 0.891995 +vn 0.279519 -0.338694 0.898404 +vn 0.294107 -0.855037 0.427015 +vn 0.488418 -0.768700 0.412915 +vn 0.784570 -0.501511 0.364544 +vn 0.893918 -0.279611 0.350291 +vn 0.861415 -0.285287 0.420179 +vn 0.679373 -0.540422 0.496323 +vn 0.458357 -0.754540 0.469588 +vn 0.320780 -0.947142 0.000000 +vn 0.525101 -0.851009 0.000000 +vn 0.827570 -0.561327 0.000000 +vn 0.943419 -0.331523 0.000000 +vn 0.933561 -0.358409 0.000000 +vn 0.756340 -0.654134 0.000000 +vn 0.491928 -0.870602 0.000092 +vn 0.294107 -0.855037 -0.427015 +vn 0.488418 -0.768700 -0.412915 +vn 0.784570 -0.501511 -0.364544 +vn 0.893918 -0.279611 -0.350291 +vn 0.861385 -0.285287 -0.420179 +vn 0.679373 -0.540422 -0.496323 +vn 0.457839 -0.755608 -0.468368 +vn 0.202582 -0.542894 -0.814966 +vn 0.360088 -0.479232 -0.800378 +vn 0.611988 -0.282235 -0.738762 +vn 0.679220 -0.106754 -0.726096 +vn 0.583911 -0.078524 -0.807978 +vn 0.402722 -0.205237 -0.891995 +vn 0.279153 -0.342235 -0.897153 +vn 0.062716 -0.043458 -0.997070 +vn 0.135929 -0.002472 -0.990692 +vn 0.247963 0.095187 -0.964049 +vn 0.209296 0.170629 -0.962828 +vn 0.096194 0.178625 -0.979186 +vn 0.009552 0.154332 -0.987945 +vn -0.000458 0.149358 -0.988769 +vn -0.066713 0.491440 -0.868313 +vn -0.117893 0.503159 -0.856105 +vn -0.254341 0.474319 -0.842769 +vn -0.411115 0.399182 -0.819514 +vn -0.459395 0.346446 -0.817835 +vn -0.385876 0.395734 -0.833338 +vn -0.271035 0.487136 -0.830164 +vn -0.137028 0.872402 -0.469131 +vn -0.297769 0.840358 -0.452895 +vn -0.617512 0.663961 -0.421613 +vn -0.801324 0.450209 -0.393872 +vn -0.828028 0.379803 -0.412397 +vn -0.729209 0.503464 -0.463393 +vn -0.531541 0.686453 -0.496200 +vn -0.480697 0.876858 0.000000 +vn -0.394635 0.815363 0.423536 +vn -0.320750 0.947142 0.000092 +vn -0.255287 0.921964 0.291086 +vn 0.002686 0.999969 -0.000732 +vn -0.007172 0.999939 -0.007599 +vn 0.366832 0.704398 -0.607624 +vn 0.853236 0.521226 -0.016388 +vn 0.567492 -0.154088 -0.808802 +vn 0.803766 -0.594409 -0.024964 +vn 0.580920 -0.584490 -0.566424 +vn 0.673757 -0.738639 -0.020966 +vn -0.206824 0.638203 0.741539 +vn -0.129490 0.862056 0.489944 +vn -0.034486 0.999023 0.026704 +vn 0.041597 0.871334 -0.488876 +vn 0.103488 0.553880 -0.826136 +vn 0.189642 0.174200 -0.966247 +vn 0.020112 0.322611 0.946287 +vn 0.021943 0.748894 0.662282 +vn -0.025697 0.995392 0.092166 +vn -0.056551 0.931608 -0.358989 +vn -0.070711 0.782006 -0.619190 +vn -0.066408 0.651509 -0.755699 +vn 0.281747 -0.174993 0.943388 +vn 0.303903 0.444136 0.842830 +vn 0.035279 0.983856 0.175329 +vn -0.109928 0.953551 -0.280435 +vn -0.149571 0.847682 -0.508927 +vn -0.145634 0.777520 -0.611744 +vn 0.467238 -0.683218 0.561144 +vn 0.699515 0.004364 0.714560 +vn 0.354900 0.892758 0.277444 +vn -0.174383 0.969054 -0.174596 +vn -0.252998 0.894314 -0.368938 +vn -0.191443 0.807947 -0.557237 +vn 0.495346 -0.868679 0.001587 +vn 0.933897 -0.357311 0.011017 +vn 0.704215 0.709830 0.013337 +vn -0.205634 0.978576 -0.006623 +vn -0.322367 0.945708 -0.041169 +vn -0.314951 0.916288 -0.247322 +vn 0.459120 -0.703757 -0.542100 +vn 0.693655 -0.096530 -0.713767 +vn 0.408673 0.848415 -0.336344 +vn -0.198248 0.963439 0.180151 +vn -0.306833 0.888516 0.341075 +vn -0.335978 0.808863 0.482498 +vn 0.277047 -0.215796 -0.936277 +vn 0.306192 0.349864 -0.885311 +vn 0.056246 0.971099 -0.231819 +vn -0.146733 0.912168 0.382611 +vn -0.202612 0.700797 0.683950 +vn -0.159368 0.444777 0.881314 +vn 0.016907 0.300088 -0.953734 +vn 0.019349 0.701865 -0.712027 +vn -0.023713 0.995361 -0.093081 +vn -0.047395 0.829371 0.556658 +vn -0.015259 0.386608 0.922086 +vn 0.080721 0.001404 0.996704 +vn -0.209967 0.632160 -0.745811 +vn -0.137394 0.849117 -0.509995 +vn -0.023438 0.999695 -0.004883 +vn 0.120426 0.724540 0.678579 +vn 0.260750 0.006531 0.965361 +vn 0.341502 -0.385510 0.857143 +vn -0.395489 0.814814 -0.423841 +vn -0.257942 0.920621 -0.293039 +vn 0.005005 0.999908 0.011628 +vn 0.466628 0.599811 0.649983 +vn 0.621937 -0.400861 0.672628 +vn 0.584826 -0.661397 0.469558 +vn 0.363842 0.931455 0.000000 +vn 0.000000 1.000000 0.000000 +vn 0.351451 0.931516 0.093509 +vn 0.314432 0.931791 0.181280 +vn 0.256386 0.931913 0.256386 +vn 0.181280 0.931791 0.314432 +vn 0.093509 0.931516 0.351451 +vn 0.000000 0.931455 0.363842 +vn -0.093509 0.931516 0.351451 +vn -0.181280 0.931791 0.314432 +vn -0.256386 0.931913 0.256386 +vn -0.314432 0.931791 0.181280 +vn -0.351451 0.931516 0.093509 +vn -0.363842 0.931455 0.000000 +vn -0.351451 0.931516 -0.093509 +vn -0.314432 0.931791 -0.181280 +vn -0.256417 0.931913 -0.256417 +vn -0.181280 0.931791 -0.314432 +vn -0.093509 0.931516 -0.351451 +vn 0.000000 0.931455 -0.363842 +vn 0.093509 0.931516 -0.351451 +vn 0.181280 0.931791 -0.314432 +vn 0.256417 0.931913 -0.256417 +vn 0.314432 0.931791 -0.181280 +vn 0.351451 0.931516 -0.093509 +vn 0.935423 0.249763 0.250160 +vn 0.968261 0.249916 0.000000 +vn 0.813959 -0.538713 0.217322 +vn 0.842860 -0.538102 0.000000 +vn 0.759484 -0.618030 0.202887 +vn 0.786767 -0.617206 0.000000 +vn 0.801569 -0.558184 0.214148 +vn 0.830195 -0.557421 0.000000 +vn 0.838404 0.249825 0.484359 +vn 0.729026 -0.539720 0.420881 +vn 0.680013 -0.619098 0.392712 +vn 0.717765 -0.559343 0.414594 +vn 0.684652 0.249886 0.684652 +vn 0.595050 -0.540147 0.595050 +vn 0.555040 -0.619526 0.555040 +vn 0.585894 -0.559862 0.585894 +vn 0.484359 0.249825 0.838404 +vn 0.420881 -0.539720 0.729026 +vn 0.392712 -0.619098 0.680013 +vn 0.414594 -0.559343 0.717765 +vn 0.250160 0.249763 0.935423 +vn 0.217322 -0.538713 0.813959 +vn 0.202887 -0.618030 0.759514 +vn 0.214148 -0.558184 0.801569 +vn 0.000000 0.249916 0.968261 +vn 0.000000 -0.538102 0.842860 +vn 0.000000 -0.617206 0.786767 +vn 0.000000 -0.557421 0.830195 +vn -0.250160 0.249763 0.935423 +vn -0.217322 -0.538713 0.813959 +vn -0.202887 -0.618030 0.759514 +vn -0.214148 -0.558184 0.801569 +vn -0.484359 0.249825 0.838404 +vn -0.420881 -0.539720 0.729026 +vn -0.392712 -0.619098 0.680013 +vn -0.414594 -0.559343 0.717765 +vn -0.684652 0.249886 0.684652 +vn -0.595050 -0.540147 0.595050 +vn -0.555040 -0.619526 0.555040 +vn -0.585894 -0.559862 0.585894 +vn -0.838404 0.249825 0.484359 +vn -0.729026 -0.539720 0.420881 +vn -0.680013 -0.619098 0.392712 +vn -0.717765 -0.559343 0.414594 +vn -0.935423 0.249763 0.250160 +vn -0.813959 -0.538713 0.217322 +vn -0.759484 -0.618030 0.202887 +vn -0.801569 -0.558184 0.214148 +vn -0.968261 0.249916 0.000000 +vn -0.842860 -0.538102 0.000000 +vn -0.786767 -0.617206 0.000000 +vn -0.830195 -0.557421 0.000000 +vn -0.935423 0.249763 -0.250160 +vn -0.813959 -0.538713 -0.217322 +vn -0.759484 -0.618030 -0.202887 +vn -0.801569 -0.558184 -0.214148 +vn -0.838404 0.249825 -0.484359 +vn -0.729026 -0.539720 -0.420881 +vn -0.680013 -0.619098 -0.392712 +vn -0.717765 -0.559343 -0.414594 +vn -0.684652 0.249886 -0.684652 +vn -0.595050 -0.540147 -0.595050 +vn -0.555040 -0.619526 -0.555040 +vn -0.585864 -0.559862 -0.585894 +vn -0.484359 0.249825 -0.838404 +vn -0.420881 -0.539720 -0.729026 +vn -0.392712 -0.619098 -0.680013 +vn -0.414594 -0.559343 -0.717765 +vn -0.250160 0.249763 -0.935423 +vn -0.217322 -0.538713 -0.813959 +vn -0.202887 -0.618030 -0.759484 +vn -0.214148 -0.558214 -0.801569 +vn 0.000000 0.249916 -0.968261 +vn 0.000000 -0.538102 -0.842860 +vn 0.000000 -0.617206 -0.786767 +vn 0.000000 -0.557421 -0.830195 +vn 0.250160 0.249763 -0.935423 +vn 0.217322 -0.538713 -0.813959 +vn 0.202887 -0.618030 -0.759484 +vn 0.214148 -0.558214 -0.801569 +vn 0.484359 0.249825 -0.838404 +vn 0.420881 -0.539720 -0.729026 +vn 0.392712 -0.619098 -0.680013 +vn 0.414594 -0.559343 -0.717765 +vn 0.684652 0.249886 -0.684652 +vn 0.595050 -0.540147 -0.595050 +vn 0.555040 -0.619526 -0.555040 +vn 0.585864 -0.559862 -0.585894 +vn 0.838404 0.249825 -0.484359 +vn 0.729026 -0.539720 -0.420881 +vn 0.680013 -0.619098 -0.392712 +vn 0.717765 -0.559343 -0.414594 +vn 0.935423 0.249763 -0.250160 +vn 0.813959 -0.538713 -0.217322 +vn 0.759484 -0.618030 -0.202887 +vn 0.801569 -0.558184 -0.214148 +s 1 +f 1//1 2//2 3//3 +f 3//3 2//2 4//4 +f 4//4 2//2 5//5 +f 5//5 2//2 6//6 +f 6//6 2//2 7//7 +f 7//7 2//2 8//8 +f 8//8 2//2 9//9 +f 9//9 2//2 10//10 +f 10//10 2//2 11//11 +f 11//11 2//2 12//12 +f 12//12 2//2 13//13 +f 13//13 2//2 14//14 +f 14//14 2//2 15//15 +f 15//15 2//2 16//16 +f 16//16 2//2 17//17 +f 17//17 2//2 18//18 +f 18//18 2//2 19//19 +f 19//19 2//2 20//20 +f 20//20 2//2 21//21 +f 21//21 2//2 22//22 +f 22//22 2//2 23//23 +f 23//23 2//2 24//24 +f 24//24 2//2 25//25 +f 2//2 1//1 25//25 +f 26//26 27//27 28//28 +f 28//28 29//29 26//26 +f 29//29 28//28 30//30 +f 31//31 30//30 28//28 +f 30//30 31//31 32//32 +f 33//33 32//32 31//31 +f 34//34 35//35 33//33 +f 32//32 33//33 35//35 +f 36//36 37//37 34//34 +f 35//35 34//34 37//37 +f 38//38 39//39 36//36 +f 37//37 36//36 39//39 +f 27//27 40//40 41//41 +f 41//41 28//28 27//27 +f 28//28 41//41 31//31 +f 42//42 31//31 41//41 +f 31//31 42//42 33//33 +f 43//43 33//33 42//42 +f 44//44 34//34 43//43 +f 33//33 43//43 34//34 +f 45//45 36//36 44//44 +f 34//34 44//44 36//36 +f 46//46 38//38 45//45 +f 36//36 45//45 38//38 +f 40//40 47//47 48//48 +f 48//48 41//41 40//40 +f 41//41 48//48 42//42 +f 49//49 42//42 48//48 +f 42//42 49//49 43//43 +f 50//50 43//43 49//49 +f 51//51 44//44 50//50 +f 43//43 50//50 44//44 +f 52//52 45//45 51//51 +f 44//44 51//51 45//45 +f 53//53 46//46 52//52 +f 45//45 52//52 46//46 +f 47//47 54//54 48//48 +f 55//55 48//48 54//54 +f 48//48 55//55 49//49 +f 56//56 49//49 55//55 +f 49//49 56//56 57//57 +f 57//57 50//50 49//49 +f 58//58 51//51 50//50 +f 50//50 57//57 58//58 +f 59//59 52//52 51//51 +f 51//51 58//58 59//59 +f 60//60 53//53 52//52 +f 52//52 59//59 60//60 +f 54//54 61//61 55//55 +f 62//62 55//55 61//61 +f 55//55 62//62 63//63 +f 63//63 56//56 55//55 +f 56//56 63//63 64//64 +f 64//64 57//57 56//56 +f 65//65 58//58 57//57 +f 57//57 64//64 65//65 +f 66//66 59//59 58//58 +f 58//58 65//65 66//66 +f 67//67 60//60 59//59 +f 59//59 66//66 67//67 +f 61//61 68//68 62//62 +f 69//69 62//62 68//68 +f 62//62 69//69 70//70 +f 70//70 63//63 62//62 +f 63//63 70//70 71//71 +f 71//71 64//64 63//63 +f 72//72 65//65 64//64 +f 64//64 71//71 72//72 +f 73//73 66//66 65//65 +f 65//65 72//72 73//73 +f 74//74 67//67 66//66 +f 66//66 73//73 74//74 +f 68//68 75//75 76//76 +f 76//76 69//69 68//68 +f 69//69 76//76 70//70 +f 77//77 70//70 76//76 +f 70//70 77//77 71//71 +f 78//78 71//71 77//77 +f 79//79 72//72 78//78 +f 71//71 78//78 72//72 +f 80//80 73//73 79//79 +f 72//72 79//79 73//73 +f 81//81 74//74 80//80 +f 73//73 80//80 74//74 +f 75//75 82//82 83//83 +f 83//83 76//76 75//75 +f 76//76 83//83 77//77 +f 84//84 77//77 83//83 +f 77//77 84//84 78//78 +f 85//85 78//78 84//84 +f 86//86 79//79 85//85 +f 78//78 85//85 79//79 +f 87//87 80//80 86//86 +f 79//79 86//86 80//80 +f 88//88 81//81 87//87 +f 80//80 87//87 81//81 +f 82//82 89//89 90//90 +f 90//90 83//83 82//82 +f 83//83 90//90 91//91 +f 91//91 84//84 83//83 +f 84//84 91//91 85//85 +f 92//92 85//85 91//91 +f 93//93 86//86 92//92 +f 85//85 92//92 86//86 +f 94//94 87//87 93//93 +f 86//86 93//93 87//87 +f 95//95 88//88 94//94 +f 87//87 94//94 88//88 +f 89//89 96//96 90//90 +f 97//97 90//90 96//96 +f 90//90 97//97 98//98 +f 98//98 91//91 90//90 +f 91//91 98//98 99//99 +f 99//99 92//92 91//91 +f 100//100 93//93 92//92 +f 92//92 99//99 100//100 +f 101//101 94//94 93//93 +f 93//93 100//100 101//101 +f 102//102 95//95 94//94 +f 94//94 101//101 102//102 +f 96//96 103//103 97//97 +f 104//104 97//97 103//103 +f 97//97 104//104 105//105 +f 105//105 98//98 97//97 +f 98//98 105//105 106//106 +f 106//106 99//99 98//98 +f 107//107 100//100 99//99 +f 99//99 106//106 107//107 +f 108//108 101//101 100//100 +f 100//100 107//107 108//108 +f 109//109 102//102 101//101 +f 101//101 108//108 109//109 +f 103//103 110//110 104//104 +f 111//111 104//104 110//110 +f 104//104 111//111 112//112 +f 112//112 105//105 104//104 +f 105//105 112//112 113//113 +f 113//113 106//106 105//105 +f 114//114 107//107 106//106 +f 106//106 113//113 114//114 +f 115//115 108//108 107//107 +f 107//107 114//114 115//115 +f 116//116 109//109 108//108 +f 108//108 115//115 116//116 +f 110//110 117//117 118//118 +f 118//118 111//111 110//110 +f 111//111 118//118 119//119 +f 119//119 112//112 111//111 +f 112//112 119//119 113//113 +f 120//120 113//113 119//119 +f 121//121 114//114 120//120 +f 113//113 120//120 114//114 +f 122//122 115//115 121//121 +f 114//114 121//121 115//115 +f 123//123 116//116 122//122 +f 115//115 122//122 116//116 +f 117//117 124//124 125//125 +f 125//125 118//118 117//117 +f 118//118 125//125 119//119 +f 126//126 119//119 125//125 +f 119//119 126//126 120//120 +f 127//127 120//120 126//126 +f 128//128 121//121 127//127 +f 120//120 127//127 121//121 +f 129//129 122//122 128//128 +f 121//121 128//128 122//122 +f 130//130 123//123 129//129 +f 122//122 129//129 123//123 +f 124//124 131//131 132//132 +f 132//132 125//125 124//124 +f 125//125 132//132 133//133 +f 133//133 126//126 125//125 +f 126//126 133//133 127//127 +f 134//134 127//127 133//133 +f 135//135 128//128 134//134 +f 127//127 134//134 128//128 +f 136//136 129//129 135//135 +f 128//128 135//135 129//129 +f 137//137 130//130 136//136 +f 129//129 136//136 130//130 +f 131//131 138//138 132//132 +f 139//139 132//132 138//138 +f 132//132 139//139 140//140 +f 140//140 133//133 132//132 +f 133//133 140//140 141//141 +f 141//141 134//134 133//133 +f 142//142 135//135 134//134 +f 134//134 141//141 142//142 +f 143//143 136//136 135//135 +f 135//135 142//142 143//143 +f 144//144 137//137 136//136 +f 136//136 143//143 144//144 +f 138//138 145//145 139//139 +f 146//146 139//139 145//145 +f 139//139 146//146 147//147 +f 147//147 140//140 139//139 +f 140//140 147//147 148//148 +f 148//148 141//141 140//140 +f 149//149 142//142 141//141 +f 141//141 148//148 149//149 +f 150//150 143//143 142//142 +f 142//142 149//149 150//150 +f 151//151 144//144 143//143 +f 143//143 150//150 151//151 +f 145//145 152//152 146//146 +f 153//153 146//146 152//152 +f 146//146 153//153 154//154 +f 154//154 147//147 146//146 +f 147//147 154//154 155//155 +f 155//155 148//148 147//147 +f 156//156 149//149 148//148 +f 148//148 155//155 156//156 +f 157//157 150//150 149//149 +f 149//149 156//156 157//157 +f 158//158 151//151 150//150 +f 150//150 157//157 158//158 +f 152//152 159//159 160//160 +f 160//160 153//153 152//152 +f 153//153 160//160 154//154 +f 161//161 154//154 160//160 +f 154//154 161//161 155//155 +f 162//162 155//155 161//161 +f 163//163 156//156 162//162 +f 155//155 162//162 156//156 +f 164//164 157//157 163//163 +f 156//156 163//163 157//157 +f 165//165 158//158 164//164 +f 157//157 164//164 158//158 +f 159//159 166//166 167//167 +f 167//167 160//160 159//159 +f 160//160 167//167 161//161 +f 168//168 161//161 167//167 +f 161//161 168//168 162//162 +f 169//169 162//162 168//168 +f 170//170 163//163 169//169 +f 162//162 169//169 163//163 +f 171//171 164//164 170//170 +f 163//163 170//170 164//164 +f 172//172 165//165 171//171 +f 164//164 171//171 165//165 +f 166//166 173//173 174//174 +f 174//174 167//167 166//166 +f 167//167 174//174 168//168 +f 175//175 168//168 174//174 +f 168//168 175//175 169//169 +f 176//176 169//169 175//175 +f 177//177 170//170 176//176 +f 169//169 176//176 170//170 +f 178//178 171//171 177//177 +f 170//170 177//177 171//171 +f 179//179 172//172 178//178 +f 171//171 178//178 172//172 +f 173//173 180//180 174//174 +f 181//181 174//174 180//180 +f 174//174 181//181 175//175 +f 182//182 175//175 181//181 +f 175//175 182//182 183//183 +f 183//183 176//176 175//175 +f 184//184 177//177 176//176 +f 176//176 183//183 184//184 +f 185//185 178//178 177//177 +f 177//177 184//184 185//185 +f 186//186 179//179 178//178 +f 178//178 185//185 186//186 +f 180//180 187//187 181//181 +f 188//188 181//181 187//187 +f 181//181 188//188 189//189 +f 189//189 182//182 181//181 +f 182//182 189//189 190//190 +f 190//190 183//183 182//182 +f 191//191 184//184 183//183 +f 183//183 190//190 191//191 +f 192//192 185//185 184//184 +f 184//184 191//191 192//192 +f 193//193 186//186 185//185 +f 185//185 192//192 193//193 +f 187//187 26//26 188//188 +f 29//29 188//188 26//26 +f 188//188 29//29 189//189 +f 30//30 189//189 29//29 +f 189//189 30//30 32//32 +f 32//32 190//190 189//189 +f 35//35 191//191 190//190 +f 190//190 32//32 35//35 +f 37//37 192//192 191//191 +f 191//191 35//35 37//37 +f 39//39 193//193 192//192 +f 192//192 37//37 39//39 +f 194//194 195//195 38//38 +f 39//39 38//38 195//195 +f 196//196 197//197 194//194 +f 195//195 194//194 197//197 +f 198//198 199//199 196//196 +f 197//197 196//196 199//199 +f 200//200 201//201 198//198 +f 199//199 198//198 201//201 +f 202//202 203//203 200//200 +f 201//201 200//200 203//203 +f 204//204 205//205 202//202 +f 203//203 202//202 205//205 +f 206//206 194//194 46//46 +f 38//38 46//46 194//194 +f 207//207 196//196 206//206 +f 194//194 206//206 196//196 +f 208//208 198//198 207//207 +f 196//196 207//207 198//198 +f 209//209 200//200 208//208 +f 198//198 208//208 200//200 +f 210//210 202//202 209//209 +f 200//200 209//209 202//202 +f 211//211 204//204 210//210 +f 202//202 210//210 204//204 +f 212//212 206//206 53//53 +f 46//46 53//53 206//206 +f 213//213 207//207 212//212 +f 206//206 212//212 207//207 +f 214//214 208//208 213//213 +f 207//207 213//213 208//208 +f 215//215 209//209 214//214 +f 208//208 214//214 209//209 +f 216//216 210//210 215//215 +f 209//209 215//215 210//210 +f 217//217 211//211 216//216 +f 210//210 216//216 211//211 +f 218//218 212//212 53//53 +f 53//53 60//60 218//218 +f 219//219 213//213 212//212 +f 212//212 218//218 219//219 +f 220//220 214//214 213//213 +f 213//213 219//219 220//220 +f 221//221 215//215 214//214 +f 214//214 220//220 221//221 +f 222//222 216//216 215//215 +f 215//215 221//221 222//222 +f 223//223 217//217 216//216 +f 216//216 222//222 223//223 +f 224//224 218//218 60//60 +f 60//60 67//67 224//224 +f 225//225 219//219 218//218 +f 218//218 224//224 225//225 +f 226//226 220//220 219//219 +f 219//219 225//225 226//226 +f 227//227 221//221 220//220 +f 220//220 226//226 227//227 +f 228//228 222//222 221//221 +f 221//221 227//227 228//228 +f 229//229 223//223 222//222 +f 222//222 228//228 229//229 +f 230//230 224//224 67//67 +f 67//67 74//74 230//230 +f 231//231 225//225 224//224 +f 224//224 230//230 231//231 +f 232//232 226//226 225//225 +f 225//225 231//231 232//232 +f 233//233 227//227 226//226 +f 226//226 232//232 233//233 +f 234//234 228//228 227//227 +f 227//227 233//233 234//234 +f 235//235 229//229 228//228 +f 228//228 234//234 235//235 +f 236//236 230//230 81//81 +f 74//74 81//81 230//230 +f 237//237 231//231 236//236 +f 230//230 236//236 231//231 +f 238//238 232//232 237//237 +f 231//231 237//237 232//232 +f 239//239 233//233 238//238 +f 232//232 238//238 233//233 +f 240//240 234//234 239//239 +f 233//233 239//239 234//234 +f 241//241 235//235 240//240 +f 234//234 240//240 235//235 +f 242//242 236//236 88//88 +f 81//81 88//88 236//236 +f 243//243 237//237 242//242 +f 236//236 242//242 237//237 +f 244//244 238//238 243//243 +f 237//237 243//243 238//238 +f 245//245 239//239 244//244 +f 238//238 244//244 239//239 +f 246//246 240//240 245//245 +f 239//239 245//245 240//240 +f 247//247 241//241 246//246 +f 240//240 246//246 241//241 +f 248//248 242//242 95//95 +f 88//88 95//95 242//242 +f 249//249 243//243 248//248 +f 242//242 248//248 243//243 +f 250//250 244//244 249//249 +f 243//243 249//249 244//244 +f 251//251 245//245 250//250 +f 244//244 250//250 245//245 +f 252//252 246//246 251//251 +f 245//245 251//251 246//246 +f 253//253 247//247 252//252 +f 246//246 252//252 247//247 +f 254//254 248//248 95//95 +f 95//95 102//102 254//254 +f 255//255 249//249 248//248 +f 248//248 254//254 255//255 +f 256//256 250//250 249//249 +f 249//249 255//255 256//256 +f 257//257 251//251 250//250 +f 250//250 256//256 257//257 +f 258//258 252//252 251//251 +f 251//251 257//257 258//258 +f 259//259 253//253 252//252 +f 252//252 258//258 259//259 +f 260//260 254//254 102//102 +f 102//102 109//109 260//260 +f 261//261 255//255 254//254 +f 254//254 260//260 261//261 +f 262//262 256//256 255//255 +f 255//255 261//261 262//262 +f 263//263 257//257 256//256 +f 256//256 262//262 263//263 +f 264//264 258//258 257//257 +f 257//257 263//263 264//264 +f 265//265 259//259 258//258 +f 258//258 264//264 265//265 +f 266//266 260//260 109//109 +f 109//109 116//116 266//266 +f 267//267 261//261 260//260 +f 260//260 266//266 267//267 +f 268//268 262//262 261//261 +f 261//261 267//267 268//268 +f 269//269 263//263 262//262 +f 262//262 268//268 269//269 +f 270//270 264//264 263//263 +f 263//263 269//269 270//270 +f 271//271 265//265 264//264 +f 264//264 270//270 271//271 +f 272//272 266//266 123//123 +f 116//116 123//123 266//266 +f 273//273 267//267 272//272 +f 266//266 272//272 267//267 +f 274//274 268//268 273//273 +f 267//267 273//273 268//268 +f 275//275 269//269 274//274 +f 268//268 274//274 269//269 +f 276//276 270//270 275//275 +f 269//269 275//275 270//270 +f 277//277 271//271 276//276 +f 270//270 276//276 271//271 +f 278//278 272//272 130//130 +f 123//123 130//130 272//272 +f 279//279 273//273 278//278 +f 272//272 278//278 273//273 +f 280//280 274//274 279//279 +f 273//273 279//279 274//274 +f 281//281 275//275 280//280 +f 274//274 280//280 275//275 +f 282//282 276//276 281//281 +f 275//275 281//281 276//276 +f 283//283 277//277 282//282 +f 276//276 282//282 277//277 +f 284//284 278//278 137//137 +f 130//130 137//137 278//278 +f 285//285 279//279 284//284 +f 278//278 284//284 279//279 +f 286//286 280//280 285//285 +f 279//279 285//285 280//280 +f 287//287 281//281 286//286 +f 280//280 286//286 281//281 +f 288//288 282//282 287//287 +f 281//281 287//287 282//282 +f 289//289 283//283 288//288 +f 282//282 288//288 283//283 +f 290//290 284//284 137//137 +f 137//137 144//144 290//290 +f 291//291 285//285 284//284 +f 284//284 290//290 291//291 +f 292//292 286//286 285//285 +f 285//285 291//291 292//292 +f 293//293 287//287 286//286 +f 286//286 292//292 293//293 +f 294//294 288//288 287//287 +f 287//287 293//293 294//294 +f 295//295 289//289 288//288 +f 288//288 294//294 295//295 +f 296//296 290//290 144//144 +f 144//144 151//151 296//296 +f 297//297 291//291 290//290 +f 290//290 296//296 297//297 +f 298//298 292//292 291//291 +f 291//291 297//297 298//298 +f 299//299 293//293 292//292 +f 292//292 298//298 299//299 +f 300//300 294//294 293//293 +f 293//293 299//299 300//300 +f 301//301 295//295 294//294 +f 294//294 300//300 301//301 +f 302//302 296//296 151//151 +f 151//151 158//158 302//302 +f 303//303 297//297 296//296 +f 296//296 302//302 303//303 +f 304//304 298//298 297//297 +f 297//297 303//303 304//304 +f 305//305 299//299 298//298 +f 298//298 304//304 305//305 +f 306//306 300//300 299//299 +f 299//299 305//305 306//306 +f 307//307 301//301 300//300 +f 300//300 306//306 307//307 +f 308//308 302//302 165//165 +f 158//158 165//165 302//302 +f 309//309 303//303 308//308 +f 302//302 308//308 303//303 +f 310//310 304//304 309//309 +f 303//303 309//309 304//304 +f 311//311 305//305 310//310 +f 304//304 310//310 305//305 +f 312//312 306//306 311//311 +f 305//305 311//311 306//306 +f 313//313 307//307 312//312 +f 306//306 312//312 307//307 +f 314//314 308//308 172//172 +f 165//165 172//172 308//308 +f 315//315 309//309 314//314 +f 308//308 314//314 309//309 +f 316//316 310//310 315//315 +f 309//309 315//315 310//310 +f 317//317 311//311 316//316 +f 310//310 316//316 311//311 +f 318//318 312//312 317//317 +f 311//311 317//317 312//312 +f 319//319 313//313 318//318 +f 312//312 318//318 313//313 +f 320//320 314//314 179//179 +f 172//172 179//179 314//314 +f 321//321 315//315 320//320 +f 314//314 320//320 315//315 +f 322//322 316//316 321//321 +f 315//315 321//321 316//316 +f 323//323 317//317 322//322 +f 316//316 322//322 317//317 +f 324//324 318//318 323//323 +f 317//317 323//323 318//318 +f 325//325 319//319 324//324 +f 318//318 324//324 319//319 +f 326//326 320//320 179//179 +f 179//179 186//186 326//326 +f 327//327 321//321 320//320 +f 320//320 326//326 327//327 +f 328//328 322//322 321//321 +f 321//321 327//327 328//328 +f 329//329 323//323 322//322 +f 322//322 328//328 329//329 +f 330//330 324//324 323//323 +f 323//323 329//329 330//330 +f 331//331 325//325 324//324 +f 324//324 330//330 331//331 +f 332//332 326//326 186//186 +f 186//186 193//193 332//332 +f 333//333 327//327 326//326 +f 326//326 332//332 333//333 +f 334//334 328//328 327//327 +f 327//327 333//333 334//334 +f 335//335 329//329 328//328 +f 328//328 334//334 335//335 +f 336//336 330//330 329//329 +f 329//329 335//335 336//336 +f 337//337 331//331 330//330 +f 330//330 336//336 337//337 +f 195//195 332//332 193//193 +f 193//193 39//39 195//195 +f 197//197 333//333 332//332 +f 332//332 195//195 197//197 +f 199//199 334//334 333//333 +f 333//333 197//197 199//199 +f 201//201 335//335 334//334 +f 334//334 199//199 201//201 +f 203//203 336//336 335//335 +f 335//335 201//201 203//203 +f 205//205 337//337 336//336 +f 336//336 203//203 205//205 +f 338//338 339//339 205//205 +f 205//205 204//204 338//338 +f 340//340 341//341 339//339 +f 339//339 338//338 340//340 +f 342//342 343//343 341//341 +f 341//341 340//340 342//342 +f 344//344 345//345 343//343 +f 343//343 342//342 344//344 +f 346//346 347//347 345//345 +f 345//345 344//344 346//346 +f 348//348 349//349 347//347 +f 347//347 346//346 348//348 +f 350//350 338//338 204//204 +f 204//204 211//211 350//350 +f 351//351 340//340 338//338 +f 338//338 350//350 351//351 +f 352//352 342//342 340//340 +f 340//340 351//351 352//352 +f 353//353 344//344 342//342 +f 342//342 352//352 353//353 +f 354//354 346//346 344//344 +f 344//344 353//353 354//354 +f 355//355 348//348 346//346 +f 346//346 354//354 355//355 +f 356//356 350//350 211//211 +f 211//211 217//217 356//356 +f 357//357 351//351 350//350 +f 350//350 356//356 357//357 +f 358//358 352//352 351//351 +f 351//351 357//357 358//358 +f 359//359 353//353 352//352 +f 352//352 358//358 359//359 +f 360//360 354//354 353//353 +f 353//353 359//359 360//360 +f 361//361 355//355 354//354 +f 354//354 360//360 361//361 +f 362//362 356//356 223//223 +f 217//217 223//223 356//356 +f 363//363 357//357 362//362 +f 356//356 362//362 357//357 +f 364//364 358//358 363//363 +f 357//357 363//363 358//358 +f 365//365 359//359 364//364 +f 358//358 364//364 359//359 +f 366//366 360//360 365//365 +f 359//359 365//365 360//360 +f 367//367 361//361 366//366 +f 360//360 366//366 361//361 +f 368//368 362//362 229//229 +f 223//223 229//229 362//362 +f 369//369 363//363 368//368 +f 362//362 368//368 363//363 +f 370//370 364//364 369//369 +f 363//363 369//369 364//364 +f 371//371 365//365 370//370 +f 364//364 370//370 365//365 +f 372//372 366//366 371//371 +f 365//365 371//371 366//366 +f 373//373 367//367 372//372 +f 366//366 372//372 367//367 +f 374//374 368//368 235//235 +f 229//229 235//235 368//368 +f 375//375 369//369 374//374 +f 368//368 374//374 369//369 +f 376//376 370//370 375//375 +f 369//369 375//375 370//370 +f 377//377 371//371 376//376 +f 370//370 376//376 371//371 +f 378//378 372//372 377//377 +f 371//371 377//377 372//372 +f 379//379 373//373 378//378 +f 372//372 378//378 373//373 +f 380//380 374//374 235//235 +f 235//235 241//241 380//380 +f 381//381 375//375 374//374 +f 374//374 380//380 381//381 +f 382//382 376//376 375//375 +f 375//375 381//381 382//382 +f 383//383 377//377 376//376 +f 376//376 382//382 383//383 +f 384//384 378//378 377//377 +f 377//377 383//383 384//384 +f 385//385 379//379 378//378 +f 378//378 384//384 385//385 +f 386//386 380//380 241//241 +f 241//241 247//247 386//386 +f 387//387 381//381 380//380 +f 380//380 386//386 387//387 +f 388//388 382//382 381//381 +f 381//381 387//387 388//388 +f 389//389 383//383 382//382 +f 382//382 388//388 389//389 +f 390//390 384//384 383//383 +f 383//383 389//389 390//390 +f 391//391 385//385 384//384 +f 384//384 390//390 391//391 +f 392//392 386//386 247//247 +f 247//247 253//253 392//392 +f 393//393 387//387 386//386 +f 386//386 392//392 393//393 +f 394//394 388//388 387//387 +f 387//387 393//393 394//394 +f 395//395 389//389 388//388 +f 388//388 394//394 395//395 +f 396//396 390//390 389//389 +f 389//389 395//395 396//396 +f 397//397 391//391 390//390 +f 390//390 396//396 397//397 +f 398//398 392//392 259//259 +f 253//253 259//259 392//392 +f 399//399 393//393 398//398 +f 392//392 398//398 393//393 +f 400//400 394//394 399//399 +f 393//393 399//399 394//394 +f 401//401 395//395 400//400 +f 394//394 400//400 395//395 +f 402//402 396//396 401//401 +f 395//395 401//401 396//396 +f 403//403 397//397 402//402 +f 396//396 402//402 397//397 +f 404//404 398//398 265//265 +f 259//259 265//265 398//398 +f 405//405 399//399 404//404 +f 398//398 404//404 399//399 +f 406//406 400//400 405//405 +f 399//399 405//405 400//400 +f 407//407 401//401 406//406 +f 400//400 406//406 401//401 +f 408//408 402//402 407//407 +f 401//401 407//407 402//402 +f 409//409 403//403 408//408 +f 402//402 408//408 403//403 +f 410//410 404//404 271//271 +f 265//265 271//271 404//404 +f 411//411 405//405 410//410 +f 404//404 410//410 405//405 +f 412//412 406//406 411//411 +f 405//405 411//411 406//406 +f 413//413 407//407 412//412 +f 406//406 412//412 407//407 +f 414//414 408//408 413//413 +f 407//407 413//413 408//408 +f 415//415 409//409 414//414 +f 408//408 414//414 409//409 +f 416//416 410//410 271//271 +f 271//271 277//277 416//416 +f 417//417 411//411 410//410 +f 410//410 416//416 417//417 +f 418//418 412//412 411//411 +f 411//411 417//417 418//418 +f 419//419 413//413 412//412 +f 412//412 418//418 419//419 +f 420//420 414//414 413//413 +f 413//413 419//419 420//420 +f 421//421 415//415 414//414 +f 414//414 420//420 421//421 +f 422//422 416//416 277//277 +f 277//277 283//283 422//422 +f 423//423 417//417 416//416 +f 416//416 422//422 423//423 +f 424//424 418//418 417//417 +f 417//417 423//423 424//424 +f 425//425 419//419 418//418 +f 418//418 424//424 425//425 +f 426//426 420//420 419//419 +f 419//419 425//425 426//426 +f 427//427 421//421 420//420 +f 420//420 426//426 427//427 +f 428//428 422//422 283//283 +f 283//283 289//289 428//428 +f 429//429 423//423 422//422 +f 422//422 428//428 429//429 +f 430//430 424//424 423//423 +f 423//423 429//429 430//430 +f 431//431 425//425 424//424 +f 424//424 430//430 431//431 +f 432//432 426//426 425//425 +f 425//425 431//431 432//432 +f 433//433 427//427 426//426 +f 426//426 432//432 433//433 +f 434//434 428//428 295//295 +f 289//289 295//295 428//428 +f 435//435 429//429 434//434 +f 428//428 434//434 429//429 +f 436//436 430//430 435//435 +f 429//429 435//435 430//430 +f 437//437 431//431 436//436 +f 430//430 436//436 431//431 +f 438//438 432//432 437//437 +f 431//431 437//437 432//432 +f 439//439 433//433 438//438 +f 432//432 438//438 433//433 +f 440//440 434//434 301//301 +f 295//295 301//301 434//434 +f 441//441 435//435 440//440 +f 434//434 440//440 435//435 +f 442//442 436//436 441//441 +f 435//435 441//441 436//436 +f 443//443 437//437 442//442 +f 436//436 442//442 437//437 +f 444//444 438//438 443//443 +f 437//437 443//443 438//438 +f 445//445 439//439 444//444 +f 438//438 444//444 439//439 +f 446//446 440//440 307//307 +f 301//301 307//307 440//440 +f 447//447 441//441 446//446 +f 440//440 446//446 441//441 +f 448//448 442//442 447//447 +f 441//441 447//447 442//442 +f 449//449 443//443 448//448 +f 442//442 448//448 443//443 +f 450//450 444//444 449//449 +f 443//443 449//449 444//444 +f 451//451 445//445 450//450 +f 444//444 450//450 445//445 +f 452//452 446//446 307//307 +f 307//307 313//313 452//452 +f 453//453 447//447 446//446 +f 446//446 452//452 453//453 +f 454//454 448//448 447//447 +f 447//447 453//453 454//454 +f 455//455 449//449 448//448 +f 448//448 454//454 455//455 +f 456//456 450//450 449//449 +f 449//449 455//455 456//456 +f 457//457 451//451 450//450 +f 450//450 456//456 457//457 +f 458//458 452//452 313//313 +f 313//313 319//319 458//458 +f 459//459 453//453 452//452 +f 452//452 458//458 459//459 +f 460//460 454//454 453//453 +f 453//453 459//459 460//460 +f 461//461 455//455 454//454 +f 454//454 460//460 461//461 +f 462//462 456//456 455//455 +f 455//455 461//461 462//462 +f 463//463 457//457 456//456 +f 456//456 462//462 463//463 +f 464//464 458//458 319//319 +f 319//319 325//325 464//464 +f 465//465 459//459 458//458 +f 458//458 464//464 465//465 +f 466//466 460//460 459//459 +f 459//459 465//465 466//466 +f 467//467 461//461 460//460 +f 460//460 466//466 467//467 +f 468//468 462//462 461//461 +f 461//461 467//467 468//468 +f 469//469 463//463 462//462 +f 462//462 468//468 469//469 +f 470//470 464//464 331//331 +f 325//325 331//331 464//464 +f 471//471 465//465 470//470 +f 464//464 470//470 465//465 +f 472//472 466//466 471//471 +f 465//465 471//471 466//466 +f 473//473 467//467 472//472 +f 466//466 472//472 467//467 +f 474//474 468//468 473//473 +f 467//467 473//473 468//468 +f 475//475 469//469 474//474 +f 468//468 474//474 469//469 +f 476//476 470//470 337//337 +f 331//331 337//337 470//470 +f 477//477 471//471 476//476 +f 470//470 476//476 471//471 +f 478//478 472//472 477//477 +f 471//471 477//477 472//472 +f 479//479 473//473 478//478 +f 472//472 478//478 473//473 +f 480//480 474//474 479//479 +f 473//473 479//479 474//474 +f 481//481 475//475 480//480 +f 474//474 480//480 475//475 +f 339//339 476//476 205//205 +f 337//337 205//205 476//476 +f 341//341 477//477 339//339 +f 476//476 339//339 477//477 +f 343//343 478//478 341//341 +f 477//477 341//341 478//478 +f 345//345 479//479 343//343 +f 478//478 343//343 479//479 +f 347//347 480//480 345//345 +f 479//479 345//345 480//480 +f 349//349 481//481 347//347 +f 480//480 347//347 481//481 +f 1//1 3//3 482//482 +f 483//483 482//482 3//3 +f 482//482 483//483 484//484 +f 485//485 484//484 483//483 +f 484//484 485//485 486//486 +f 487//487 486//486 485//485 +f 486//486 487//487 488//488 +f 489//489 488//488 487//487 +f 488//488 489//489 349//349 +f 481//481 349//349 489//489 +f 3//3 4//4 483//483 +f 490//490 483//483 4//4 +f 483//483 490//490 485//485 +f 491//491 485//485 490//490 +f 485//485 491//491 487//487 +f 492//492 487//487 491//491 +f 487//487 492//492 489//489 +f 493//493 489//489 492//492 +f 489//489 493//493 481//481 +f 475//475 481//481 493//493 +f 4//4 5//5 490//490 +f 494//494 490//490 5//5 +f 490//490 494//494 491//491 +f 495//495 491//491 494//494 +f 491//491 495//495 492//492 +f 496//496 492//492 495//495 +f 492//492 496//496 493//493 +f 497//497 493//493 496//496 +f 493//493 497//497 475//475 +f 469//469 475//475 497//497 +f 5//5 6//6 498//498 +f 498//498 494//494 5//5 +f 494//494 498//498 499//499 +f 499//499 495//495 494//494 +f 495//495 499//499 500//500 +f 500//500 496//496 495//495 +f 496//496 500//500 501//501 +f 501//501 497//497 496//496 +f 497//497 501//501 463//463 +f 463//463 469//469 497//497 +f 6//6 7//7 502//502 +f 502//502 498//498 6//6 +f 498//498 502//502 503//503 +f 503//503 499//499 498//498 +f 499//499 503//503 504//504 +f 504//504 500//500 499//499 +f 500//500 504//504 505//505 +f 505//505 501//501 500//500 +f 501//501 505//505 457//457 +f 457//457 463//463 501//501 +f 7//7 8//8 506//506 +f 506//506 502//502 7//7 +f 502//502 506//506 507//507 +f 507//507 503//503 502//502 +f 503//503 507//507 508//508 +f 508//508 504//504 503//503 +f 504//504 508//508 509//509 +f 509//509 505//505 504//504 +f 505//505 509//509 451//451 +f 451//451 457//457 505//505 +f 8//8 9//9 506//506 +f 510//510 506//506 9//9 +f 506//506 510//510 507//507 +f 511//511 507//507 510//510 +f 507//507 511//511 508//508 +f 512//512 508//508 511//511 +f 508//508 512//512 509//509 +f 513//513 509//509 512//512 +f 509//509 513//513 451//451 +f 445//445 451//451 513//513 +f 9//9 10//10 510//510 +f 514//514 510//510 10//10 +f 510//510 514//514 511//511 +f 515//515 511//511 514//514 +f 511//511 515//515 512//512 +f 516//516 512//512 515//515 +f 512//512 516//516 513//513 +f 517//517 513//513 516//516 +f 513//513 517//517 445//445 +f 439//439 445//445 517//517 +f 10//10 11//11 514//514 +f 518//518 514//514 11//11 +f 514//514 518//518 515//515 +f 519//519 515//515 518//518 +f 515//515 519//519 516//516 +f 520//520 516//516 519//519 +f 516//516 520//520 517//517 +f 521//521 517//517 520//520 +f 517//517 521//521 439//439 +f 433//433 439//439 521//521 +f 11//11 12//12 522//522 +f 522//522 518//518 11//11 +f 518//518 522//522 523//523 +f 523//523 519//519 518//518 +f 519//519 523//523 524//524 +f 524//524 520//520 519//519 +f 520//520 524//524 525//525 +f 525//525 521//521 520//520 +f 521//521 525//525 427//427 +f 427//427 433//433 521//521 +f 12//12 13//13 526//526 +f 526//526 522//522 12//12 +f 522//522 526//526 527//527 +f 527//527 523//523 522//522 +f 523//523 527//527 528//528 +f 528//528 524//524 523//523 +f 524//524 528//528 529//529 +f 529//529 525//525 524//524 +f 525//525 529//529 421//421 +f 421//421 427//427 525//525 +f 13//13 14//14 530//530 +f 530//530 526//526 13//13 +f 526//526 530//530 531//531 +f 531//531 527//527 526//526 +f 527//527 531//531 532//532 +f 532//532 528//528 527//527 +f 528//528 532//532 533//533 +f 533//533 529//529 528//528 +f 529//529 533//533 415//415 +f 415//415 421//421 529//529 +f 14//14 15//15 530//530 +f 534//534 530//530 15//15 +f 530//530 534//534 531//531 +f 535//535 531//531 534//534 +f 531//531 535//535 532//532 +f 536//536 532//532 535//535 +f 532//532 536//536 533//533 +f 537//537 533//533 536//536 +f 533//533 537//537 415//415 +f 409//409 415//415 537//537 +f 15//15 16//16 534//534 +f 538//538 534//534 16//16 +f 534//534 538//538 535//535 +f 539//539 535//535 538//538 +f 535//535 539//539 536//536 +f 540//540 536//536 539//539 +f 536//536 540//540 537//537 +f 541//541 537//537 540//540 +f 537//537 541//541 409//409 +f 403//403 409//409 541//541 +f 16//16 17//17 538//538 +f 542//542 538//538 17//17 +f 538//538 542//542 539//539 +f 543//543 539//539 542//542 +f 539//539 543//543 540//540 +f 544//544 540//540 543//543 +f 540//540 544//544 541//541 +f 545//545 541//541 544//544 +f 541//541 545//545 403//403 +f 397//397 403//403 545//545 +f 17//17 18//18 546//546 +f 546//546 542//542 17//17 +f 542//542 546//546 547//547 +f 547//547 543//543 542//542 +f 543//543 547//547 548//548 +f 548//548 544//544 543//543 +f 544//544 548//548 549//549 +f 549//549 545//545 544//544 +f 545//545 549//549 391//391 +f 391//391 397//397 545//545 +f 18//18 19//19 550//550 +f 550//550 546//546 18//18 +f 546//546 550//550 551//551 +f 551//551 547//547 546//546 +f 547//547 551//551 552//552 +f 552//552 548//548 547//547 +f 548//548 552//552 553//553 +f 553//553 549//549 548//548 +f 549//549 553//553 385//385 +f 385//385 391//391 549//549 +f 19//19 20//20 554//554 +f 554//554 550//550 19//19 +f 550//550 554//554 555//555 +f 555//555 551//551 550//550 +f 551//551 555//555 556//556 +f 556//556 552//552 551//551 +f 552//552 556//556 557//557 +f 557//557 553//553 552//552 +f 553//553 557//557 379//379 +f 379//379 385//385 553//553 +f 20//20 21//21 554//554 +f 558//558 554//554 21//21 +f 554//554 558//558 555//555 +f 559//559 555//555 558//558 +f 555//555 559//559 556//556 +f 560//560 556//556 559//559 +f 556//556 560//560 557//557 +f 561//561 557//557 560//560 +f 557//557 561//561 379//379 +f 373//373 379//379 561//561 +f 21//21 22//22 558//558 +f 562//562 558//558 22//22 +f 558//558 562//562 559//559 +f 563//563 559//559 562//562 +f 559//559 563//563 560//560 +f 564//564 560//560 563//563 +f 560//560 564//564 561//561 +f 565//565 561//561 564//564 +f 561//561 565//565 373//373 +f 367//367 373//373 565//565 +f 22//22 23//23 562//562 +f 566//566 562//562 23//23 +f 562//562 566//566 563//563 +f 567//567 563//563 566//566 +f 563//563 567//567 564//564 +f 568//568 564//564 567//567 +f 564//564 568//568 565//565 +f 569//569 565//565 568//568 +f 565//565 569//569 367//367 +f 361//361 367//367 569//569 +f 23//23 24//24 570//570 +f 570//570 566//566 23//23 +f 566//566 570//570 571//571 +f 571//571 567//567 566//566 +f 567//567 571//571 572//572 +f 572//572 568//568 567//567 +f 568//568 572//572 573//573 +f 573//573 569//569 568//568 +f 569//569 573//573 355//355 +f 355//355 361//361 569//569 +f 24//24 25//25 574//574 +f 574//574 570//570 24//24 +f 570//570 574//574 575//575 +f 575//575 571//571 570//570 +f 571//571 575//575 576//576 +f 576//576 572//572 571//571 +f 572//572 576//576 577//577 +f 577//577 573//573 572//572 +f 573//573 577//577 348//348 +f 348//348 355//355 573//573 +f 25//25 1//1 482//482 +f 482//482 574//574 25//25 +f 574//574 482//482 484//484 +f 484//484 575//575 574//574 +f 575//575 484//484 486//486 +f 486//486 576//576 575//575 +f 576//576 486//486 488//488 +f 488//488 577//577 576//576 +f 577//577 488//488 349//349 +f 349//349 348//348 577//577 +f 578//578 579//579 580//580 +f 581//581 580//580 579//579 +f 582//582 578//578 583//583 +f 580//580 583//583 578//578 +f 584//584 582//582 585//585 +f 583//583 585//585 582//582 +f 586//586 584//584 585//585 +f 585//585 587//587 586//586 +f 588//588 586//586 587//587 +f 587//587 589//589 588//588 +f 590//590 588//588 589//589 +f 589//589 591//591 590//590 +f 592//592 590//590 593//593 +f 591//591 593//593 590//590 +f 594//594 592//592 595//595 +f 593//593 595//595 592//592 +f 596//596 594//594 597//597 +f 595//595 597//597 594//594 +f 598//598 596//596 597//597 +f 597//597 599//599 598//598 +f 600//600 598//598 599//599 +f 599//599 601//601 600//600 +f 602//602 600//600 601//601 +f 601//601 603//603 602//602 +f 604//604 602//602 605//605 +f 603//603 605//605 602//602 +f 606//606 604//604 607//607 +f 605//605 607//607 604//604 +f 608//608 606//606 609//609 +f 607//607 609//609 606//606 +f 610//610 608//608 609//609 +f 609//609 611//611 610//610 +f 612//612 610//610 611//611 +f 611//611 613//613 612//612 +f 614//614 612//612 613//613 +f 613//613 615//615 614//614 +f 616//616 614//614 617//617 +f 615//615 617//617 614//614 +f 618//618 616//616 619//619 +f 617//617 619//619 616//616 +f 620//620 618//618 621//621 +f 619//619 621//621 618//618 +f 622//622 620//620 621//621 +f 621//621 623//623 622//622 +f 624//624 622//622 623//623 +f 623//623 625//625 624//624 +f 579//579 624//624 625//625 +f 625//625 581//581 579//579 +f 626//626 627//627 578//578 +f 579//579 578//578 627//627 +f 628//628 629//629 626//626 +f 627//627 626//626 629//629 +f 630//630 631//631 628//628 +f 629//629 628//628 631//631 +f 632//632 633//633 630//630 +f 631//631 630//630 633//633 +f 634//634 635//635 632//632 +f 633//633 632//632 635//635 +f 636//636 637//637 634//634 +f 635//635 634//634 637//637 +f 638//638 626//626 582//582 +f 578//578 582//582 626//626 +f 639//639 628//628 638//638 +f 626//626 638//638 628//628 +f 640//640 630//630 639//639 +f 628//628 639//639 630//630 +f 641//641 632//632 640//640 +f 630//630 640//640 632//632 +f 642//642 634//634 641//641 +f 632//632 641//641 634//634 +f 643//643 636//636 642//642 +f 634//634 642//642 636//636 +f 644//644 638//638 584//584 +f 582//582 584//584 638//638 +f 645//645 639//639 644//644 +f 638//638 644//644 639//639 +f 646//646 640//640 645//645 +f 639//639 645//645 640//640 +f 647//647 641//641 646//646 +f 640//640 646//646 641//641 +f 648//648 642//642 647//647 +f 641//641 647//647 642//642 +f 649//649 643//643 648//648 +f 642//642 648//648 643//643 +f 650//650 644//644 584//584 +f 584//584 586//586 650//650 +f 651//651 645//645 644//644 +f 644//644 650//650 651//651 +f 652//652 646//646 645//645 +f 645//645 651//651 652//652 +f 653//653 647//647 646//646 +f 646//646 652//652 653//653 +f 654//654 648//648 647//647 +f 647//647 653//653 654//654 +f 655//655 649//649 648//648 +f 648//648 654//654 655//655 +f 656//656 650//650 586//586 +f 586//586 588//588 656//656 +f 657//657 651//651 650//650 +f 650//650 656//656 657//657 +f 658//658 652//652 651//651 +f 651//651 657//657 658//658 +f 659//659 653//653 652//652 +f 652//652 658//658 659//659 +f 660//660 654//654 653//653 +f 653//653 659//659 660//660 +f 661//661 655//655 654//654 +f 654//654 660//660 661//661 +f 662//662 656//656 588//588 +f 588//588 590//590 662//662 +f 663//663 657//657 656//656 +f 656//656 662//662 663//663 +f 664//664 658//658 657//657 +f 657//657 663//663 664//664 +f 665//665 659//659 658//658 +f 658//658 664//664 665//665 +f 666//666 660//660 659//659 +f 659//659 665//665 666//666 +f 667//667 661//661 660//660 +f 660//660 666//666 667//667 +f 668//668 662//662 592//592 +f 590//590 592//592 662//662 +f 669//669 663//663 668//668 +f 662//662 668//668 663//663 +f 670//670 664//664 669//669 +f 663//663 669//669 664//664 +f 671//671 665//665 670//670 +f 664//664 670//670 665//665 +f 672//672 666//666 671//671 +f 665//665 671//671 666//666 +f 673//673 667//667 672//672 +f 666//666 672//672 667//667 +f 674//674 668//668 594//594 +f 592//592 594//594 668//668 +f 675//675 669//669 674//674 +f 668//668 674//674 669//669 +f 676//676 670//670 675//675 +f 669//669 675//675 670//670 +f 677//677 671//671 676//676 +f 670//670 676//676 671//671 +f 678//678 672//672 677//677 +f 671//671 677//677 672//672 +f 679//679 673//673 678//678 +f 672//672 678//678 673//673 +f 680//680 674//674 596//596 +f 594//594 596//596 674//674 +f 681//681 675//675 680//680 +f 674//674 680//680 675//675 +f 682//682 676//676 681//681 +f 675//675 681//681 676//676 +f 683//683 677//677 682//682 +f 676//676 682//682 677//677 +f 684//684 678//678 683//683 +f 677//677 683//683 678//678 +f 685//685 679//679 684//684 +f 678//678 684//684 679//679 +f 686//686 680//680 596//596 +f 596//596 598//598 686//686 +f 687//687 681//681 680//680 +f 680//680 686//686 687//687 +f 688//688 682//682 681//681 +f 681//681 687//687 688//688 +f 689//689 683//683 682//682 +f 682//682 688//688 689//689 +f 690//690 684//684 683//683 +f 683//683 689//689 690//690 +f 691//691 685//685 684//684 +f 684//684 690//690 691//691 +f 692//692 686//686 598//598 +f 598//598 600//600 692//692 +f 693//693 687//687 686//686 +f 686//686 692//692 693//693 +f 694//694 688//688 687//687 +f 687//687 693//693 694//694 +f 695//695 689//689 688//688 +f 688//688 694//694 695//695 +f 696//696 690//690 689//689 +f 689//689 695//695 696//696 +f 697//697 691//691 690//690 +f 690//690 696//696 697//697 +f 698//698 692//692 600//600 +f 600//600 602//602 698//698 +f 699//699 693//693 692//692 +f 692//692 698//698 699//699 +f 700//700 694//694 693//693 +f 693//693 699//699 700//700 +f 701//701 695//695 694//694 +f 694//694 700//700 701//701 +f 702//702 696//696 695//695 +f 695//695 701//701 702//702 +f 703//703 697//697 696//696 +f 696//696 702//702 703//703 +f 704//704 698//698 604//604 +f 602//602 604//604 698//698 +f 705//705 699//699 704//704 +f 698//698 704//704 699//699 +f 706//706 700//700 705//705 +f 699//699 705//705 700//700 +f 707//707 701//701 706//706 +f 700//700 706//706 701//701 +f 708//708 702//702 707//707 +f 701//701 707//707 702//702 +f 709//709 703//703 708//708 +f 702//702 708//708 703//703 +f 710//710 704//704 606//606 +f 604//604 606//606 704//704 +f 711//711 705//705 710//710 +f 704//704 710//710 705//705 +f 712//712 706//706 711//711 +f 705//705 711//711 706//706 +f 713//713 707//707 712//712 +f 706//706 712//712 707//707 +f 714//714 708//708 713//713 +f 707//707 713//713 708//708 +f 715//715 709//709 714//714 +f 708//708 714//714 709//709 +f 716//716 710//710 608//608 +f 606//606 608//608 710//710 +f 717//717 711//711 716//716 +f 710//710 716//716 711//711 +f 718//718 712//712 717//717 +f 711//711 717//717 712//712 +f 719//719 713//713 718//718 +f 712//712 718//718 713//713 +f 720//720 714//714 719//719 +f 713//713 719//719 714//714 +f 721//721 715//715 720//720 +f 714//714 720//720 715//715 +f 722//722 716//716 608//608 +f 608//608 610//610 722//722 +f 723//723 717//717 716//716 +f 716//716 722//722 723//723 +f 724//724 718//718 717//717 +f 717//717 723//723 724//724 +f 725//725 719//719 718//718 +f 718//718 724//724 725//725 +f 726//726 720//720 719//719 +f 719//719 725//725 726//726 +f 727//727 721//721 720//720 +f 720//720 726//726 727//727 +f 728//728 722//722 610//610 +f 610//610 612//612 728//728 +f 729//729 723//723 722//722 +f 722//722 728//728 729//729 +f 730//730 724//724 723//723 +f 723//723 729//729 730//730 +f 731//731 725//725 724//724 +f 724//724 730//730 731//731 +f 732//732 726//726 725//725 +f 725//725 731//731 732//732 +f 733//733 727//727 726//726 +f 726//726 732//732 733//733 +f 734//734 728//728 612//612 +f 612//612 614//614 734//734 +f 735//735 729//729 728//728 +f 728//728 734//734 735//735 +f 736//736 730//730 729//729 +f 729//729 735//735 736//736 +f 737//737 731//731 730//730 +f 730//730 736//736 737//737 +f 738//738 732//732 731//731 +f 731//731 737//737 738//738 +f 739//739 733//733 732//732 +f 732//732 738//738 739//739 +f 740//740 734//734 616//616 +f 614//614 616//616 734//734 +f 741//741 735//735 740//740 +f 734//734 740//740 735//735 +f 742//742 736//736 741//741 +f 735//735 741//741 736//736 +f 743//743 737//737 742//742 +f 736//736 742//742 737//737 +f 744//744 738//738 743//743 +f 737//737 743//743 738//738 +f 745//745 739//739 744//744 +f 738//738 744//744 739//739 +f 746//746 740//740 618//618 +f 616//616 618//618 740//740 +f 747//747 741//741 746//746 +f 740//740 746//746 741//741 +f 748//748 742//742 747//747 +f 741//741 747//747 742//742 +f 749//749 743//743 748//748 +f 742//742 748//748 743//743 +f 750//750 744//744 749//749 +f 743//743 749//749 744//744 +f 751//751 745//745 750//750 +f 744//744 750//750 745//745 +f 752//752 746//746 620//620 +f 618//618 620//620 746//746 +f 753//753 747//747 752//752 +f 746//746 752//752 747//747 +f 754//754 748//748 753//753 +f 747//747 753//753 748//748 +f 755//755 749//749 754//754 +f 748//748 754//754 749//749 +f 756//756 750//750 755//755 +f 749//749 755//755 750//750 +f 757//757 751//751 756//756 +f 750//750 756//756 751//751 +f 758//758 752//752 620//620 +f 620//620 622//622 758//758 +f 759//759 753//753 752//752 +f 752//752 758//758 759//759 +f 760//760 754//754 753//753 +f 753//753 759//759 760//760 +f 761//761 755//755 754//754 +f 754//754 760//760 761//761 +f 762//762 756//756 755//755 +f 755//755 761//761 762//762 +f 763//763 757//757 756//756 +f 756//756 762//762 763//763 +f 764//764 758//758 622//622 +f 622//622 624//624 764//764 +f 765//765 759//759 758//758 +f 758//758 764//764 765//765 +f 766//766 760//760 759//759 +f 759//759 765//765 766//766 +f 767//767 761//761 760//760 +f 760//760 766//766 767//767 +f 768//768 762//762 761//761 +f 761//761 767//767 768//768 +f 769//769 763//763 762//762 +f 762//762 768//768 769//769 +f 627//627 764//764 624//624 +f 624//624 579//579 627//627 +f 629//629 765//765 764//764 +f 764//764 627//627 629//629 +f 631//631 766//766 765//765 +f 765//765 629//629 631//631 +f 633//633 767//767 766//766 +f 766//766 631//631 633//633 +f 635//635 768//768 767//767 +f 767//767 633//633 635//635 +f 637//637 769//769 768//768 +f 768//768 635//635 637//637 +f 770//770 771//771 772//772 +f 773//773 772//772 771//771 +f 774//774 770//770 775//775 +f 772//772 775//775 770//770 +f 776//776 777//777 774//774 +f 774//774 775//775 776//776 +f 778//778 779//779 776//776 +f 777//777 776//776 779//779 +f 780//780 781//781 778//778 +f 779//779 778//778 781//781 +f 782//782 783//783 780//780 +f 781//781 780//780 783//783 +f 772//772 773//773 784//784 +f 785//785 784//784 773//773 +f 775//775 772//772 786//786 +f 784//784 786//786 772//772 +f 776//776 775//775 787//787 +f 786//786 787//787 775//775 +f 788//788 778//778 776//776 +f 776//776 787//787 788//788 +f 789//789 780//780 788//788 +f 778//778 788//788 780//780 +f 790//790 782//782 789//789 +f 780//780 789//789 782//782 +f 784//784 785//785 791//791 +f 792//792 791//791 785//785 +f 786//786 784//784 793//793 +f 791//791 793//793 784//784 +f 787//787 786//786 794//794 +f 793//793 794//794 786//786 +f 795//795 788//788 787//787 +f 787//787 794//794 795//795 +f 796//796 789//789 795//795 +f 788//788 795//795 789//789 +f 797//797 790//790 796//796 +f 789//789 796//796 790//790 +f 791//791 792//792 798//798 +f 799//799 798//798 792//792 +f 793//793 791//791 800//800 +f 798//798 800//800 791//791 +f 794//794 793//793 801//801 +f 800//800 801//801 793//793 +f 802//802 795//795 794//794 +f 794//794 801//801 802//802 +f 803//803 796//796 802//802 +f 795//795 802//802 796//796 +f 804//804 797//797 803//803 +f 796//796 803//803 797//797 +f 798//798 799//799 805//805 +f 806//806 805//805 799//799 +f 800//800 798//798 807//807 +f 805//805 807//807 798//798 +f 801//801 800//800 808//808 +f 807//807 808//808 800//800 +f 809//809 802//802 801//801 +f 801//801 808//808 809//809 +f 810//810 803//803 809//809 +f 802//802 809//809 803//803 +f 811//811 804//804 810//810 +f 803//803 810//810 804//804 +f 805//805 806//806 812//812 +f 813//813 812//812 806//806 +f 807//807 805//805 814//814 +f 812//812 814//814 805//805 +f 815//815 808//808 814//814 +f 807//807 814//814 808//808 +f 816//816 809//809 815//815 +f 808//808 815//815 809//809 +f 817//817 810//810 816//816 +f 809//809 816//816 810//810 +f 818//818 811//811 817//817 +f 810//810 817//817 811//811 +f 819//819 820//820 812//812 +f 812//812 813//813 819//819 +f 820//820 821//821 814//814 +f 814//814 812//812 820//820 +f 822//822 815//815 814//814 +f 814//814 821//821 822//822 +f 823//823 816//816 815//815 +f 815//815 822//822 823//823 +f 824//824 817//817 816//816 +f 816//816 823//823 824//824 +f 825//825 818//818 817//817 +f 817//817 824//824 825//825 +f 826//826 827//827 820//820 +f 820//820 819//819 826//826 +f 827//827 828//828 821//821 +f 821//821 820//820 827//827 +f 828//828 829//829 822//822 +f 822//822 821//821 828//828 +f 830//830 823//823 829//829 +f 822//822 829//829 823//823 +f 831//831 824//824 823//823 +f 823//823 830//830 831//831 +f 832//832 825//825 824//824 +f 824//824 831//831 832//832 +f 833//833 834//834 827//827 +f 827//827 826//826 833//833 +f 834//834 835//835 828//828 +f 828//828 827//827 834//834 +f 835//835 836//836 829//829 +f 829//829 828//828 835//835 +f 837//837 830//830 836//836 +f 829//829 836//836 830//830 +f 838//838 831//831 830//830 +f 830//830 837//837 838//838 +f 839//839 832//832 831//831 +f 831//831 838//838 839//839 +f 840//840 841//841 834//834 +f 834//834 833//833 840//840 +f 841//841 842//842 835//835 +f 835//835 834//834 841//841 +f 842//842 843//843 836//836 +f 836//836 835//835 842//842 +f 844//844 837//837 843//843 +f 836//836 843//843 837//837 +f 845//845 838//838 837//837 +f 837//837 844//844 845//845 +f 846//846 839//839 838//838 +f 838//838 845//845 846//846 +f 847//847 848//848 841//841 +f 841//841 840//840 847//847 +f 848//848 849//849 842//842 +f 842//842 841//841 848//848 +f 849//849 850//850 843//843 +f 843//843 842//842 849//849 +f 851//851 844//844 850//850 +f 843//843 850//850 844//844 +f 852//852 845//845 844//844 +f 844//844 851//851 852//852 +f 853//853 846//846 845//845 +f 845//845 852//852 853//853 +f 771//771 770//770 848//848 +f 848//848 847//847 771//771 +f 770//770 774//774 849//849 +f 849//849 848//848 770//770 +f 777//777 850//850 774//774 +f 849//849 774//774 850//850 +f 779//779 851//851 850//850 +f 850//850 777//777 779//779 +f 781//781 852//852 851//851 +f 851//851 779//779 781//781 +f 783//783 853//853 852//852 +f 852//852 781//781 783//783 +f 854//854 855//855 782//782 +f 783//783 782//782 855//855 +f 856//856 857//857 855//855 +f 855//855 854//854 856//856 +f 858//858 859//859 857//857 +f 857//857 856//856 858//858 +f 860//860 861//861 859//859 +f 859//859 858//858 860//860 +f 862//862 863//863 861//861 +f 861//861 860//860 862//862 +f 864//864 865//865 863//863 +f 863//863 862//862 864//864 +f 866//866 854//854 782//782 +f 782//782 790//790 866//866 +f 867//867 856//856 854//854 +f 854//854 866//866 867//867 +f 868//868 858//858 856//856 +f 856//856 867//867 868//868 +f 869//869 860//860 858//858 +f 858//858 868//868 869//869 +f 870//870 862//862 860//860 +f 860//860 869//869 870//870 +f 871//871 864//864 870//870 +f 862//862 870//870 864//864 +f 872//872 866//866 790//790 +f 790//790 797//797 872//872 +f 873//873 867//867 866//866 +f 866//866 872//872 873//873 +f 874//874 868//868 867//867 +f 867//867 873//873 874//874 +f 875//875 869//869 874//874 +f 868//868 874//874 869//869 +f 876//876 870//870 875//875 +f 869//869 875//875 870//870 +f 877//877 871//871 876//876 +f 870//870 876//876 871//871 +f 878//878 872//872 797//797 +f 797//797 804//804 878//878 +f 879//879 873//873 872//872 +f 872//872 878//878 879//879 +f 880//880 874//874 873//873 +f 873//873 879//879 880//880 +f 881//881 875//875 880//880 +f 874//874 880//880 875//875 +f 882//882 876//876 881//881 +f 875//875 881//881 876//876 +f 883//883 877//877 882//882 +f 876//876 882//882 877//877 +f 884//884 878//878 804//804 +f 804//804 811//811 884//884 +f 885//885 879//879 878//878 +f 878//878 884//884 885//885 +f 886//886 880//880 879//879 +f 879//879 885//885 886//886 +f 887//887 881//881 880//880 +f 880//880 886//886 887//887 +f 888//888 882//882 881//881 +f 881//881 887//887 888//888 +f 889//889 883//883 888//888 +f 882//882 888//888 883//883 +f 890//890 884//884 811//811 +f 811//811 818//818 890//890 +f 891//891 885//885 884//884 +f 884//884 890//890 891//891 +f 892//892 886//886 885//885 +f 885//885 891//891 892//892 +f 893//893 887//887 886//886 +f 886//886 892//892 893//893 +f 894//894 888//888 887//887 +f 887//887 893//893 894//894 +f 895//895 889//889 888//888 +f 888//888 894//894 895//895 +f 896//896 890//890 825//825 +f 818//818 825//825 890//890 +f 897//897 891//891 896//896 +f 890//890 896//896 891//891 +f 898//898 892//892 897//897 +f 891//891 897//897 892//892 +f 899//899 893//893 898//898 +f 892//892 898//898 893//893 +f 900//900 894//894 899//899 +f 893//893 899//899 894//894 +f 901//901 895//895 900//900 +f 894//894 900//900 895//895 +f 902//902 896//896 832//832 +f 825//825 832//832 896//896 +f 903//903 897//897 902//902 +f 896//896 902//902 897//897 +f 904//904 898//898 903//903 +f 897//897 903//903 898//898 +f 905//905 899//899 904//904 +f 898//898 904//904 899//899 +f 906//906 900//900 905//905 +f 899//899 905//905 900//900 +f 907//907 901//901 900//900 +f 900//900 906//906 907//907 +f 908//908 902//902 839//839 +f 832//832 839//839 902//902 +f 909//909 903//903 908//908 +f 902//902 908//908 903//903 +f 910//910 904//904 909//909 +f 903//903 909//909 904//904 +f 911//911 905//905 904//904 +f 904//904 910//910 911//911 +f 912//912 906//906 905//905 +f 905//905 911//911 912//912 +f 913//913 907//907 906//906 +f 906//906 912//912 913//913 +f 914//914 908//908 846//846 +f 839//839 846//846 908//908 +f 915//915 909//909 914//914 +f 908//908 914//914 909//909 +f 916//916 910//910 915//915 +f 909//909 915//915 910//910 +f 917//917 911//911 910//910 +f 910//910 916//916 917//917 +f 918//918 912//912 911//911 +f 911//911 917//917 918//918 +f 919//919 913//913 912//912 +f 912//912 918//918 919//919 +f 920//920 914//914 853//853 +f 846//846 853//853 914//914 +f 921//921 915//915 920//920 +f 914//914 920//920 915//915 +f 922//922 916//916 921//921 +f 915//915 921//921 916//916 +f 923//923 917//917 922//922 +f 916//916 922//922 917//917 +f 924//924 918//918 923//923 +f 917//917 923//923 918//918 +f 925//925 919//919 918//918 +f 918//918 924//924 925//925 +f 855//855 920//920 853//853 +f 853//853 783//783 855//855 +f 857//857 921//921 855//855 +f 920//920 855//855 921//921 +f 859//859 922//922 857//857 +f 921//921 857//857 922//922 +f 861//861 923//923 859//859 +f 922//922 859//859 923//923 +f 863//863 924//924 861//861 +f 923//923 861//861 924//924 +f 865//865 925//925 863//863 +f 924//924 863//863 925//925 +f 926//926 927//927 928//928 +f 928//928 929//929 926//926 +f 929//929 928//928 930//930 +f 930//930 931//931 929//929 +f 931//931 930//930 932//932 +f 932//932 933//933 931//931 +f 933//933 932//932 934//934 +f 934//934 935//935 933//933 +f 935//935 934//934 936//936 +f 936//936 937//937 935//935 +f 937//937 936//936 938//938 +f 939//939 938//938 936//936 +f 940//940 941//941 927//927 +f 928//928 927//927 941//941 +f 928//928 941//941 942//942 +f 942//942 930//930 928//928 +f 930//930 942//942 943//943 +f 943//943 932//932 930//930 +f 932//932 943//943 944//944 +f 944//944 934//934 932//932 +f 934//934 944//944 936//936 +f 945//945 936//936 944//944 +f 936//936 945//945 939//939 +f 946//946 939//939 945//945 +f 947//947 948//948 940//940 +f 941//941 940//940 948//948 +f 941//941 948//948 949//949 +f 949//949 942//942 941//941 +f 942//942 949//949 943//943 +f 950//950 943//943 949//949 +f 943//943 950//950 944//944 +f 951//951 944//944 950//950 +f 944//944 951//951 945//945 +f 952//952 945//945 951//951 +f 945//945 952//952 946//946 +f 953//953 946//946 952//952 +f 954//954 955//955 947//947 +f 948//948 947//947 955//955 +f 948//948 955//955 956//956 +f 956//956 949//949 948//948 +f 949//949 956//956 950//950 +f 957//957 950//950 956//956 +f 950//950 957//957 951//951 +f 958//958 951//951 957//957 +f 951//951 958//958 952//952 +f 959//959 952//952 958//958 +f 952//952 959//959 953//953 +f 960//960 953//953 959//959 +f 954//954 961//961 962//962 +f 962//962 955//955 954//954 +f 955//955 962//962 956//956 +f 963//963 956//956 962//962 +f 956//956 963//963 957//957 +f 964//964 957//957 963//963 +f 957//957 964//964 958//958 +f 965//965 958//958 964//964 +f 958//958 965//965 959//959 +f 966//966 959//959 965//965 +f 959//959 966//966 960//960 +f 967//967 960//960 966//966 +f 961//961 968//968 962//962 +f 969//969 962//962 968//968 +f 962//962 969//969 963//963 +f 970//970 963//963 969//969 +f 963//963 970//970 964//964 +f 971//971 964//964 970//970 +f 964//964 971//971 965//965 +f 972//972 965//965 971//971 +f 965//965 972//972 966//966 +f 973//973 966//966 972//972 +f 966//966 973//973 967//967 +f 974//974 967//967 973//973 +f 968//968 975//975 976//976 +f 976//976 969//969 968//968 +f 969//969 976//976 977//977 +f 977//977 970//970 969//969 +f 970//970 977//977 978//978 +f 978//978 971//971 970//970 +f 971//971 978//978 979//979 +f 979//979 972//972 971//971 +f 972//972 979//979 980//980 +f 980//980 973//973 972//972 +f 973//973 980//980 981//981 +f 981//981 974//974 973//973 +f 975//975 982//982 976//976 +f 983//983 976//976 982//982 +f 976//976 983//983 984//984 +f 984//984 977//977 976//976 +f 977//977 984//984 985//985 +f 985//985 978//978 977//977 +f 978//978 985//985 986//986 +f 986//986 979//979 978//978 +f 979//979 986//986 987//987 +f 987//987 980//980 979//979 +f 980//980 987//987 988//988 +f 988//988 981//981 980//980 +f 983//983 982//982 989//989 +f 989//989 990//990 983//983 +f 983//983 990//990 984//984 +f 991//991 984//984 990//990 +f 984//984 991//991 992//992 +f 992//992 985//985 984//984 +f 985//985 992//992 993//993 +f 993//993 986//986 985//985 +f 986//986 993//993 994//994 +f 994//994 987//987 986//986 +f 987//987 994//994 995//995 +f 995//995 988//988 987//987 +f 990//990 989//989 996//996 +f 996//996 997//997 990//990 +f 990//990 997//997 991//991 +f 998//998 991//991 997//997 +f 991//991 998//998 999//999 +f 999//999 992//992 991//991 +f 992//992 999//999 1000//1000 +f 1000//1000 993//993 992//992 +f 993//993 1000//1000 1001//1001 +f 1001//1001 994//994 993//993 +f 994//994 1001//1001 1002//1002 +f 1002//1002 995//995 994//994 +f 997//997 996//996 1003//1003 +f 1003//1003 1004//1004 997//997 +f 997//997 1004//1004 998//998 +f 1005//1005 998//998 1004//1004 +f 998//998 1005//1005 999//999 +f 1006//1006 999//999 1005//1005 +f 999//999 1006//1006 1000//1000 +f 1007//1007 1000//1000 1006//1006 +f 1000//1000 1007//1007 1008//1008 +f 1008//1008 1001//1001 1000//1000 +f 1001//1001 1008//1008 1009//1009 +f 1009//1009 1002//1002 1001//1001 +f 1003//1003 926//926 1004//1004 +f 929//929 1004//1004 926//926 +f 1004//1004 929//929 1005//1005 +f 931//931 1005//1005 929//929 +f 1005//1005 931//931 1006//1006 +f 933//933 1006//1006 931//931 +f 1006//1006 933//933 1007//1007 +f 935//935 1007//1007 933//933 +f 1007//1007 935//935 1008//1008 +f 937//937 1008//1008 935//935 +f 1008//1008 937//937 938//938 +f 938//938 1009//1009 1008//1008 +f 938//938 939//939 1010//1010 +f 1011//1011 1010//1010 939//939 +f 1010//1010 1011//1011 1012//1012 +f 1013//1013 1012//1012 1011//1011 +f 1012//1012 1013//1013 1014//1014 +f 1015//1015 1014//1014 1013//1013 +f 1016//1016 1017//1017 1014//1014 +f 1014//1014 1015//1015 1016//1016 +f 1018//1018 1019//1019 1017//1017 +f 1017//1017 1016//1016 1018//1018 +f 1020//1020 1021//1021 1019//1019 +f 1019//1019 1018//1018 1020//1020 +f 939//939 946//946 1011//1011 +f 1022//1022 1011//1011 946//946 +f 1011//1011 1022//1022 1013//1013 +f 1023//1023 1013//1013 1022//1022 +f 1013//1013 1023//1023 1015//1015 +f 1024//1024 1015//1015 1023//1023 +f 1025//1025 1016//1016 1015//1015 +f 1015//1015 1024//1024 1025//1025 +f 1026//1026 1018//1018 1016//1016 +f 1016//1016 1025//1025 1026//1026 +f 1027//1027 1020//1020 1018//1018 +f 1018//1018 1026//1026 1027//1027 +f 946//946 953//953 1022//1022 +f 1028//1028 1022//1022 953//953 +f 1022//1022 1028//1028 1023//1023 +f 1029//1029 1023//1023 1028//1028 +f 1023//1023 1029//1029 1024//1024 +f 1030//1030 1024//1024 1029//1029 +f 1031//1031 1025//1025 1024//1024 +f 1024//1024 1030//1030 1031//1031 +f 1032//1032 1026//1026 1025//1025 +f 1025//1025 1031//1031 1032//1032 +f 1033//1033 1027//1027 1026//1026 +f 1026//1026 1032//1032 1033//1033 +f 953//953 960//960 1028//1028 +f 1034//1034 1028//1028 960//960 +f 1028//1028 1034//1034 1029//1029 +f 1035//1035 1029//1029 1034//1034 +f 1029//1029 1035//1035 1030//1030 +f 1036//1036 1030//1030 1035//1035 +f 1037//1037 1031//1031 1030//1030 +f 1030//1030 1036//1036 1037//1037 +f 1038//1038 1032//1032 1031//1031 +f 1031//1031 1037//1037 1038//1038 +f 1039//1039 1033//1033 1032//1032 +f 1032//1032 1038//1038 1039//1039 +f 960//960 967//967 1034//1034 +f 1040//1040 1034//1034 967//967 +f 1034//1034 1040//1040 1035//1035 +f 1041//1041 1035//1035 1040//1040 +f 1035//1035 1041//1041 1036//1036 +f 1042//1042 1036//1036 1041//1041 +f 1043//1043 1037//1037 1036//1036 +f 1036//1036 1042//1042 1043//1043 +f 1044//1044 1038//1038 1037//1037 +f 1037//1037 1043//1043 1044//1044 +f 1045//1045 1039//1039 1038//1038 +f 1038//1038 1044//1044 1045//1045 +f 967//967 974//974 1040//1040 +f 1046//1046 1040//1040 974//974 +f 1040//1040 1046//1046 1041//1041 +f 1047//1047 1041//1041 1046//1046 +f 1041//1041 1047//1047 1042//1042 +f 1048//1048 1042//1042 1047//1047 +f 1049//1049 1043//1043 1042//1042 +f 1042//1042 1048//1048 1049//1049 +f 1050//1050 1044//1044 1043//1043 +f 1043//1043 1049//1049 1050//1050 +f 1051//1051 1045//1045 1044//1044 +f 1044//1044 1050//1050 1051//1051 +f 974//974 981//981 1052//1052 +f 1052//1052 1046//1046 974//974 +f 1046//1046 1052//1052 1053//1053 +f 1053//1053 1047//1047 1046//1046 +f 1047//1047 1053//1053 1054//1054 +f 1054//1054 1048//1048 1047//1047 +f 1055//1055 1049//1049 1054//1054 +f 1048//1048 1054//1054 1049//1049 +f 1056//1056 1050//1050 1055//1055 +f 1049//1049 1055//1055 1050//1050 +f 1057//1057 1051//1051 1056//1056 +f 1050//1050 1056//1056 1051//1051 +f 981//981 988//988 1058//1058 +f 1058//1058 1052//1052 981//981 +f 1052//1052 1058//1058 1059//1059 +f 1059//1059 1053//1053 1052//1052 +f 1053//1053 1059//1059 1060//1060 +f 1060//1060 1054//1054 1053//1053 +f 1061//1061 1055//1055 1060//1060 +f 1054//1054 1060//1060 1055//1055 +f 1062//1062 1056//1056 1061//1061 +f 1055//1055 1061//1061 1056//1056 +f 1063//1063 1057//1057 1062//1062 +f 1056//1056 1062//1062 1057//1057 +f 988//988 995//995 1064//1064 +f 1064//1064 1058//1058 988//988 +f 1058//1058 1064//1064 1065//1065 +f 1065//1065 1059//1059 1058//1058 +f 1059//1059 1065//1065 1066//1066 +f 1066//1066 1060//1060 1059//1059 +f 1067//1067 1061//1061 1066//1066 +f 1060//1060 1066//1066 1061//1061 +f 1068//1068 1062//1062 1067//1067 +f 1061//1061 1067//1067 1062//1062 +f 1069//1069 1063//1063 1068//1068 +f 1062//1062 1068//1068 1063//1063 +f 995//995 1002//1002 1070//1070 +f 1070//1070 1064//1064 995//995 +f 1064//1064 1070//1070 1071//1071 +f 1071//1071 1065//1065 1064//1064 +f 1065//1065 1071//1071 1072//1072 +f 1072//1072 1066//1066 1065//1065 +f 1073//1073 1067//1067 1072//1072 +f 1066//1066 1072//1072 1067//1067 +f 1074//1074 1068//1068 1073//1073 +f 1067//1067 1073//1073 1068//1068 +f 1075//1075 1069//1069 1074//1074 +f 1068//1068 1074//1074 1069//1069 +f 1002//1002 1009//1009 1076//1076 +f 1076//1076 1070//1070 1002//1002 +f 1070//1070 1076//1076 1077//1077 +f 1077//1077 1071//1071 1070//1070 +f 1071//1071 1077//1077 1078//1078 +f 1078//1078 1072//1072 1071//1071 +f 1079//1079 1073//1073 1078//1078 +f 1072//1072 1078//1078 1073//1073 +f 1080//1080 1074//1074 1079//1079 +f 1073//1073 1079//1079 1074//1074 +f 1081//1081 1075//1075 1080//1080 +f 1074//1074 1080//1080 1075//1075 +f 1009//1009 938//938 1010//1010 +f 1010//1010 1076//1076 1009//1009 +f 1076//1076 1010//1010 1012//1012 +f 1012//1012 1077//1077 1076//1076 +f 1077//1077 1012//1012 1014//1014 +f 1014//1014 1078//1078 1077//1077 +f 1017//1017 1079//1079 1014//1014 +f 1078//1078 1014//1014 1079//1079 +f 1019//1019 1080//1080 1017//1017 +f 1079//1079 1017//1017 1080//1080 +f 1021//1021 1081//1081 1019//1019 +f 1080//1080 1019//1019 1081//1081 +f 1082//1082 1083//1083 1084//1084 +f 1084//1084 1083//1083 1085//1085 +f 1085//1085 1083//1083 1086//1086 +f 1086//1086 1083//1083 1087//1087 +f 1087//1087 1083//1083 1088//1088 +f 1088//1088 1083//1083 1089//1089 +f 1089//1089 1083//1083 1090//1090 +f 1090//1090 1083//1083 1091//1091 +f 1091//1091 1083//1083 1092//1092 +f 1092//1092 1083//1083 1093//1093 +f 1093//1093 1083//1083 1094//1094 +f 1094//1094 1083//1083 1095//1095 +f 1095//1095 1083//1083 1096//1096 +f 1096//1096 1083//1083 1097//1097 +f 1097//1097 1083//1083 1098//1098 +f 1098//1098 1083//1083 1099//1099 +f 1099//1099 1083//1083 1100//1100 +f 1100//1100 1083//1083 1101//1101 +f 1101//1101 1083//1083 1102//1102 +f 1102//1102 1083//1083 1103//1103 +f 1103//1103 1083//1083 1104//1104 +f 1104//1104 1083//1083 1105//1105 +f 1105//1105 1083//1083 1106//1106 +f 1106//1106 1083//1083 1082//1082 +f 1107//1107 1108//1108 1084//1084 +f 1082//1082 1084//1084 1108//1108 +f 1109//1109 1110//1110 1108//1108 +f 1108//1108 1107//1107 1109//1109 +f 1111//1111 1112//1112 1110//1110 +f 1110//1110 1109//1109 1111//1111 +f 1113//1113 1114//1114 1112//1112 +f 1112//1112 1111//1111 1113//1113 +f 1115//1115 1107//1107 1085//1085 +f 1084//1084 1085//1085 1107//1107 +f 1116//1116 1109//1109 1107//1107 +f 1107//1107 1115//1115 1116//1116 +f 1117//1117 1111//1111 1109//1109 +f 1109//1109 1116//1116 1117//1117 +f 1118//1118 1113//1113 1111//1111 +f 1111//1111 1117//1117 1118//1118 +f 1119//1119 1115//1115 1086//1086 +f 1085//1085 1086//1086 1115//1115 +f 1120//1120 1116//1116 1115//1115 +f 1115//1115 1119//1119 1120//1120 +f 1121//1121 1117//1117 1116//1116 +f 1116//1116 1120//1120 1121//1121 +f 1122//1122 1118//1118 1117//1117 +f 1117//1117 1121//1121 1122//1122 +f 1123//1123 1119//1119 1086//1086 +f 1086//1086 1087//1087 1123//1123 +f 1124//1124 1120//1120 1123//1123 +f 1119//1119 1123//1123 1120//1120 +f 1125//1125 1121//1121 1124//1124 +f 1120//1120 1124//1124 1121//1121 +f 1126//1126 1122//1122 1125//1125 +f 1121//1121 1125//1125 1122//1122 +f 1127//1127 1123//1123 1087//1087 +f 1087//1087 1088//1088 1127//1127 +f 1128//1128 1124//1124 1127//1127 +f 1123//1123 1127//1127 1124//1124 +f 1129//1129 1125//1125 1128//1128 +f 1124//1124 1128//1128 1125//1125 +f 1130//1130 1126//1126 1129//1129 +f 1125//1125 1129//1129 1126//1126 +f 1131//1131 1127//1127 1088//1088 +f 1088//1088 1089//1089 1131//1131 +f 1132//1132 1128//1128 1131//1131 +f 1127//1127 1131//1131 1128//1128 +f 1133//1133 1129//1129 1132//1132 +f 1128//1128 1132//1132 1129//1129 +f 1134//1134 1130//1130 1133//1133 +f 1129//1129 1133//1133 1130//1130 +f 1135//1135 1131//1131 1090//1090 +f 1089//1089 1090//1090 1131//1131 +f 1136//1136 1132//1132 1131//1131 +f 1131//1131 1135//1135 1136//1136 +f 1137//1137 1133//1133 1132//1132 +f 1132//1132 1136//1136 1137//1137 +f 1138//1138 1134//1134 1133//1133 +f 1133//1133 1137//1137 1138//1138 +f 1139//1139 1135//1135 1091//1091 +f 1090//1090 1091//1091 1135//1135 +f 1140//1140 1136//1136 1135//1135 +f 1135//1135 1139//1139 1140//1140 +f 1141//1141 1137//1137 1136//1136 +f 1136//1136 1140//1140 1141//1141 +f 1142//1142 1138//1138 1137//1137 +f 1137//1137 1141//1141 1142//1142 +f 1143//1143 1139//1139 1092//1092 +f 1091//1091 1092//1092 1139//1139 +f 1144//1144 1140//1140 1139//1139 +f 1139//1139 1143//1143 1144//1144 +f 1145//1145 1141//1141 1140//1140 +f 1140//1140 1144//1144 1145//1145 +f 1146//1146 1142//1142 1141//1141 +f 1141//1141 1145//1145 1146//1146 +f 1147//1147 1143//1143 1092//1092 +f 1092//1092 1093//1093 1147//1147 +f 1148//1148 1144//1144 1147//1147 +f 1143//1143 1147//1147 1144//1144 +f 1149//1149 1145//1145 1148//1148 +f 1144//1144 1148//1148 1145//1145 +f 1150//1150 1146//1146 1149//1149 +f 1145//1145 1149//1149 1146//1146 +f 1151//1151 1147//1147 1093//1093 +f 1093//1093 1094//1094 1151//1151 +f 1152//1152 1148//1148 1151//1151 +f 1147//1147 1151//1151 1148//1148 +f 1153//1153 1149//1149 1152//1152 +f 1148//1148 1152//1152 1149//1149 +f 1154//1154 1150//1150 1153//1153 +f 1149//1149 1153//1153 1150//1150 +f 1155//1155 1151//1151 1094//1094 +f 1094//1094 1095//1095 1155//1155 +f 1156//1156 1152//1152 1155//1155 +f 1151//1151 1155//1155 1152//1152 +f 1157//1157 1153//1153 1156//1156 +f 1152//1152 1156//1156 1153//1153 +f 1158//1158 1154//1154 1157//1157 +f 1153//1153 1157//1157 1154//1154 +f 1159//1159 1155//1155 1096//1096 +f 1095//1095 1096//1096 1155//1155 +f 1160//1160 1156//1156 1155//1155 +f 1155//1155 1159//1159 1160//1160 +f 1161//1161 1157//1157 1156//1156 +f 1156//1156 1160//1160 1161//1161 +f 1162//1162 1158//1158 1157//1157 +f 1157//1157 1161//1161 1162//1162 +f 1163//1163 1159//1159 1097//1097 +f 1096//1096 1097//1097 1159//1159 +f 1164//1164 1160//1160 1159//1159 +f 1159//1159 1163//1163 1164//1164 +f 1165//1165 1161//1161 1160//1160 +f 1160//1160 1164//1164 1165//1165 +f 1166//1166 1162//1162 1161//1161 +f 1161//1161 1165//1165 1166//1166 +f 1167//1167 1163//1163 1098//1098 +f 1097//1097 1098//1098 1163//1163 +f 1168//1168 1164//1164 1163//1163 +f 1163//1163 1167//1167 1168//1168 +f 1169//1169 1165//1165 1164//1164 +f 1164//1164 1168//1168 1169//1169 +f 1170//1170 1166//1166 1165//1165 +f 1165//1165 1169//1169 1170//1170 +f 1171//1171 1167//1167 1098//1098 +f 1098//1098 1099//1099 1171//1171 +f 1172//1172 1168//1168 1171//1171 +f 1167//1167 1171//1171 1168//1168 +f 1173//1173 1169//1169 1172//1172 +f 1168//1168 1172//1172 1169//1169 +f 1174//1174 1170//1170 1173//1173 +f 1169//1169 1173//1173 1170//1170 +f 1175//1175 1171//1171 1099//1099 +f 1099//1099 1100//1100 1175//1175 +f 1176//1176 1172//1172 1175//1175 +f 1171//1171 1175//1175 1172//1172 +f 1177//1177 1173//1173 1176//1176 +f 1172//1172 1176//1176 1173//1173 +f 1178//1178 1174//1174 1177//1177 +f 1173//1173 1177//1177 1174//1174 +f 1179//1179 1175//1175 1100//1100 +f 1100//1100 1101//1101 1179//1179 +f 1180//1180 1176//1176 1179//1179 +f 1175//1175 1179//1179 1176//1176 +f 1181//1181 1177//1177 1180//1180 +f 1176//1176 1180//1180 1177//1177 +f 1182//1182 1178//1178 1181//1181 +f 1177//1177 1181//1181 1178//1178 +f 1183//1183 1179//1179 1102//1102 +f 1101//1101 1102//1102 1179//1179 +f 1184//1184 1180//1180 1179//1179 +f 1179//1179 1183//1183 1184//1184 +f 1185//1185 1181//1181 1180//1180 +f 1180//1180 1184//1184 1185//1185 +f 1186//1186 1182//1182 1181//1181 +f 1181//1181 1185//1185 1186//1186 +f 1187//1187 1183//1183 1103//1103 +f 1102//1102 1103//1103 1183//1183 +f 1188//1188 1184//1184 1183//1183 +f 1183//1183 1187//1187 1188//1188 +f 1189//1189 1185//1185 1184//1184 +f 1184//1184 1188//1188 1189//1189 +f 1190//1190 1186//1186 1185//1185 +f 1185//1185 1189//1189 1190//1190 +f 1191//1191 1187//1187 1104//1104 +f 1103//1103 1104//1104 1187//1187 +f 1192//1192 1188//1188 1187//1187 +f 1187//1187 1191//1191 1192//1192 +f 1193//1193 1189//1189 1188//1188 +f 1188//1188 1192//1192 1193//1193 +f 1194//1194 1190//1190 1189//1189 +f 1189//1189 1193//1193 1194//1194 +f 1195//1195 1191//1191 1104//1104 +f 1104//1104 1105//1105 1195//1195 +f 1196//1196 1192//1192 1195//1195 +f 1191//1191 1195//1195 1192//1192 +f 1197//1197 1193//1193 1196//1196 +f 1192//1192 1196//1196 1193//1193 +f 1198//1198 1194//1194 1197//1197 +f 1193//1193 1197//1197 1194//1194 +f 1199//1199 1195//1195 1105//1105 +f 1105//1105 1106//1106 1199//1199 +f 1200//1200 1196//1196 1199//1199 +f 1195//1195 1199//1199 1196//1196 +f 1201//1201 1197//1197 1200//1200 +f 1196//1196 1200//1200 1197//1197 +f 1202//1202 1198//1198 1201//1201 +f 1197//1197 1201//1201 1198//1198 +f 1108//1108 1199//1199 1106//1106 +f 1106//1106 1082//1082 1108//1108 +f 1110//1110 1200//1200 1108//1108 +f 1199//1199 1108//1108 1200//1200 +f 1112//1112 1201//1201 1110//1110 +f 1200//1200 1110//1110 1201//1201 +f 1114//1114 1202//1202 1112//1112 +f 1201//1201 1112//1112 1202//1202 diff --git a/src/Drawie2Sample/Cube.cs b/src/Drawie2Sample/Cube.cs deleted file mode 100644 index 1860ce0..0000000 --- a/src/Drawie2Sample/Cube.cs +++ /dev/null @@ -1,62 +0,0 @@ -using Drawie.Backend.Vertie.Core; - -namespace Drawie2Sample; - -public class Cube : Mesh -{ - private static readonly float[] Vertices = new float[] - { - //X Y Z Normals U V - -1f, -1f, -1f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, - 1f, -1f, -1f, 0.0f, 0.0f, -1.0f, 1.0f, 1.0f, - 1f, 1f, -1f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, - 1f, 1f, -1f, 0.0f, 0.0f, -1.0f, 1.0f, 0.0f, - -1f, 1f, -1f, 0.0f, 0.0f, -1.0f, 0.0f, 0.0f, - -1f, -1f, -1f, 0.0f, 0.0f, -1.0f, 0.0f, 1.0f, - - -1f, -1f, 1f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, - 1f, -1f, 1f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, - 1f, 1f, 1f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, - 1f, 1f, 1f, 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, - -1f, 1f, 1f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, - -1f, -1f, 1f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, - - -1f, 1f, 1f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, - -1f, 1f, -1f, -1.0f, 0.0f, 0.0f, 1.0f, 1.0f, - -1f, -1f, -1f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, - -1f, -1f, -1f, -1.0f, 0.0f, 0.0f, 1.0f, 0.0f, - -1f, -1f, 1f, -1.0f, 0.0f, 0.0f, 0.0f, 0.0f, - -1f, 1f, 1f, -1.0f, 0.0f, 0.0f, 0.0f, 1.0f, - - 1f, 1f, 1f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, - 1f, 1f, -1f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, - 1f, -1f, -1f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, - 1f, -1f, -1f, 1.0f, 0.0f, 0.0f, 1.0f, 0.0f, - 1f, -1f, 1f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, - 1f, 1f, 1f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, - - -1f, -1f, -1f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, - 1f, -1f, -1f, 0.0f, -1.0f, 0.0f, 1.0f, 1.0f, - 1f, -1f, 1f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, - 1f, -1f, 1f, 0.0f, -1.0f, 0.0f, 1.0f, 0.0f, - -1f, -1f, 1f, 0.0f, -1.0f, 0.0f, 0.0f, 0.0f, - -1f, -1f, -1f, 0.0f, -1.0f, 0.0f, 0.0f, 1.0f, - - -1f, 1f, -1f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, - 1f, 1f, -1f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f, - 1f, 1f, 1f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, - 1f, 1f, 1f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, - -1f, 1f, 1f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, - -1f, 1f, -1f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f - }; - - private static readonly uint[] Indices = - { - 0, 1, 3, - 1, 2, 3 - }; - - public Cube() : base(Vertices, Indices, Indices.Length) - { - } -} \ No newline at end of file diff --git a/src/Drawie2Sample/Drawie2Sample.csproj b/src/Drawie2Sample/Drawie2Sample.csproj index 7715ef2..88f2093 100644 --- a/src/Drawie2Sample/Drawie2Sample.csproj +++ b/src/Drawie2Sample/Drawie2Sample.csproj @@ -15,16 +15,7 @@ - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - + PreserveNewest diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index c2ebc00..1341894 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -44,21 +44,15 @@ private void RenderImGui(double dt) protected override void OnInitialize() { Material mat = new Material("Basic", [BuiltInShaders.BasicVertexShader, BuiltInShaders.UnlitFragmentShader]); - var tex = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice.CreateTexture(new TextureDesc(){ - Width = 512, - Height = 512, - Format = TextureFormat.RGBA8_Unorm, - Depth = DepthFormat.NoDepth, - }); - var surf = DrawingBackendApi.Current.CreateRenderSurface(new VecI(512, 512), tex, SurfaceOrigin.BottomLeft); - surf.Canvas.DrawCircle(256, 256, 128, new Paint(){Color = Colors.Red}); + var surf = new NativeTexture(new VecI(512, 512)); + surf.DrawingSurface.Canvas.DrawRect(0, 0, 512, 512, new Paint(){Color = Colors.Red}); + var img = surf.DrawingSurface.Snapshot(); + + mat.AddTexture(img); - var pixelSpan = Surface.Load("Images/silkBoxed.png").DrawingSurface.PeekPixels().GetPixelSpan(); - mat.AddTexture(new OpenGlTexture(OpenGlDevice.DEBUG_API, 359, 359, pixelSpan, PixelFormat.Bgra)); camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); - Cube cube = new Cube(); - cube.Transform.Position = new Vector3(0, 0, 0); + Mesh mesh = new Mesh("Assets/teapot.obj"); RegisterMouse(window.InputController); @@ -71,7 +65,7 @@ protected override void OnInitialize() { targetTexture.Clear(); - targetTexture.DrawMesh(cube , mat, camera); + targetTexture.DrawMesh(mesh, mat, camera); using Font defaultFont = Font.CreateDefault(); Paintable color = new ColorPaintable(Colors.White); diff --git a/src/Drawie2Sample/Images/dancing-dog.gif b/src/Drawie2Sample/Images/dancing-dog.gif deleted file mode 100644 index 39d4366fa73781e000753a685833931f5dae8a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227225 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 _+moOD$d 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 JR;ZW^R?T&R}Lqjn*b*v=H;QTAG$I96hG7 zqGTo1koI$d)F5wIY1s=c$P2mjWTNOo+ymH~;1&Zn~ORtU-h1s(JELhDg(6;JlY|uAgz&4;BMGXr|8G%*VF0@@Pb@zsT!{i$lJG7_1 z8g5$lI+OeB+4;ovlafZ&Wcdc9#+@-0Dv!z77} z8|Xu9^#Tofmzc12+YX$G)5!8DYK!jUg$MRZ(uoJonPi!HlH!iO=jRta%$vqyhI zF7`@35r;FFPSjKk#QxG$4YbibVJV_%`^*}u)qn!FcrCMLL|i6=8SYyhW%kTkb;@I2 z=Fns@oh0cUL5ZXL3%H5qOMl7q$t5Ue*(vj1Rc6G$9n&;OX4K^Wjeq3=i=F2Fb*e-_Z17Dv+^%OoO8a>enBK4|hSCfA8 z&HwYtWR^0_E8Mg01N8}O%b3U@*R!N(mVBk4*D^@wqV^YC@!g|B2NArwmWj7uv!{ln zJ`hhW3swlQxt1G0Ru4~+5Qy=3_vRXRZSMNGf`t_)KO>$uGV=?s_7P?7(Mx@y5W{2- zC7bmV?h({~D5R}7+mkn8rT}|1C#@2~-Czm^WFJ1-=vUNOH7rsnnIuo#ioOMCu{U`19v><%d&-vR65X0E>wzyhEu_ zv0J`ib(lNa-JDYnQ|Ka%Kr~oyxe#Jyty0p2rWt&ht7dlz!)yR`005Fh1!zA?6^NQ` z0A|m(h=y&$VQ3i7jtcH>WfpPwg5&n71b`TcTJrD1D92Nhh6Hy4kW@ zCJqbys4hqqJQ6JqJQ9Zu!nN=uU?vmE#{cqK6PJY`qD#|mNpBc53r&O7U7$mhZ^${DPK z3MU)$8O(z;AD}AL)<>CJ27w&OG!_MHD)VqFL~RAg%7Wd5{lS1Z7$ouQulIlLCZ| z*jatM-!?oG(vu@3aPxOw!qI6u1)mNM!R2Z#tyS8^we!-3^F&X$8`umOhJp+rtNK0| zd~uDe^1WaggU2!-Xq{8@;9yBc4YU7Zv>QyVgBA1)S%V^nJzI8J4jeA9NK5bWjZud# z5u>k)30Q3PVLP*I8hK^$Q~t8Xd_VRv4=g`H&E(e9mP~@=ZgQUC9SC~07lt^8J!B0P zj#IB(2lK1XU~5fRpSxIrl%fa%-dHW(za zd#z;%bdR$8jVr4-eF6=^zTZ4KzN7e4X-mJjtk__FT{9XxC@ed}yHSPk8&f0IJl|4wCA11r$~^ z#_jBRKi|VXpZ^%!@>XZmV2aKog&k(8wb)YK`pcqoWV&P@38Sp-K6*sFE3a{g`j6nP zauZw6y5W=R>30t2yKFfR$ZWV!0F_^HU#JUD2A{D0{rntj1@R6ndgid(sNK^UMqh`k zF&@Q*(yi^YeSd;q*EE~~RPxDN3~Lcv*5Nl-Y1+^0 z>>8}nO3SSnTb@;BZ!9SdSxsB3yB9$x{QdHlkM%^73U9pI*8GosKfLm-%GLuYg8^ag z-u>6KbdIwKcXgGC4xr3s`Qi*rLcUbLoXo44JCaEWgog#s3r-NCY|zz zIHllk@xf8t=(1!Q`II{htT*Hga1o+&uncb6C}i@yxRb)7%4-6?7H5wr*F@K5zK)#c^~BEZ)HytJF8w+K1FqXe4PfBM zL`pvf+%BD+f`dt|NtAJLFeD&&4CLXn0I}07?oqyNv*P(w*%=0O9Lne>H(~o!J~G zBKrtALU$#OlqLMhs>}810%*}m0{66=^wU9&sTe6?4(_F(D0)=jlZ@mLWmYOS@BLBU zIc4QdX@S0zsQfaxe%TaKmX5@}%EvxIenS+0H@|+mn=J3UQM|`eodBgp0#w%0Iv81X zyh-f{ByA0KJIJ2tummPza3TVcRVu*Kavr)C92v@i>cEw$SUr0&9V4L^!-cU-h0!ZQ zl1`ja@n9@AZ-$4g(8g0kW&KcSS{fIlDU(?6ix6io{^=*gXow}4QDm%LY?f)+TW`4! z&#Fp;x$}hDuD}`H$P|2~<12XYBoRddU6L_qFP7*dl(Hn`JT&LHRi+J|0umX_ZH~#I z&0?~x8U!A)dQ@Pjav_Ww69t2mV1k2(!${~%cX4hivFH^sV#5WwMz1+TWi3ufWSpeK z^xSS346!@}6bECA4W=TDe$~#+2OnzJdR%6P(@IiKqvyDiW+vooJabAUv>(s6(cCPKf*Lv32*`o#^l893HI!VL^z&F69tC*|xUVMJ<@4vnSl+nGOL9-?a* z5m6Z0%VTbjyfq&W!_~yTL>BfJ`WIBcEn~GMvit!+agpq5n!Ky~H8)O}Dg=9Ztw)f3 zi@{$B6<2*4zqmIR4cw?mgYjd)w0Sr`hUy^O4&+Ocrm^1smE@KbvW-E(fiU*@COkho zK9b`pxx<5zgu}#zw7ci`@e5V5O2y?7_-Y8HtTpq z^r9gt+3+`|F>?U63pDYUcL|#xir1$T7gcM`327hN+l+ptGSV#@pInco0sBvHp2q4L zS>jd^>ymxNIityg(e61-!_!#U|1@df03a1iU^EIzsw*Dl;wsaV^W~<_Gs!Zw1aN4w zr}Av^5CS-g1inJT$b~}L4&e(BG}enE3(Co0DJwtAcS2-Q)9w0ruPX?XUnG@i=YG8t zcfG2yZO;{GDRX0PK22&K4u6R{`NedMYCoAm{D)_q?15`L;ksoy`m8!;N8}EbkPY2z z)~X6{4mpadS>+k^7FvpI5O-oru3T0i=C6{ONM=Y;i*iBF1!JzYZlPun8z0uI9RO7^ z@7*`-4Z#>E9A3Nes#V)6G0_L8I>1|kxS>C2dAOfi4xxD##3vN&f_+0r4A+mUxI%V^_B=BGEXYs7SRSqN~LJ9#4MT;{v4^1=l+&w3!&L{3j+d#$N43OHodc+E0zwfC3cX z{gb+GJQm|GKo8UfSgM**u$YWZ1A%HCZ{-MX7T#d52O^#iC`@NJe`3ya=KE^^tbM^b z%Cq#T)Q|JSxlRqQb&J*pN2J9g#26zd3^8TFM=D#1f;6z^Z0(18!E%lixR%^9mbi?6 zvMqPDehOhe`K0zi6RS?gK$0ZtKA(Ux;EXRzlBgb}5AxX$9qgbTYSl@Yxg#vVlBNVo zi+s@Q^HXYowxG7X;55Q<)o_O9-PLR{W8%WNKvj z`doyuXoLc-b?%d%7=xY5k2mqw%p4ABO|)FYUJveGzWJN|a%Ga-CiBHLW!5|z$*n=l z@8%UhrB~XdU^hKdqyDsoe(sr`rM6kM zZ55;_wO@3N<5eNo`bs=|>Vvms5nH>rcCu%+2&Ws%RZ;p`x|VUW7wbTx zmj3|-3}0L5(;sUBhSEb@h#Xz7q06ubG3G@EYcFU}5{HXf<-q)*^^!Kjy zd{;Iu$sJm#xo|GX%5z}kt%)pa(UUsB#C1Z1UdxWKAX-$fkNmKx*hKTj6WNsiMwV{9 zlzdu~;%$88P%q_?xYo>BK`g}==c>E;7M)c0yZ^2>p0=hyd%bqM!keuxbHCSfdO~UX zYt53S&xvshDMuk}X0 zw=g!!yh9=)^j<#PX>P@^E^-&W|8(0mTSakJooDCz_DO zOSpj?bYR*+tRTwjp)9O!Y{jD+&Q1k;gwhOZj+}H3Jkmj>5&OEg4?gEV12e9I9;IhV$*jT5nQ9Qsuk;0>K~1upF9kR^k!)=6*!`IZMbW; zBtbbvKOzBG`@HkzjteW{AAu@!uJ3EM@o67G)jp1QRe7YpntG)Jd2o;VpY+;w+6jZ{ zCjMJl*S?a{zbb=&wE(cg_ireH-^a`WtVr$l;>VYM3adIU+hTT1HhIW@CpTdzD#WNg z9?3bF+Cu*=(>G=$BG8%iW3iyQo>ebM%?0aN2O4w~9wrF@ySN9hOIhb14Sc<%QT~cP zbmS`UdAHyMrxVj`mM)JC{8`P>V4TaNXmY*gu&|*Gt*ni+dExBr%I0l!l(HDPO{_j= zgrrO3Szx*Lf#!+)0iB;c&~eKZ-n&e>`GVTXz#mQEFPC(+KYa&rJ)0mJQLOl+o$Hp` z9Gl41NQZWAo2pm${J98@bt4sP^V~*$hFvB?E3)lVgB+}bM)j9;1=c~;CpN{>0nIiQ zwo*1VV&^}Ye0%ol@%5Bz^^CY38@49%rcjP=q0i#l5@U)tFWOmXb60gG>!9BKUFi*c zn`Gn(m-j@6g%{5#U!TY_`2DvU011L+pTy2L33_kv1=L6)nMMFGR^k{t!n3V0J-C@9 zUOsn>nu4C^F`DX^;P1hY#Vu!9K!q-&ZJ;i4^A>$be0)3mqhnyr&1@-{H6!+xK? zdQSeASyT+Sz}m3`8=wE)Ca0N#wjrAk4D6?*yghH4V_z7wF)!(1f6`ZSdP205E-K3x z5-o)x0XjET2=9pTIUfdJr z{X-qI`$cN8a8lw?gzFrHT4K7o)ju#UTOU(?0vo z4ulVFZ2@9PrM5mp$a`(_c5v?=U8BYPYU$a(FeLk|u~y;ygRAo%_f- zO2}x_kuw}uS2lcX)xhh*h_u&Oh!xG3EcTM7G`+dlljT~N%EhOxh0bc878{`JM*OQtpZ$^Ou+k#5<^o|Z~BG8prsc(T%p+yn^ydPVGZve+!Jv1TFFts)T-R> zhC;YOg!oQEc7DbqzRscX%C_jE3$g%8t6$;;n8nCEgp&Y&A6VXP0R2>fA7i@Xxx|at zwgRRs&1#az5riNbYs>xdvkn9IJ|D9LZ3DpYOS~t#@13EL%~xp({^mR)M`YpXZs=iV z8CWsT6hY=N(kmUv2NE`LmeL~+n}5MSdb3{z5z+w;*s;T`D{Px+H;yIOG*LAXN9&*w z&QfZcl=v{{0>;bR#$VLMD-4#?U~vMN;#k=F5TNDL&=K807Zus%iN=qy{h?<%x1QsB zqD4Y?*4<<2w+k{B<6p?uK)zz~NrMB1C9PU>Y;Dd3_YZ=;PTLdvX_MArUrnT{lmOB^ zr|b}mD3=2&-_c-{^$LDOz(wZ9VcwVUw+Lg_5R|E`q%@QDny(^rAUJ!a&V)zoOxr{& z=wv9!IXKzx#)=zj(7ikSQ*D6gi|J(jla&!3+TN(_y&*7Paa}BWi8imbH*7>k70h#v zoZ)8z@vSKoZWxm8ww9!_`!0Gu%qfy8oPV-wT5!n*)AVEHFgG?0PJl(E*}%0U5$=Q`?b>! zFxLWgMc072`bjU(7t`P_IJnu#YshuZ((aq>sp}?69N7{vLOy+|{}!n*7cDUBSJSzG zxJ5Il0z+%U9{gMgGdVT+#dq8M-SPsuEz-)iN%iA;vthRrDg|Ktr$5m{0%`Xu(_)^M^gm;EB z{n2rEJH01)@t1}_Pn6SfKS9Vi6cLk8Uu z+xw8otL2M`Vcp1^^dXMihswY_bq=~7)MDFWFy+{{- zO-tHThzD>^M+`JWxWZ4E=!Nd}u^zjD#l-86xfC{q==g-0I!mcs}FOJzM8m7w@F&>eiUV9+Q{F{P^M7= z!gz2LUHxvu0d^?#=ClG!q?zl1+=gGc1cx1;T3=Lopw=X^V5ym&E5+Cn9{0JQ+?xx( z7@EBKXlLYh-B;#nRzd%J&Bbty$fl+bX`X`A( z|ER>6Zz51rso}hWvtRZ!yn%}4sb0Jx`jFG~#;HqD6I-!h=Sj<+!yR!l=+@#bLhR-q zBgx|@7b_(?@S8$cL8CY6NF6z`0|C!;Wby6fKt14!%OBGpP4)NmS1dUhd&VkrYP5En z@fwES@fplxpYP9)N2)M4U}n-WHTUgP4t);53>72yr zn;g=855nk>WTa*eiAJtT1S0N}jnmzF^&`vaFBypZHAG%FKo9jO+X9?93iiiC{Rswn zse?RE2E}p=YEfWCs$p`s!Gjq#?rzvMJj86C7zPG<1AxC~`pxj-Au=LLB%yKZ$4c6I z+W?>$XHI8O&Y%0|c~o&C>m@I7*!@Hn-7A`gOpu903ne?I1zX!1c`T87`0fPmkg6a0ifY~V9b`PrpQ3Q4=ExN?9NTZBq{7W z08VDcm1z`Z$f$^xF|QvvVUMIw04Nbj8HAg;No1QWI>HMSxFQ;e0=^btdR?Tr5UC5` zFBrGyc-)=JM^NX{euTi8-2KQjM;`m|7bY+Zd=XW54gfW4g_=!iu%eC3do+$5_3GVa z9hOSl7-JXkX^qNt_Ja>%icB?Wa7`uAOitl@WKG3S;TRyin+zuabTi@p z8^!Og=H*I1>SL~!a)bG=$z29vHrJR?dSk!tp>@$Lk$vEcIYhUjp1Zo{u}C0R zTad2%;)&rkE#lQ;;8i)JpEHw)oKmQD3#(_#_fa8lbj^ZKqu>#7FE~9S2nIx3i-`ic zGP_h+=-IQT7r#GNJ~lP)P&n5O;wBIQS|vO(kbtnvsRjC;wWUANEU@^tTh^n1DWZ|! zBNs>Dgg<4NsAW2KcN3?pu9SbhyHI8bD&P9(;}NAa6wHbPvChMUzZ>cc)Y*2Y-Y>Qa ze^t}ra|fN%XCdxANcP*yh?fT1qbSfHy=~d;A99Rnd9V%!2fKxbF`uC`StL zJnI7LhvVrWg7fpdQknuM0R|&L&I7atX8_|H#EXb0?>$RC+YAdm1+ZA83Yn%O2;>XS zCRIt6d2VCg*3Z7DLA{O5=Zq*b)n$n!q*yon>R^%33eZ!F^mS%30ffULa%_p+Dnh(Z zMx~S(X|R-{u;8b7RkF4>xlO<+!W0DrtmtiOX3 zgM6yH_3X}28BEK32+921aN=8s1Z8!<`UA0x^6?PUrLx6R5@{u_}oa{@DLF4(=e8?DABS+l6(=6O|#oGA|u(-OjZ z2zAV_G338j z`m8UN-R>z zl$=px`w4mGg!Vl7X|tk2bIy7QQI-ZP3_>H^03YrfUS7`!^0Buq0z4Te6`QInGPxrF zk&+bRmHE_A>}u72%S4m_eP0l5e-)B8U{VBX0-51@%mT znOv&6bgB^gqVga`YYisN0Dko3VLTUVt{^#XAz8Hm!PfGDe7r?Myx!4J* zeEgyNclGydXh@awC3k{vXpPsAkdr~ld*wlJ;tK593)DZMtT6&YpqoUn;AsBA{>TCgaws;o3O1fr|?nxv< z*I-q%+)HZtl~li@ZjG-&-utk(ULk|^;aoMhW(hxs0y*ajrZ<2>Ok#<4 z{+jk&r|uj@w-#?;2303Q-Ds(Sb}pp-W~6pKGTO78vW*ELrn0s0tXP|EgU%C=j?YHBGIPu$Rb>Ui_>@|C;3CmsmO zWvybPNVH=SGk#iloR8)Ce-r3k6{aZH%ket#FHn+hIu;Zs z95mR1a++6=a7)!VB0+J1@FS>YypJ#)E{_Y5Z}pcy;(JjHK0I=`uuK%(d81mPUGgKH zQwgd;b#XoW-YtFA(Bl0Mif_i8qt`zdgC>fcMFtRXI}QgEodWDF0mnZ;dGxB4JX~{q zC^}QpYJfsk%l(jY2va@~F-IA1_S2n%I%Sg3k-<(=P;0uMI+lW9>^M$) zLtQ_oy;4X+m!a^AP0Io0^Ps=(RQ8+WF~tDLN!pOoAzKS)4m|SJi79^XhyGrb?fWVD zkCb#@&k2|9T3-%Zrw|k{fRUr>hRm4)jO?KUDm#CC4f-hA!xXlI5kZWdy@IIy6r%Jc zq<@pCD~#EUGSiP&&%6?Gjp9y)IhVsNu^9_IAD~*F>&-q`M1%la{0|2Go7<2RRqxE^ z(>r00->y&T4#Josq0(#-%u*3Q^gs4?1>Bw3mc0f{B*KD%6xrs1Z1bRrs4~J`Q7vxP zMFvEe;`EsAIt(nV!XN~1hCMO3GJZKsw-i5-ANGp}ZjFW71YP+x_lcEAu~`YWoVxO# zS>RtUfN-RLa->i45v-}%KRPO0r1eQsEihy~+pL>nC&_j4)@~#}mZ*0W9ujb=k0(O= z<*OgzK_L&fx8J#hNdT@hfYDf>ayf7p0Osf>$+g#yF??5uc_?=k?p=Vz8Iqe=mbT_l6N^sO!~7_O5pOp z^kzxMfl{O{ie1~7WJU!hyNsWk52r;v=cGT^H2;XazM5LkrspXuk)&whFup9h>W}`raf(5^CxDi%=12a+Q!Cb`r9dd~+8+2C=I3K@ z5lsfDbJy`#Tzt?#By+~MAGembx>ogHEGy%|*D>G(98AChbYnVbC6hISk10m;m+6hX zbfvoik!%x&FpL&kQR$BD4N}Op;0c#cXQrSwm?Ppqk`so&kBxJ~QiRK2$P7Z<-veoE z{q?iJI{)yNE`kkDZploxg%$r*aa-ZO_Op>h(fr@F4_%61MrvoogywB{?zm5@Q$o@3 zgdj>B;pSt$tW-3o7w}6VtWW|#<{l%eT2MxF0gr=|tiPPH35OWo4ExD6FE^l#TS`$Zg=BF=(h7oKEr<8qh&!S2gjlATe0d5?&fI-~VA0hoI+vM|*e-uU*SI=mr1Vf-;yS(W@UU%x($KQb?OIJMd3O*hLpI_4bT4cV^8X+$a<54OUdK)vpUTo?lU;#u?@Oe)iJ zPrq;`UG1n;AGp}hzY#LTeX?7r)@_}uz!IZAX5#K;oY^WJ(oQH481OtlP2iRZo~-mA zusQg>ZQ8^u6o}iyl6+y=(KkQQ5VVg)T{U{7v-31yewJ>+h(ZbegUt69&jF7Y_nh11 zH0Ew*s5i7YHyN#cG6K2U-pUD6c=uZ9+1Uf{hYHm|!%|5wj3rg9?`e9ukvcbe3r&L6 zEmDk%wfiuv8}kedE4MuTDd;>FZ*o3#wim2p*SHJ|)y}+=f%f=R2ey)acUb^=uP@W+ zf^?XQA3~(_j(N1-gYE_y#k6g&SUXeo8W#uKakKbKal4ytx4Pr9uYP>u>YC`}kX4%; zlJzSM5i8e#NU(JD}H(1Z?3|etO^18?foU^>s*uAz2VTIguzh5L6<=?e?LezS;S=frTOzw<*Au~{AHC%xqR+(_(Cbk*B;k$`g!_$(>X=M-CEU+|Mna# zeCo3Pb9V4n)#&`y%nc$_5{v!aNB=_JD#o;f+#?TsUf9i``=*T9_!@FIEJdE&6n*FM zbdvIMyu>2$kkk6u@g}};K8jtY@d4-XdC7)Zv>`_YyY`my`&AsKJWQYxJ>cZ#BfuAb z?Fm~-G4P~beRm><6L7=jUPE34yS5vVS8$D8f0YDqo^gF~D*b1D zY%h%z!I>;j*-^wgfQFm-*TRcrtk2kl!K`bc*CW z8kL#AK(i2i7k_HWDBV%{{G5mPU7)sdq`0w4`J}|o9T;C9DR3FHaPL}_PTZNu+{`}| z=?C+47@H4^^VQ8y=@|31!#(q6oCB;vbojkCC{3JTjCg`g7u=$y#bImT9GLO;W4}1_ zc3gnS+B120&+=W!#6o^HXAApcKp|KPio+2lCc2QkRR2G=&V(JxwvWTJnHe)8qLTD^yi9*(rW^7ptNh%c*l7y(9p33V3yx-tHj{7>U z>%RZj?{}V8KghsNMVQP+@uw0sEbeC-hXozM{`>GM#6JFk=P$CS52i@S1dlM%Q#=2w z**j2|2=N%<67u)q63a%eBp{(vaB&_+=WQ_Gd%^Wlv5MM?{E3X1+> zXSNbE@!3R6gc74#+hYUUu?KO*F!a%My>xx` z-^;MKR%WMuF&=YGOAC(&ff2+9)}hH4JZ1TDR+&we(5=mU-@*?VKD8`;0yE!#^6g^W z{JoPXhQL21PsGSSpXjE45U#;J0k^DNjv@>}vrH)X*PpVi7BONvoht?_pmewsP*|l< zf~&!#<5KT3=NJ=g?6rq*g*avR9UVjY&{6i+XAetwYnGHH6dkhPNug_l!BkCyD^Fu1 zxWa#K&R9H{)TvYvPU;=}WQEJs9-zlf1lMWsW60$o)%Z80GSLma^iag%6&ni@qVp3P z0BxrV5zQvt(py_+Q-dK5R>Tapy0% zhsJrwYfMqEwV8o#vKTpX&yQ7dQj)=6FIrGg-eW2+Ge>)UauucC ziE?Nc&T;aSDrH`f3u*bZ<iZSywl)J#C9{_` z*NDhY;E=)CQPYN;U+>=V#^gq*bL732I?^%pMrMx+v=7;S18nXhW zia1T?%a+e!hV_GHUW$M1SN}UfNJM5IsIa z$C7u!o*S3X#5aDm7AJw^c1Zx6WBlM_L+JE?_hf^qGO{xNa?tZ3E+w^S!e4vX2YqKG zH6bS~W@cW-m9-=c9n9bY3nuv-8b;P!>wgv_hk!V>nkS4v=Ol8H&q-nb9fK_K0OLtB zf5a-XF;|SZwjLdEf|ehcnBf70uK{A{(4Z&kuYr@fCu+ElMMTgATHeVL`atEJf`+&{ z>`1PS&aJ@uS3F5Kz4}OO6GUat$TJf?W`PP2{9AKgcAe8&^v~`pkm?yypV7;6E zLNjkAspH1mOo`8nPyTW{m52+N>yZ_^cM-=IzdQeq#mnGI`PcEnp{zwW-cfHG& zpj1EMTPVa6{SEEy?8&Fh-g3_!;2~D@ES>F3dDu1YGcM1Y?D}TK!z7SmZ^iN$ag~Vp zgKX(aHz3w^rjOLw^lr-*a3h>TaD9Vs9Wv0X5||%FZL(^E7+i+HUFWK>*{nkkA*1#; z&faeyif1n7=k;5P$UPcVGCVIQ29(;Q8k?jJctW_CgWsLa#7clay@%d0+(&ATUK=vg zEb8Ak9a5MUsk{&?a1eY0RVqUOiV+wv3onT=K}V13$wyB1{L9mih>Kw}PxnZ`(Hc<; zs^;>b^b(Or4FEPIYigyz|1ji*(&S}G;;zTQFtXt>5+|Kmr2x+OR9=1U+=I7g9_BCB zaM~>vc@mpQj~)&3tSx`bkV5+nLaFH(7s!vMD||vEVI2PFHMTO%M1yMaE5n4jn3iAZ zKI*x`)S_F^;0^?a42vY)Lb^MB)-eXL;Isf3AZ@hML2Y=6@@Y&V5hx;#oT1DZ4MGeD zrTKt*J1f%l0O;U5=mMKpXo#=~5LzVdRIyb}T*d9h&pUB1R2_-de3Ul&BruLc$`68+ z_+CCLA``Z7haV}%PU!<~>8bTnazYHF&Y^c*?4MmEVb>)QCYTTHV%GFtWKq)Gk_;vQ z4Il`EJiiGeFZed2WLgkN$kSN3ZX+ztE5?KdV_r=yX+NzIH3S*Ofbr=-uuz)143XCc z0EW}yMig-rAS2_(_A9!4TOIm0`GHU&Tx9)=`G)EM~^_O2h)xn^2!muV=<&Gqs4|DN4Sf*WWI8PRto~ zPl}C3-IS3uXTQg$`iOWT5g{ag+E^56L)0}qB6G>G2(BcMAqcEBq@(`P5M3)j_AYdg z&P7P;X+rko5U~Ks-3zibWzqw;vIwrTZUWcqnqIiOrHX8yGwt`}MtjJafR2rWT|wjz ztoJMY6RQrDzb_OBEWkH9Z(==GsEQ=1NI#(yRP3W&7U}cBpdw{*;4r{>(J< zzpR^^vSxpBupVSMYQa!!J=5a|ZvgiNv)H_Y3|>99pz%9(I!nE!lAuT4#sK^jO&9VQ z>)~m~$ot#r)sAI@;s^4lpVpk#05}Q&9gJD9T~de!ArvizACwEb`+;Bxz~_)2ER}26 zxE{_(zo@B$X2Pk_g$HmhV`N{pHICw!%(c znU>J7FB%p?azGNXm45p!(MV~ma>?@zV=LO&!hfpy?t;b1{$^gW^(He)v6pxL0fn04 zH}U9w%k2g%Dx+|OL6~A&@55JJ7Q}Ew#1dPlkcC-tsMtqxPAPTTGK1vk>Id6|WO_H~ z=!>SG+cPk$=Xc8jUe_>i0_#8Vv_IopB~OQp^%$`1daK(@=81v% zGD8+mTYuDs_Duoh$ZGhvC9XR8;Ei=d+GAAyF@6!m>mKR zpuNlPC}zQM%J>wbutzEv#%C^ZaIew#frKr5&TQwAi|RotJe#hOx5=xQ#(5IV0RR%b z$*<5~yTtBIK|s|OXTME&%7u~A^?(L3_r8nV=Kh-2QkzzScDW~@{$8LRD|B?5X|Eur z)&57}UD8BD@_vc58W6Nw!bz`|$R~X?5bZQNr<)i742u9JvtS3TlVU=gc|*F%L~%^3 zhN}#R-qZdiGgdu{xa*kKoa{9BcwV+9q>i*o+-e4QsJ>8W0 z`dh%Dz6m+u=~m14ww6SeMO48rXaIHVi+O=+qE#?&67k+$1`kWsFRHL&e|}Yw9tC+Z zc`NveQ^X8URp&m#z?BWoBMYA*0&xJ4%?(4nRKaAh!vY&d01GKq&53YpBcm&MidEJC zkxaVy6tQw7?WUbj*7sb_cp-xFaHrGdJ>!l&yQjZwAY5l};$)86zt`R~+SvN9JPN)U zZpMCZ{4m4{8pC_0Nl|i0#Df?mgDPunQQshm9qY+Uh<1-yVlCx@6j5Xu9jwO!$8=&! zE^NpVdB%A3^M+tDEI?kWflwPx^mHXZ>v^Ar{_x#!t$YlfWa!lTu$rbXSm1}VKt8j? zwS1H2)}F4fJ>IwuZ5iHALy%KjDmI_Y1H65t+TZ<+ZZ5EX@>)`8kO9+bFBE2QE+a(~ z5PlOK>ej+5-St}KWd8W|`+E$|emi|bq9^Y+SY9gN85^_7&~;@P1l`r7XbKs!v`=|n z*0R+fcGHIg)All@UNaDFb?_3VW?}SCrSpQr{3cUJoKq<6p!=GXjne#dM)}Wqx zTKaOmGNejtIFPq%PeAp@D^%<#%XCIaYAnR*v_j~!5UKgG|D3f?eg5)cAi(wbQiYIBR}f8Hx%0L=Gp^rUf4{=Dz119@N!`LlxVv>|witq9xhI%3NVA z{h$tBnZc!Ld>D%0WRKeWHnebRSOzf+vc2K0)oedZ*|=^p#chi?}Z z6W+oUxCv5X2((|M9fMRiA zWY~}>4#2zkv*u>{7m;rMWI(DqTW|O%iBL!v*zEOu+^Hr=9}rYS9X$Me7mQ+co~$LR zZj)4l*y(#J2-WxdO^N=r_jk4=Pd*YR(= zJmqhD-=AO#xGYU=m!+p?-+AJy`VS)KFmQ}f*{!=SmXLI%9w52c!hfzkANDz2iB*uK z1#$&~(g$@6BM453o@pfOv)>54cX4RCd`sGAmsSLwp&CSjyTsv7kz959DD|~`n>{7c zs{2vz5%9r=0x78(qLB@Il+nLtqz~KmEPznj!Vih`yOglIzB?D_0!mgVojSfhKe1n;enP@rs7}p^?NM;wARO;0}7=rQz3P- zlmg8YUAUyE4>=+TKKoXpYy^kgg$kFJ85s`Vd}0NN6Ppgs!r5$e`;jYhMsqQtw+U|1 zU8IK?<;s}DE$1W4MU3xwfwN=jwp-VdSXuA4h2cVd_&Vw#t;h2u+-xB`*H^}lGg2`iFiWaRjkqd^w`u@1Wy`OPsJ{B`<+h6&X zsL_^$1!jvlHEy}R{`Va3ZDtwBd#*nCGEUR%)=YM%tmEzELm!*IMD1bq)`vK)pIgJ= z1liZiT8InZlM_1wCUc_-Hwq+rFInwkyGOS~;GqTLn)^d=_zq?y-4NwV5de`DNZd~_ z*b$9%j5|>iZolZu%@=c#T9Rvaf2vnxkV_4FKtCyNqRI zCPvkgj>J}mYuLTVWEnpsE?xsIUsV#sWME#q)iJbR??vQ)WqkvnxeG|AmBSaG6CWKs z{WZ$K?g$M+%xz}U1plk=Zx;Vj&<6kkgq3FaIQ_iS%JtzvQ|)@cf7PU?wOA5hnL^|h z2FxVs_@uD3nbkgBY_XRkW41KUi`*I`B88seK;@!Q&s!V#6Fh(o)hQ^e+!{~~UT;Os zTf4#I?oh#FPtnDOJG*zMiWf1<_Mig4S?kG``?%xs-pQq?bi~61eW+C{nU1>`xB7Fz z2z>0&L|OCsjK6}la_tdk$=MLz z-CZ%oXGO6H%U=KF3y<)2o)yb+w0#Q|qMk-~FLN52xaNS9)o@a&aHT$P4(ljHfpeAd z`uM`I`nYR@=lwT_&G!f1z!vY8&_J)si>hF+Dx-~`HOE6Wxis(r32LbYqx%1 zd5VN6d*^|_;plY3M&=;=-3>1mQZf?W?++}@ z^*FHfTR~KECktDxHX*Ns=WI+KRJ_ST`{BS~dsde5jyGJ2C=GfrI~`$Pggn1KnA?}l zR*h!ldau_?Jb3M#vitn8dhsl$4M;#l0miy3^VxN=vK$ryg>gtoLk5>eE39CGp#D0D zVDGb7twuXVJtDB{&2u<7x-dOqrKl)|h&K3!wDj2|3s0~Y&C~&x>oa9OFMDGg^xGVL zu3WPmn^)YU!;+`4lJ{v(PN3R>mk-l*5B~EDkA!^$jF$;YQf(mZ`LyegmTXZzGa37F-fehiiZ%Z8qCyvi)45N~ zHZ*bcA6j=q^|ah{UTpOpA}dvvPLxnNnn^WjVYAKz0aMSN$WxeNLmafHgx;-kUpnRm zc+Cu|b}~66V-k8E{b_Z5g3wXhL`qBI%Wjh|w)NaCjwr7cRdCaP`?dUZq|i(j9>rjY z+5_O4<(!It8Mz@CeL>T|p^)a8wa=~_iVHb&LRS|6b*7)r+BGVvt00L=-fUOMu$&I* z4us}&hl8sZpo$1XgTMM99tHs`8*r#tuVpmco*s6d#szX+1iqiy)lFu-z{EQbA7Ve# zV%6>WuFCYij8@5$-Ll`jyr^v|5%QZdcBz$Yp2PB0AMH_G zC^tX34*V#;@#N&YrY8URe2ybf)cxougyr^v_GwuKS0QCJnp9kSrimWoRh&Sbkm@o3 zvb4f+aiUw{_7+%!?=|e_Zks^%E|-)cvxmC-h2}sUU%|$QLZs2e56(u-v7 zZ)w*@0oZdct*z@gzdIjkKoVNF7_N+8N%xeIdJ3=BaK;6t>eFZVZWHrvesw6MMPEa? zTNr3{0`g&m55xIB@tMEN!Tu~}VnuUW!`5#4-Ba<`sPUf_e|Ub+e2A6IEcEvpr=xIX zTkna0L*?nf$?W$>a}(d%_W4v8H&YHiT>h4=QSw`td*T&e{`J;?viy&>;m}DdPd0g4 z866nZW0NPMrFgt50+&3~#CC8`dKAzXf|fL-Y_l>oB$zv~N2}za7iYy6ifUg^hJXIt z+p}|%nbh{U;QA0?h?03dxwn`*Zv%q3V*n%MweKXZ`!^cdN-Z>TKygL?uy{?xKa-_ zOhicz03{dkpd(t-N=hCG?Y-Z!9l%8G>P2w*0e&;X5WiL?CazT2?F^u@11g67anJsg zFkkI|FuV+UP%BdWC1+|*pz+pm*p&{YP^>EJTnelE zcz!U(2AW+#k=bw503yxwRVEuSStwPx2WC;Z*z0c(K8jppYpt~<*(=CDl;>Pf=XA$= zFS4&KvQegOL&M=i5Or85Q5YL=SEL>5LB%T8h^RS2eR5* zoW0!p*29t&kv)L4UrUl9Nj|!R^Cu?RgosqT3NHZ;qrS`#ZG;6baMtdNH({}IBq%pq zY*XWFBj~r<-hat$;&Hery(~)+99^XY$NROTzt-~goNK@I?b}kfnIa=^B;#3}*b*4Z#%By4X;V*djc;@BZ~ zS*dCKcKQe%(+FH%))k&q%>8D-{DR5Gixfu-s<68f1LKc&NCu{-56CMLPL3#NN44^H zDaAo8v!TNnhN0j$F4>QcDkEBpHE2GbDOF^5Ye!k<=7teLP{bWiP9ZU#;f zU!?fSK}cy*tTzlRN{^1%g|@DKotW2oGz5P7bs$QUPJkgu@=6t)QI#^Pj%HS?Ve0`A zusF7aK{jF=&s}}rbi4+E(nhwOacI|+s+_l^Tos3s#mz|K2&TgXkkaDK-MK70d&Y5# zg(^pD?y;pUxepgtppLOCn7jOnz!gQjv%c-8uyJvByu^ReSRB3rUc44Slh6x9=w&JX zZ7&~OJv(`?Beji;pZojHQR<@X-*+;u@ypnwUwoz~E$oY!kTMeY7*OQ*9H#9##$JQ3 z8F$iIL+dTjF-ObX)b}Dtu|;qA%x9{j+gIa}Y3U)Z!zH}48~+N3Pol1aQ*q@B&Te&h zciG+9y3RzO(-Ar}ujogQUY&GJ>*9_B@F`q=88NZ8?g(Yvg05%`h;7(?s6Y44L|S`J zBAqSqw=+0_Vb9nzWz2fq<2`w2S@oz`ywZt~Q(|$IXnxDCg?i7ytnQ>~oda>ZIhj=| z(slk1KQ{b@^L;JixfLi*Woe8K|LN?F_jbKG?HzhSB95uDM>%ndhfn^5h*^vZH#gm; zU{Zz$;jL_yAbZL2_Bo$pf&e{jYf9oMlYxM~K=x}NjA|nV4-KMA125`0rp;?TT?eK! zw^F=;DW8F*^1&|(hdNwj?-QMCbclb5*5FR8$x9B*PKZK5@IQe0woYtItzthIiRct~ zmKL3I=voC3pQ$maV@%er+@4v1v+E?(qau9sIq%g;cGij)0}HqDp?So_#~)R9wpAMG z=f-Pbgb0U+XD`He2WE7j)91BzZUKy$VuQ_ZUn{r#{vy)mZObMP0ae*m#>8SowU8&r+U8*jw-C!Ae*XGsfr@Q(O8 zZ+;<1Y{a@@`gO{qac_0(e=XZrmQCE>)S$>hY8HzH_vFx-0n-(k!oS(TF(%Aa=mG_g zjEc(?J}a)`@2CknKl9^l6f;XU_@;rcRIZcrB^35K15{Xc^-%Zt0i5~o3Q0eG(?M@C zEV=x-$XDK4C5MzMi?7ggve~F%OpxPxwtc@AS#BO!zN;5^*9q-dKezQWq!+KYx~#ID z3Tx}R@+dqhY5CkeO@|}oD+m6fz{~SNLucNWHbm7GW!O`1iezYES?`Mh@a<#mfE)3p z@FgR+oI~9ZN*{vBhV6LEd?Rxvx<%z)KP%}1mGzbk`uFU}0q-|AQY7Y7%B=+1J;hKO z0+17Vj0dahDR?aF2}-l?UD5x-5Zq6Q&)q5));`(PR~X5%e1X?eSpC$k-y(qf=Z;G8 z(7(Viy`nSxV+1CDKrMC)h`qpQczIFr_=SHLtgibGMYx52>%9If?Xpp+?j#nO(#5=R zmb2J=WbT0_{~>VC2(4d? zMY4+z-6P+=o4!eqkP>LKM(#$#R$vII2FZd-y!T(=) zsIZQw0sXp%A@zjQr7Nj5TH!f9UMU%&xnia{!I!E|xHMAFKfKyL5M0?wHY`4Wq0k__ z&+P1_{2Q%e#y){*v*xa?!G(9c3>qx2-!(QVAsc#l(pW8({Z@=8W|2j)RE82Y_hMv0 zU)vnnq|Kgj!`vtJylp$3UTq)I?{&UXotR&6t0Vf(kcLmQxo@jQLTS_Zv+I`*V!g)e zb8agWgHkK+>AKL3tr8saZ`F5=`O@l7n^Y9#H(x4lRJAS+p!b-aEsUd$T87uhI8}Pu zhC3uY$nbgN6ZFW7(nJlaG4~y}XLOqTTs@gk5D=76SJrj&)_~60#xpuCl!QkrHjM$< zb$+yWy54DVw0b`qwvkPKZ{=?TZ+5tIoUTi;mD6KKlMWTDDBlF8j73z))h=6Oulsew zbb8xAl@pZ@M|lXHw$LcgI;vr|GSUXqOZ*u8Da_*XI>V%0#ef)(tjFu@G)26J84PKP=!p0GL z^Pq#a3-!z$Z>OP_=P!MN7O0fIn4nr2>xM9oCzTz8GN=5*3_Cpv8tiOK{B!#34QtOQ zE=ShAH$0UT=XFDi%(N%Rc$CeA6&$eYf1A)NDl={w((=O2Cp%G7!p`65Z<@MQbT6&0 zJ@H~E)hWio=0VD>5&MJ%!}tb|+-(`N%ih%K{QJ{|HwMH=7oA)hV+tFohCNQ8D@qa&j$pimY?;nebrTck(Hzsd`e=Fs*y`QJ7<~ zlha_#wQiIATEp;`(>8G>@g?&EzuhjaT}-%2vg!CIr#3zCbzDMSN=|F6^K{w8y;H`w zV;DDMZghuTC=81l4hyP?$*v1a><)9T3_COG?Nn$I`E2;Xk_{TXu2>ZEN|RV$~4oh59{A_ zT`ibZ>6V*mTk0LQuym1k!%9>-t=T46V-p~1epSNMfLcGUj_1iE2}BiKH;7%w-1z|h zTzT(2|C9rhY5Gba=-kg>wi-8Q5AO?l|;F?b_Tu-F(LS@8Xda%E#`^ zsLYey53pz(g>jO#!-AXex8V7jPjxO%|3=xp;)RbCCl!we;KJdr0jXSP)wHvGViVX! zg3)<3{AXGI9Hp*L%CEUZhjzVK@O+MUvM0-VHHcFs7U!;e`ZbcwbR@>`Pr}!W_@L_E zZMvh7uU&#Ar)%@qUj^#QDqIb={vKGKOdJSwWZ3ona0-Lw&Q~~cCDxRslNa05F~c6( zPiS7@gwm{F{S7m|i+ONCkLS(~t0bh+!D?LQr)#!gzo~2oAM=0K(h`3+3i^c+Uad(M zozVYPZdEkE2Mzi8BBtD$XlKu~YUR(6Ep;m(y*bm#pw>xRH_lopuK#;vUqkb{U{M-1 z)dgU?b9`jjgJ8hR_WS~sjv4LIE9HUSmkzJJ)MVTylP^cnSv<6p--SjY+orFA>vlfE zKJ_lIr@t=V>H1OKAm!TRh@k|C=|=W8D(w#bY#Vud`f)v-8mtY5tP9J$q0-zR$zSXAegB3kMJ=qY*-9 z)p)OP$hP>&7M_}LxfRyho{4h8zQ&K^O_NP)(nX)n=DGS;y{NqVAZjm^-&OSTp(e}S zMm*QL5EJL+msEKDRotHyhMDkN9hUj4g5Q3@r{~r_)p{@8j!)D2a3q5b_|6uqw>Ty% zlDL+Cdk>XBef|wDnSb<+ugUYIT6LJJBv;Qh=8uVo$ZIOW<`ZWJuT(sO>e5MXZJQB94QT=a$9|`2~JSnwI>gjh8R}D+GMij2QO9Wfl za|FyU3!k;1!>m>qSi>POsENU0$U<>D;fa2FMffA!SdJ50;F*Of;*m5&%dd`SjGBrm zqvbn!P~iDvW|FSn2D(I6i89saPjQ(Ehs~6$K=v)AhE464o*Sh-esIp=!YTnS#rXdo za4o3}UAfM$sTpMRN(8oc|4ScCQ&g#bc&AsGwus}d$mZq5Qh{b(Kmf-Wg@2|H5I{hS z#gQqGMMxmO-wY6W6D*$rpi3UGkwL^`JKFA%qRS%bYzvA2DYG!>3{o!TD)i@TAhdiU znqPLyYa|E6v-UiIkR0~QH_d!pnuGNh$?k|r3C*kHZS@*zeZa{u)}ZxXeunIr@L{(s zxm2f7LA0F#gW_QL1fcML2#TUdAwu#ei^Gr1)=p+R@!2omylo>T1F0~P>886Py674{ z`XeVFaa@m`t@WZ^ye=y=DlpiVp-cp%0%?#ug&Z@x#j8^lYptX(v7BY9Z7WY%^5bUP*s)8wUrn#dS ziD)~%<0zcDap77i_Z=UJxq$22N87UDT;pivpT(@Da84tI8j|{TK3=FP?%qkuyUTO2 zP4iBf~!5C12qaAkMJ8_7k{ForiTLUaAzy85355yis|SY*15arQbzE zq`g&2sqAuQJsQl+b(*=%53wf!Q+k)g{G4Hpj2)LA@~Ydx3Y0eWBj8;ADp|orDx=rG z`{G1_2?|afw1L#UI1VYETYY&==!*aFHMI+01q{&$LWaW12`lV1!uUUnG6RfUr)165 zdwv-dnC7JGf|!7V;g_RnrskxZ&DpesdHquT%+{AF$=0~bhj`l{2h$3s%Q-$X^gKD& z63x-{;qDsrQaQ}Y?U{~vfy!*f{%MS zB6TM7KYMH>tVM=)wV+8(CFimruU{%F5(PQM%2+~j(&{$5qG!7uqiuUFf4(|lqn6)c zt<9mEt5fL2Qre2h(p3b16LTMK7ii17HKMFj!1nsxsi#|q)*Vn+h5Y;akEIgu&k))q zW1AuO(?D%dg_RJ7rwLwU#Ys@fX}h`MYZ>dW4Bh6!&C(VXd(7)?US;>3`s43#rFWji zdD(p_a7R;tNZCB{`gYlQAmY9jSWK-)U2lx`;g?x^sOx?D=btyO=LBrLWT?ae@2bV* z2brX!9Vq;bBeYU&S?wFC!WVA%fsH*vH2JETW`%RIrxxkzu|E@>2EK@L@jHlZnO!Ah zO6Tf#zWw5M@xSJq>-r7j9Ruq3fT{`V?^_h5CH_i>-ur_MI*;v#Kve0gs#Y<0C7@7K zn>a7_>2CigrLC*g1}S&#Dwf?uG!*=-ge3f=Is0B128u+FvFGxRI~Mv>((`iHh^W{% zxzn`jG?)8U-~OGeK%L7s2Ls;wdirFU{!!_6=Rb9@&TFK0X)M#5PbCXWs3cu{lqVKg zdr_A2tFh}P&LgPps;s_6kh2kAS<~aWUjk*qw!4=^T;AdA= zy*S@X*D=mCsXi?SZg1qp8kYgBm=84xLbFm&psI`4d2E(B5_uJV0WTcxY24`eM`K0! z=1YYR2mSRGj;cB>7j;+_FNarQh+-DXzab@XE-uJBKs&+9(>vhKdJ62DmK%S1J0u#| z3+w)lQe`UjLxo1ng3?Em?GrdM&shn zz5vWwDCyCxBVtW9y8{>Dx$g12)J%qQ z*&fIrh06*px)QqybC^jTX^-=kNBEh?4K-#_XH(0-p$Xkd&V|1BZuuf!WOKE_9Ad1A zFC)i)fO5@)x`{z$K@R4E6x$y>QvqN_e&AV}hkdCC0K;_)!=(ef>OJG2x>9UCSFCx2 z7ygXb_kr+#yvjemlB%@Hfgs|QElNgav%CepKsf+_Tbx~v+~9@0rc$xhx+F|+w(F4X zooIU*miufFFo}kE@e}md3@Ou=AL0fG`4qXdXlf>SeKAm!1k|0%M27JJMTEGLUpf3< zJ}D#Zp|Mh|S}y!`Ryw=G?cE2za<#>!U6=u1icADcFsWB-EMSZ!W@OJpX;IVLv&B^K)GE& zQ-!+neONX9Oy2~XTWu1mQ%Tp)+ReT+-&y^d4~f@@@=og9{H8AmJizGD5EfRYdTsTcI41CQ z{U8y^Z4qN~764v0f<1^mZz9880r0`pJh|m4f6+tO;Of(H32}p}r{fU6UGPX#jSj8K z3y>X2IpG~&T}rDCZ)`|{3p9;hIgT|ZX|uGTLkwbM zAEmc@%DSRS4}-p81*$|aZS9%4FwnF-%~3Cg^Oxz3fXd!o04IR^A`N|U86u!~do{?( zWTi&tdF3zwmOlf(RH(lmm}16(l~EV-(W%}Hu72NLvLTFDAyibQ$!Y3|Z3e@#aGaRs zM7s~w1tNs|^}b{KsMQehQY)8=TyQ5HctZqT>kg<#WK3=(UuZh1#0#7%gzdK7+ua4o zvS4z;P+j^3UPt56t?LpZT*oJ#-wf>BrfjALlo?z7%PXYu zvQIhu2rA4}jiYTn#h#b2yw%vAu5@5YFLAF=HAhw)iJ(`A$dxvT9)QU)gW5%8tj^?5 zXE_LEknA#%`#A0m8fb&nX}1gY#&vBTqhCY7LV7Tf388Oe+=@h$%C4ng5TQ4*dX`oV zpAprY;5YbL0%`)NC{~|HEQDQ6mFbT7d*P2al+(atej-taj=We1+b@KDqM=V;Mkd?eDFTH^8{kptwOLWs zX0mvjXhO${_F*Q7_f6)7J85#=<*SwfaArgJV#9f!is@xprLi>M6}*gjycwLp+2yX9 zq-6O(``WJx1P{8jx!(45y^-jxP5`IT(Fx`tD<3|boYRwFcJ_?-OtT#ou)hqcO+wpY zx^#D;BD+u?KroYsi@oB~_TOVbzYh!Oek1r{$7eTvkvQYRhKqXD8e{EABK;}|ffQnd zGClRlWuLb1`jHKs*O;8s$VVOZ+HyYf(GKUXzXn*i=YtfP-T&USW!|@@m)cGgQEnt` zSjSYmf_l{+Lzf43lh8dZ*w4$4lXvf77Nm0qg*u{AHstG~ANX`OHnhIs?;NZxRl7E? zh!~qGNfZh2mruIeb7eJ6Eh#A~a6clN$*E+|$!dcI0SF@?YYRp76Wb;xA@EG*BcnH^ z_w@%aX3RBlm?ayb_rf~=s3&aAT zBE-0pSREt9+R-)9unYAK%)t{ace}>(LvmcE1e?{T?l;)q5ZAvqbrwYV0a#rcIxgr& zwn53;kWlL5WGcW81L_c|iHhy+-*dyRf@=O9|G5o|Hh?-&oo3{ zc7L?U@Ql_5v^A<)%N<0Y9qOM=qNb}}u8(T3Z|S<3ICWEIrari@bRLxv z;+CJ5Jg15QsN$NhADsiKvS8dar@YIHhfL9vh=e$GLP2LnYzY8Mk+ng zJojj>_sNT~LGAvcu$-}%{rL_eW13<2wWo?4Eh>$c#=a$?@oMwA;qwWAXAmOb7@=+b z54c+tNW|eC9+mUH86I#=1o`3#A`#m!^?|%;oTIIP+R=9oFMa#S zt^lC=+hCj-^}ohJ{g3KE{_SQmI>CNE zf&R8g`PIfz8?+GvbjJYO-Vi&jpWQ`1WTGb4&3!zk6Q}JZJdFSmy*{p7mu{IYyw<<; zX}g zk3)~8b%0m+nYV^BZy_wGAr1W*1A0y6A{M?{=j!kJ+~v|zUHSn=R%;nO3ETgo)hZ8b zeTl00!12++xCI$^$M%F;b6jj&+!F_ruP@{xmZ1|wXcH6V=JjSyh&!@{6Sp+0wA_Or z4T@dmA%m;h zM}NDT!kiq9`u}rJb$G3$cYNhVm z^pEa$?fuk}lXgEI7kqy!EWJTK=Py`NG+KFSLxc3>6O0_}Sg2zvi&XX7B2VPRQ}Bcr zGVFLkrGVty(60+?GRde-&xbcTvRhF;E_bGZqDe~vh{7(6hStW3M@-WTFu znz;h$wSOv=0=W2Y`=LGZp&B?0v)@Hq?IHqRPyxXIcnnj&+_i21^{4XrC@UYS?R-!{ z4`M!%(QDVLKecXrxML%Bo{{B5^Lc;qM8l3)(1jDXK|Gk`Oy$%8+( zxOU-6M5uYl=ZB_94r(d-Yx>4y(L`Whn6S{F06_2V5I$l<^xn2+8!~Kp8-M9X7Y${} zbX=%b9+}`5$*sMWEVutf_MZ8Uk0WGGjl(%&7T0E6cK4HKIRD5B7@%LC!s6&3yP~|i zR+G}cA-h#qj?j@m{Pv<>@=<-tfAFMTc;fcbn;T1S!xG+x^>vgdi~l<kGy|ud?TiDXq{6W)&S1IBYTMR-#;4z z#^iUYA?tB!qZ}RppcNg2nc-q6B5EXmmA*e<7#y5^SLhh&+phA`lN+OFvCO(KF;i`x ziK-eTeKx(CWm~aWtT(%0nkRUEai29?+X})XO9;!Cxrjdg#H^+4W%)zUR|CJ)H>DM;SH%U)q$x0?R{VY3^mCNBTpfv1@LJ0|vfGlmQ zZLD!<3YQ2$%cQWBl8rqXH{~iK9bCw9H(}R4HTzylkBbD(Ji_cqSw}ta_1g40=ap!l zgv?L>@_w3S+GVI@Bp$T93Yb0DdqFxZS1ou>2EX;|h3);X%6wWU&Mk03`pz7X=#$57 zmj29-XMo#3cK%UZ=6eFZopT{gk(RJ7JW(o?4VerQhHGYsU^X?~6|vJ=^Ln*oX&}e@ zA9GJw?cTbq`#_I4TpDqsMy@=fzkM=R;Dgnc$tw6wUyOtqwz zuNg=rPMYs75daq67)!r-R~!Rkp?jOc4YDwp2{ck!#F_#fLf(enV|5%%7PAj3z^aO? zP3*@B2ltmt6fMRASXysn@bqUG6IxD&Yr-)5na7Yqn?DfY<4?X@)DU?|z_c7-%WSSg|!AfVPr$MZ^9V zQ{at%3n4#(D&aU{795umQy_euV%Mi%20CIRF>8RD43Im3^n8>4yTrgE{ld^Z zy8aXO3mS7#&&Mse^@YpNow>{R^7n?G`Tl8cOkFD~57&94ects|$5Z&$_I-fg?ajdo zh2}oa0IQk4z>-~@`M0vX?oUB+m*2_0gZ-q>BQ5TY3ZD5#vo#UWdjF|Gn5_{<0u|?G zE6THz@D=Bi6Ik_d=RXwhEo1i1uh;@YBhID$%u_MiuYePpVx59_FD+=MKH$zO9hFTq z+#grS1qez_*k8)mh65hR)sZ%ce{aC`yv4)I+Ex&)?SDl=#gwzom(R^V4){^|DH-Ox z5q$0SLMFWX4?1F}U6el{Y zjQH_fA`A$g?(CFYQXFcV^)Pj?DZ5uu*4zU^;DcX10YvQfz&RwqotJ8rdCbAGx>x z+Ud~uxqV#8I%_l9f3+#}{~WFD(?L4Q0Y!%Xq-TPGmg34Cw}c~dCizll8Pqm;m$!}B zdrCnLkEZuj-e!X?ZMkxK0l-`VA{gxk%hXd=pRc@Xw)iOnX{C&+k+C@#bTj4(f6FrG zZsNE+@1efk!1Jn;Mnm9XA}9p$fg`06!GGq}X>k$<)uGV}`I`z;pV$xYDw!j{k?QZ! zqNvx1wu?jMo{U9 zW;?{yhzrx}e)0+Ye|!#$qm<5q>-QbWbRn05>|P{9$Mp zwa}wXzDMH@2Y>c|7f(ZhKRSh7S)l!=<%)K=uFj1uG6T~TyptzRS!<1vTQdP15*K|z zQl1Xq{A&(Ljq6Xn!xQmIOGw1(AgWU5_PLgO-8#TfYS3esx5@ z`9ceEju?sua`Xp?5&R-%0`y>?Bj26@V5agu8ywqW!Cy!%PTcQFBm5+SiAM`se_s0%4)9vd&TU;NfI0oN|$zCW|Bs9 z3Db1|ls0yx12Z+d(w`jVfOQVI-X^?OE+|0A5eI$`lC@G?F5_+b=0BRz9$%V|(k1&a zA5~~owUcOJtn--^9;hzxRIpP+n>f@>N|D17W>tUF*Bv z-YM3j_5KULa|O+FVz&OB_HX%B=GosrLubZNj<=eV`DZy{8+v1Ih$&fLWd_eOxA{Zo zUs?_xp<}%@%4Z_u`0niJOlo0z>BS2Sj4p|;2^-9N1d`%FwfjQyo4;Rw#O&P`+HbKn z1f?8)$P=G0|4paEAq_G=R06Ow_tWUd3I{D%H8x(cc|RY_=O1vw0qGhs!wn?X3UtmZ z1^CBdJVAd5&umA4f0P^1biGOltu=b=*(G^<%}hBS0RJISuD!}78t7mI zR1l|$u4!L18_x8h4cwvStBz~<8oJI+-ftLW+@54z#N>LTQ@adxj&-!JjOsT&)Sr6@ zIU(+8K@HZyT<8e^Pv7CkQRe`)UD8Bo8;O%ZlIpssI%ss8e_CpLB2g7A-2!78y{}bB zzSIZij+ngrYD^SEOoSN924L{uJg?`VVSWuYaSgSJN%s_ZEcs%Nj?UDP z9*I6Q)L%C|%i$pFF3wz>0YBC(gRPPE(2zs(K7%9(g(36t$Dz=q^G7B`skMwy7E#+v z@{=z+EMmrNdM_@4m6S2HZGl7pJz6A-)W9;(mJN~@&`C*|98DM;J@2U=134E#oQs1D zcti5KCOPFCZZ_j|_?R^zGoFXYcxtS+MS6H89gmyJSu*5m)MuC1%|AAKT;ELWA_NB# z(h56F93E+yshMqO!FPcgYZ=v4bK!4_U)X@E5p$9p(^Jo&ku|r1@Svq5vRE}pWJ4tz zJRlDous9+~SE#4dm_9ouS^x(as2F67p{uW<<(frTUmD}F1(VUN+9k_qXK1t;K;L2N zZ0K~Hb7=;CzJ5Bj$ssO^k+~sS+zUb2We_gF=d%|AxFV&#@##(VJetwfYx!s{mIjv` z%=lTQPP)V49WeYoO*2L2$)y_8E=wJyK~08~bcUIQ_H7IIlyvhGi!_1RZh6aIHOm+r zCl-A#+EF*NPz?Iv_r%K?2SC&UQn{g(tdt|K{AZaQr z2|(fpfE1jc2=-$*ckR3bY=zSYr8mZsjV9?@0J50OKO8e_OG}ceP~cxuIFBP$a5?<& zh0;m7=ShaAGtq|tLTWB2wZOG!$Khs#Ej8I2X;|KxJ0x5Q5tBAI$fYSlgb?6~sU#mf zYj%_K&3C|c+M1vBH0tA;t~xl#jL1I&P|AX3(SwbfEP~x#{tML^!Qbp2CNpAyAuRv} zOy(#i6B%M1I?e`abt*#nr;#iz?du&9ctiD-|(ZI7fOR}=TKE!=?t3< zw+1M9{t3x*hLluD;GBUpg}zL}V7Yv;4M{LR6j%*iw${`P$F%vokVpt~KeP1AbkM|7 ztG45-O}$JO)Ej+H(*pq|j@OK@yO2R^8HKeTx4JMN{WgU{y*|6!(yyD+0K;^Ew_<~2 zF|=n4-mu!*{-)!qT@ysE(6jL`^iTiWKYwATddopL*XG()dFXTD7Pv}48oHYRNq`lk zEIU8291$;cK!N@6aL@+ut)|^s+z@gjpIhn#@B%@MaA^PfSlLFvtJ17I=2x9N70g71 z$+NiNzh$GlEI7lgKmJ8#ZP^LqT}Bn&(&0dg+XfO;()&jM^M0Ke9-xGDhAkC>IZ2a0 zSCAh)HIdLJ0RJcjEKA8p#Q+5xdopirWmFVE+@cht2$OV_s4VENJ(& z6ks|+mm}w|IA|Ai@hDyWMCAFb`G9e0dZINN8f#W#8A`K+HE6&m6+~fiV z?~+zEiBgM?P}SKnd;U>_kSHqS&A4(YSzljdpHnA~0jvap6yZzM> zq&WxdI?e&aPDj|5o$sZAjhHdFC5_QpgM&^4)UOr{|K;1)j#@$So7U&ZBRh&6DXfO>- z1M6y*M@K@PP5@5$Tb4AEIsk+^Br4;!jc%^A^ zg4yBF-phXMgiLnA%kI$Ndj(;<3lKG2hOil-@XdkJo0)?3$fEbVPLpI|1FH%B@Z9`z z7UwV4(&Q^NvisnFgRj$V$H1o#p>px>uc1JCEC66(<0%u-(hL;b1=Q*SrkLlPeY)$h z92XIsuIW8Ih`hkSU$!lVA?loSfp8=`3_J$28qagYrgY?oiR{$?vIEkS_27Q^umnO_ z;@yJ^vKBpNo_mITbt9}u-^PE2EO2(XR zbe66t@L`E-X8MJVDBv2zBNHmh^4ZcEE+zd9$U|N-3927hd00C+@XfRb`{tC~V1$#=9G5GH+39+mj=1eF+`46Zl4_q_>ye17k^SE^)aaPET0D?5Z zNzU~Rm>*@|pFXU;eEUGN3#?;4NY;0T9zKXmn*VTE`mFwMIxB$8T1cwm4zL%B>6VP? zvB})Yco`%8I>ssEwj*q)1L)&S3_9c=DOesEIM%IrS#WT?<%<>C08lPZe=BnqiU=gG z5>%v5W_-z09$zxAlT|Q(FpC67;S=I@Mkl~GRT@Z=og`7rvF{#j{LfB{P6K~Fh6&KT z5TZDd;pm*sxc1Gd;)RVn;M$LM`-3=k;g8+#6O-L{g$n(iH>tKfI0|Bs!OuYM&v!My zjZ~H%q4XXDdGROzOg{LrCRD}}J(Ig{8(HMtR@eMNV~)f*F+{9OtHgMuKL&wZjD0NF6;Y z2XRORcTb%zhQ1VP=`C&OExQA6Sb*SLGM+A=Ti^&~B-^&g32I?9?Qpx+2fQP~!DOpx zmeP~Uc=L)MNJh3dgJz^EDyEObZf{p#;JXZawpi?Q2cw|Q@`(H0vr4z93gpla(<~NA ztC55wFT-4BVXtCE>wS`eFt=g~?&zHVG=i`tJC$Yu9zgJo> zb=!UJAry&1=Tu~<#6NAF9*7_Gd5wrHme+ z_guEC=q2q4912zEMO5LrKSufXqx36`(m2c^`;J_x_M874(0}$FUow0#$vgS3q1b2R zf_eS7ntRD3kyUaOpP>L-@Y*}ZG3tCjEd=O1c7Wyi1vu2b@aJW6z=008Bbk6r#*KW& zwq2uS^O2|96Ct-Nv8?=q53okO!^mk?#++>)YdPh>!;HufoDYGUH33Kxc;Zebu}BYM z9PBUnme?r!pe*yrfn~TlrC_xiKD4mh94qu2s2fG zGe$NO7?}a`3vUnbhgZ)uX2Ei#+44p8-nU@&r=NNe7&Q`<0e05_u}{=)I#c{ zhTd8y`shPHDNwG=#%Hgc#whcA;}zaJ+wm#2e#Ezj)Nr1J+j1^S)kI`2h!--wO|f)f z<^Mq7n?Z%g5aIkB*~e!Pp!=e;39mtO4`v->;d)rgOvjT!X$LY(QB5I9JJ5whMRO0c zVwN7ew2SCK=Tv7KG(%13$)Q?w_zm--J~x^^>7==5@yi}t!uWCT9w4Z9MO%bWTxTR~$RWA97*YZ@klUPRYS17$Kr+)S^ia$AygiC@ zqO4BNpR?cD#ov;L!&C3XwBXKmBld2FBKU~euUtHy0ks~g-@4TUg&ce*?LVl}`vmY*|UpN*c zgfWmsLol^F$FiUc3FCrC7(n9M1`JHy5dIqht#V&v7Si<9P+Q9kStBCfM*>;Q%+j5V zzH+{Lxl%dO1p0+h2;%OVg_dEnZ1}u_-L|S^c%Cwe@rWcg62|Bfcso0rz@F1BqpWY6 zCYX*sVwYKXIR0}&eFg64IBLR~A3E2cZ#QF(OA{#VuVT6t7UBZK#ugeXC7__^PELno zoR1U1vt9=f5os*XNy7Zao)UipmQ0p^sBFV)UCh=wHXJvNppA#@f)hBe1J|{&@YXS4 z+*#2Wl<9t+=8&N~^8@zP9vVVmzz5nm7(lfD)uB)9gPBcuywslHNpNFr(rRG<2OTQ< z9ivJQQ5Y*v4%UGBeF!GMG$QR=Mzn67g8+&KcWxqrzIsKU*H;Dd#NnRCEHxE6(^?j& zQO_6DXp(^Ma}l7J7Qeb)k<9 zOzI9-^O#o9BteI|Xa3R&SwQ6;$kMR=V}Pv15BKjg;6Pb>)~fm$!0-`NIBTO@r)H8aL~dGI&F*?H`xGsJstsDNg*~7L<3cBaU`^vzvFDt`@+gk zYQ&I#z3&&3!@j{WN4jR`sr>Mi)q{6PTPmvEQ`O>)5hGn_fTf=vU!yNZ!6oH!3sC93 zC7mo?B2<^UXB6<5NUIq~!V+j;mXZp%<|r~zZkgTJ2m-D#WMEz-;wosH4IXs^<@7+H zO(ERP?T}=`IYzI62#`E2tHmTscdvDEY})N^l3I?6G(RAFo6c_S&|mw@p7PF>QI!kZ=# zW~0MNg&Gud@-BwKdoV-8`_*RS<4A#rGyx#uycR7kV?L1ZLAdN}@jkVW;GcG&8cp!_ zzKbz+bwzI`zo{j%5@vxqggddJA$0s(rNMvSD-S(>Mb7(I$^mT)sUOpLDA6nC$(Z9L zTPkvo4~=1$!(#*#>7YUrG0h=n@X9-daC&iFwM1#vaT{ZR=ZUB=vl&P=g>B&?8apO< zfMyY8Au`v1wGI;qj2XqFqVgi^SXS}-@dGuxh&twrJj?>?g6Z$46v4ab5((1?;{Mb! zhx>=0569nxkNDmd%+N|^L{Px?x@F}*1chI&DX)qD%v~ms)HUnp2oFA>w)p?+F;X0Z zCF-JprN&o;+9FsM#c9a0C?5V4FMy}`CQ$i0R@m&2d=?z>3apk(5I8{>xNT?&UOhL! zM*YZ4P{bmH4h`UmnM}PfGvrDyJX?E zaab7TQ6un1tUEWtqx|9CD???Fm;kdHLk>yW?4>yXe7c42!@DPBF1dTOM+Yy>@7Ln<6GR&4Tb5}O_OllC&srF!E-CtvBzNuGIj4|mi0LDm7KewP z8Lgp^*<16ezrchv8%<-;gol@)u`%{n8E89#VPnbVIUW_>&V#!F6?Fl?#Zlx2kXLQ& z>Cs%L6^rWpQ;o{JP5_Y$m9Az26rciJLI45|gyjcoOaSK9Si$BU9*@fNV29oq3)Wvp zervZcYI@Bvy7AKU?K|N8712{9+<2$SL~^D2Zf*O+P7(7Y<@nPoO#hL~a7$+~W1 z>>=dVuF=^!Z_cmhcf}Y^w%PON1FE|;`UC>IE`ZsWA9(lQ7H;kI{?Vz3*b3nT1^yemZ1FS=cGLV79+4-y6Ijd)V5DgdMt z7=;O7RZ>O~nrF16fCNQ=6m?ue zgeZ&Q5Q|ww8j!VH44LXAS2real&c*f}_$R)-SG<1#^kzDec@!WB8 z{_WuNsx0*A#w4cLBxqMUz+5w6^@>qB`w0mFfS$t}4;3POt={+{jZL2TTbHcCgOSFc zVTA(5lMn3XtR6u)m-&A`X55ytw`wSR_-feeJu7~km17)KK|p?*goZp>sUUf%w`g;K zrNyPM8wJEO<}m9u{g5F$&hyDMj(SG!Hef14L34C&Q@%w3-gvIE9hZ@f+;(dhW}YDL zQ<`=bFxLJm;t*i;V+rVHz%~O`MUy=}eCOQBJn}%KF1aX&$i4y63%JTg*nB@RN3p!@^$hlbryx!Mfp5h>R;ObHY_nn>q%XNM}ePF@%IL zsRz_(F0Gta_x?ckl{x)plxnxDQTBD?>ysaFmEhwki+Hnl@x5(F_6~mXrEhuk;WHb=#?|tsz0uJ`q9|rGff37OnAXP)iyRY2UO;3&!c z!z^AR0!9&35|U$l3Irna5vSWMuZL8vmwgJ6HPqF8Tw*6TbvJ}>o7OVTlQ;iVY7r=aB_Jso8aNgV~|mB)?Cbz@8^V5vL< z7EG5m3rJ)R#}#0G^Vs=N(J&eomdY6Zb?W8oC}HsNU1i-bZ}R!>l~qYh(M#(Cf3jgl zX5LF&2Kz;T`K%1pX@*J+X`Mi7>n=$V<0aib?&Uz_@jcu8kmOPO0+6;>hFham`+2c> zjw{XEbs9N#3KVt*$dp|RjczUcRBxyvPXj@)&5MIyZGp+sYj-;o%R7E-g8%_65Fl!X zrq^Q0Wkq3VAv4TDVaeqMu}*v~hXTnFx)GwtFR$r#pZy%!2=!lA3%;en%!Q2-a1n}% zx*0q&BdEhbr@lt7Z3$4v*dp4=?E7Q#8@s%ivkpDobAwjrS*Q&}u#^#CznHqoN!Z7` zc8B@hwHJUw?jNKE$!G(xieI9X-h$6@9V#fI3<}6p^lZqgiSrduAEKr))9q5_AZZUA8~T1q5kglx*Tz9_<&+Rm%R%*KigTq^i>I==|VCBCB4UXSG=Fw3EGaRcknDxT1_z88!T%3;_IFPwj;B+%6nsI`D zI$PML;iJ}~kZ>PuiO5&#TxQn%MS8Vyn|Oagou5~}-7cP*?NX#GBT2yk^DKo|o`Q9)qa7)?b( z0|^eo23RT-%P@!gqS7Qw7@O3)kaK%f?HeAcqhuZ~8h7;qQ9wh+x8_@Mm9P5SdNz^3 zn(^O&ro}$_=(Fn7 z?6cO-3-Q|!6jTHT&!8N$eD_n@@?nSB>1rT*T0IMqLg% z^}%}&aA4-eQ4RUCUm7X*nKX$d!C+2TFlCEG$&G@f-wxYzn+xdX3NFDRMq84G?wazj zAKqu;nGK!{yQ0U~{hyYbBR7v5fajcE12*7V8e)hcF?_-ZS2?os}P%O4qHN6Iv|#XC(+p%JZ>zO)N`yYP3_v5ro$NF5&Bh-}EG zDK=FphN(%%3k;Zho=!VCAD^kh5ArgdN?8S7wVo#M`o4US3*mTS@__z+@s#qMj!q3$ z$?5|y%Yz4~v%h;X{&bB5^^|LLxL?7)k{7)~JI%5wX;>aBrj8#u*Hwv3ZsX(Q*h^c! zHn8-A$iOaJT}i~xCPB)pi}|uV(nr+*{TWQ{+XscEU1op2zbV(91?%@ebKM+2_1q!+ zkot$O@HWMMWNCW+V2z$!12EjDY5V@WFO|CEssAt-tcMfXwH=y& zFyc|dge0&=g_0}uQ#o>m-h&VgZH|>Z8@w#%5WwH25gi9_!oRm*v9b*~U6wA9Y zp3VFg(IAnRpEcL9cQPJPR}gG9a#E3XPLK^Ypnvx+byY5$E*R7I_iwP_p$~sS_*z!Y8cg`GIt$6)p;cHns}fCARY*C+(&wto z;4|qi@jq%Py=;)(zv8UDr|!sul3=QShnv66nL^K$!It=ZLaP3zML}y*yUM;?tC_jj zS*DtqT^Lj#84x_h8MV<-CDf(`6iS$&d5@@XBhzoncJDTotL{?44?R}QMWFiaNAzeC zg7m2i5FWAE{a2jcss|j);w_TiV zp0JZW$^6z9|Ls?R6DOkJ` zsdeXj{UK?DXNI1;!v*n*PBtsTU=5(ap%I&{@5;HDUGU_ov0!1$bBCk5d-pahbi*!v z9$3+KXsGx8d(S>poc~S|#jd$3sKx6xUBVKn_#IAdev&g!j!A-J&hGApny$2Fn%$$n9#`Qxpay;9D9~VeUkFr0Rh~u6!k{pa=h+Asl*5G@ZemD{DlK zQVnhCubpZqJ&z;1cuKAFcZ2o6dV_1XIJOUAbY5gi{^H=2RiQUuBW65)=^6d5c}QB# z;FjKj@)%n)t=zdMlSzoBC^Bo#&x2aV^A80HO7o0tt=~uQ-2QIld9+-K} zsz;H5&jT9x7XZQo>tY-eO9A>(MCBW7B|@gorb?f>t@tgrl`{I~)Q@^4C*^yJ-Yyx) z4JMLvjRLG60SwqQ3e&_!SU6Q*3rjU2=pE!Y5OtacXP3N9ADgE`9S%jGa$PZ+MX67F z-d!qk>}Q`vnoO5zRb(i?G|M0EFAV*Km}F72unONE=TBN3zw*s1KW`5M|G`3LN;4Mb zMjNVDdkKi~Z_QN1^>WH~?RASUS)&>OO!~FrQqtRmI;PSVrgObxK}4DzWhT%za^G>W zWg)Q$0V4&lg0jC}+&XQ%aH+0<)BIKc?rxau^TJ(a61SZD5J{+G5Pl^+nK@kG=U~#I z^i(_6sQAE9b+yf^->RACqsp`D^FbJ0vCmIlqxjZC)42!$c<3%3ETbtU8%E9f8_L$3 z_w{n%SGzoDBc|5XSpi(|&HF@ z4d%h=k7p)XMn*4hiC*Xsna_-x_GSG3gV^{3Kf^qMRtU}dqMUDanJ2_z>uAchTlOTZ zVCW7hpas+IiZNCZPfp{A0CB$Vmw%RFQRmwTXnllHk@XeBI!@8I{f6YqO>>p41ExJD zDxIt&qGTOh;BqbZEhMj%SR${EdyVhcw*OX-~bV$Ns2gJ&HAwN8`L+ zmoC%KxDc|_C4{cKYBkf};bX7l5nBieMH})PBoLS;SRQ^<9w>Uf6xPI^8+hy7aCCP@ zyn;rt`Prn(%WL?7t)$tf2|Z{W8SuEw*z!<5hs#qNtC@@L=eHn2p9I=OPxgPM1QPQ3 z*IQt&tM*rQ<4*Uad`ZGN{POJ;x~)$hE}{!cPl zU7SYniWXz{XS7AMIJjL+-U7`uX_&@-AHC-S{z`1LW%Hk3J%sufy$kbQnB6*f2WOyIslt5r5S7__z9cDVKVFCfa7|&E zr#4|zA}(PVe)|nz#puqDFvbV7ztPrUfepxT?h!$;#kq^|ij9)w0(6c3T3N`W`}8Xg zX{M0TJit6085Xk9B$-i&NFI|yb!bm0t|bxRH4y-Kmk|{!xo2bAj z&CxS0SvoJZvcN-GuBo8@FB^>sETk5ZBcSVfS zlWVV>3-yA2xqH-jW?qvaxdxwh(?zF2Ct@(hBSqh}zNxggW#Y*N8%n(MLHs6pX*bs{x+G@bY7fyF4!r%}MgKOFs2ky>UDbo*&i;Lut(!fg8;sN)a>Cz< zTgJwxQ7>N2F|{epBHc98bFquM?`#w5bfv5^uhlH2jM_48u15**PmiQbWBta=Y_58f zX)1n=lKMWD>BKN*%^^$lt#!CTLJxNLSpdP|Yt#-!;b~vN7(~5GAeQ z?#R4PZc}5X3~AdA z37bgsSdzC6PpO*ktDkVwXuWLgThck?W;BS)ZB&yoDejt#$sd(5DRn5GiE*j4i+ZZ& z-&cO~KR^E`fiANlX}26wt3#rSjG~77rk`6m$2AU5`P%mAs$LQ>4Ae9Z?CM+yF&=R= z%z4=PG%@A2UGkb|%4^-IJbC9r7qgyc@81+}X=_otNitGV8gw;@tm z2eR@8JkvUSb#9-t(Zo15cO=Jv#1R-%Oi3YkCqHvIr7(e9KbgZS{5!X2{87D}wTJxE zdqy|(^`JlMg0NG9yg<-8D?1=fQW>Ql`K(b3VP;!{Ar5|A#0KDM4%Rs@yGN8nw%D_No4_VOhX-alJI>l*JCr&BCZr$G5nd}PsQ&~sLE#{IY?t4Ak={Jj|ezk|b07=eOqodz%XZL=v zrCR84=={Efeb#8CW0s#Zym#>0naq8tJpfhizLLw$^07Vr<-Nrn?K^kUfUy5A^7t-X z%N^Yyk>gp<3UGxR?=qLd8lB!&d>zlU4pYnSY1yim6*b)-uIiaQEH$4@tFqEQPfKl0 zf!#~?=Fld9y@l}_B@Cms!z4R_moC-uHt*-OaI7O0JN_#zy=<`{GkQ5DJXF;^HvYSW z82H{P+8HvOmAO^$wkUownez8U%*Y62zHO45#Wu+(T9o$evTSP;m#lB!#AfKkpxBa4 z$EL5T4SoF>p46*cv1H$ZD5YfB`BiLMOc#CUcY?}yJDLk$8(4^fN*A%kgpM|)siNPM zmU~=0ZF0~5{>k2!!%ow6q45G!T)J1Td!&q#p@*Hg5&Myf9p{CUZx-wlS!v6cWttqg zWMyN|W~$RoksB{jY9jr3GE!E8Qh86p*s6^0vbtNwtqf3!ys_H_df$iaMFw4TpMvY27|I0`j-A{)7C$LUiy;r+ACE5pUuE(_@u7*G=#F*OuY((=~Zl$n<U)yMW}-}IC+~%0Sc8NAnbC)!@vwR4I{M%=y{P56q7Uz$ z;w3X1q|=x)OL`g?cO7{|<7`B4()%Gd%5QDNKreG^J9oqtqw5Yu(UoD)?pIErk=ahMia`gBb=Qrmy{FPsNeCs?>d>cvPUsp!3$DlySER1TT z38NGN&!Qxq$L?Uks7L8U6ea*oe_--NPpJH|yD)VJOrBl~0NlDp1lxNt3#R~**S<|| zdjBZDa_R>Pq@aglyU}-^^gnLBMKzUajh4pAXwz0{jZm<_3IKY@R*4`;e9$X^ z&tMoN(Lm;emS-9>1fa@XJXcCZIuFbg6fpOx|4ZLK^KX8knPswj^x*9T+H|2}aFYx!E3%L_g!%*=4(10==Z2 zIuXG(qE?0h0JGJ;O9y1;5g8N9JhpB+_s?e?@u4|?!$iB^?oL_t<*eC6^=M0bkPH>p zHgY{jn9C6N75Gmhsfcu6Hfdg^jmMU;r)-Ke&1dN^dMgtomwV&-bM4>B%$1EsS13lm z@W?C5GLs)k1N5om?E@cm?Ej{uvo&=d>_&9;tpW8}l{c4a8mF_OoX{CDPbe^NoMICiQ14ON@}J&YzIToeKdOk(=(tY|ddu_8$SfS!0=U z@BehB{&l_O`BS~lYO-F04Rfi7B2gw?Ey4JcmRA~qlqlSsz6cYzj*M>!PfW!n4*qDo zdff9cW;*lZySkU@KVBU?%`N%nt!1LYT^S>HS5)Oz;&ejfg@w}(IRQUnH?BGzXFgC| zNWUE&(<@rvFuOg8d%MwF>i)fLc#?OS|8REV4VQuSji<}J=Wx<%zE>+yRRK~%1uw&7 z#xa_&4MC2{276(tJAYG;f-^1}u+^wGyemzS#&iZc4xh5R2j78MSk>2;c2HfI3#DMo zcb2y9fGZW|XC5{76x>zu}g^Ri}}zfWTij(^9(LW>#92U%qlZXjP|C zkE+{(HGPo>*nUk8T2^j-$J;!C8^4XQd@5%K1ZC}nV0*@k zik*MY6<3r>iuNTNNRvf<-(1j>=1IznlTJNSAwTD~VIhBBy>?h`{@-Mh^i>|#%iFT;lDDiK(5o0$Yw6jdXC`gyJOo?+n_eF@m; z*jwf}N~wS~I+5GL8XWF(W}*!w$liDgfiEj}K~iKzbmk;tGA{5NUQK6i;e%$`Q)SFBVEWoQ*~W$t z_gN+DTu4#L9#65uC9Yn-`y(sKDa{(dCfJ)_Hi+w;2%n7SpEHIXLJJV%F=HxRh2;ue z6);W=Nb!=MI03kLZ|p4*z_i7+f*JC27OMYEjv$3m2fFb2E#*msqTch0$SPn67BqF5r-) zF;s<}S(<&~48u1w;1Rvaz_~%+fB|u0Lf7AM^-=?{8M(FPa2_;wY>~=aQX;8W<>e;B z_bx<9eV!zWtUOri%3HKh5hfRJ)G%@VY&GbvzuTdz_8FUiSsGj@(aA6p&C1Df85a|9 zS;Cv0oi(Q9AObmF>_Z$7RTRA;P6OXvb`3sSiiCb{@qM8z z3!}y(7k|CbuBl>nZ7Cf!TVqW z0Hm}CMs)$9+IRJCQ>$K9vuM}Y?iatJru`^sawY;LyBU+Z7$Zcaum1K4(5CNhs|D?; z+%>K}42u2T*17&Gqu(`-<0r|*JW8w4wpdJS-&|OzyR-r*BO4F)q-I@vc^e1-dLD*x zttiKWKu<7t=k~i%i(tV;u;?rBIj)MI)?)M&OaLIzG|0JK<_k`Ol7z&ZVOo<~TWu{s zJza1KltgD*2M-R=Hq-I)YwDMz=H)%2^G}~{Gm3>4ch5eBZ50BB@yPjr9DW2oS+iA2 z(lYeX>ZEp+ppm&s2f29Zy8=5#T+AbW4EZ!hV+pyMW#<(Xi2ye?gSD7d&G|0pKB(yvuDhvvno! z=~XxAKirPnZ2lix_x(@h|NjB}>~oysaO`96nRM*UvA66!jy*z06bW6&u~!ljs$*nj zXNBsRAqm;7V^op~sZ@IV`2PO=AFkJRyI#-h@wh)d1JmxjRn}}JSC>KVhV-KlyXaOB znEP+{z+d<^^B67*KWKe@vQ>w!9kT?6SqsGch{#Ew0Rwd8NlTglfbnz~UWD&2?SYon zy}(^}?Gqb^i{Os$J^ku_L-DhSU`w7lxhiMrTbC4zg%j@2SB9F&MotsJRRq@Ndx6lu zVSi((NGlh6K(ka_qO7pHx1ZihV{xVRCr>gJm}}K=rkWibYNpw0?wKUP_vBVw zvN1weQYM<20Is`&$r=IeBI(>#4nP=0wRx{XC;2Kop$6h#J!{bd;yX>cicw3tKTEv3A^Ty>lY{$mIJLwfux$T$0V z>Y;1TV-pL(n|Fk=v*_7br-AvX?fYY)sAZe`5AAlFx!_#%!@^HVr{s!Cb0-$Wqu1*MB^VeRBBY@Q z`ax4u3TP|hRQd7&_o9^Eg8^@Yz}Tk#hxb{?g!bTxtHBmD^H`)G4XV<{Lbis|o1j}K z;j@BS6fops$NYfsKx5$a;%6P}Hl45Iu=I#djiaHQ2;Z-N(q|WQ&OmsQjvb1E6RO1i z+>SGd%>NmhWT2riZ#zv=uMeT#FsfEh30FtQz^CZvuRw9k3*=oijz8v#T+9&<=pf7Z z_a&qjXqN3c+Bc6ykp|rj@I)so?@xmV9_6zA0bTo`_} zPf7kxd2u7@rKpSqif7NV%Dntq!u9Es+-`-PLb@`z!Y-QG4psU{`-h+24VBET4J)=W zOn_&9&PizGFFd(y^*OLw`;U&%X+PvmwWcCvKQD;NFZwovc?6-X!0e+p7&`DY(gyL3 z{P;{R_>3J`pP}>398zP+^Xl2so3JF|LvDFG>2BBGZhN^GBGz zj4)ZcpxObZQbDSY3i^zerspMS5mmDrb2kjL@VI}q@k^b}E}TrC?1*SjD!UuFSWgE) zoHS@08Ocd|rAU9JwhP*sd1bT<3b$j9db8LV>id8=E*r^nsn`9R8+h98R%GRPG^O^{ zzPjTr_2=K!|G3>M`P}lRDcy%Br8F_@{haNoK=oUZ>ONtb6-nV9Uj6pue%6Quw)@o! zy{mSQ=zZtfxuWlqAA(V2BnpS%oO!QETs%u>*};8Kqq7*GpgO(R|F?JNIDs z+D)&y7vlF{X{NCM%C=Q6qv!B7b7y9|U0GnJxJUw8N<4hEJ!bJ;OU4JgeUJ@U*Ie4@J%%(m{uG z9({ndXE)m86D5C=@bL1lKR&$qy?ZLMQ^8^UlMZ{UdGX=rhbxuIRs=&q z6~kw`g0U#USL>~DiecYjo{8=IM(I4=axcPrpi0N+ua}@q6R5j4Ip9H8y4~f^=_p_|{(E@7=SdH;*$L<5<8l0Q>!$}|3yNkU*!pZ?4W?yh4YVQF9 z^+-sUYQz5gO?KI>%c}+&f~*RH-}c7e>WD?{$13V3P{K~buw9uve!qStf7}1!&wBe) zm{RC>aRyrssayNSq}AiE&e-=yx2|h>Jo|mQ=~NsXIfHSJn%yFN2(sO+^8Hbz58EeU zAJMU|8ELEhZ`30?Pv1FxvNt{q_hRp8SvPM-@S4oFv|<0abO8BLyBB62y? z0EQFROE`>pwRDr&m!8o5DZ2Z)yWcS9kAEVfGp@xVWCq!To#;HszWZzj<|r&V92G=jKhLJ2lMJy8DuEdvt{Z zlb$_l)IaNR0x1rcnzgr?1;5lt?@9B#bGl#c>{jH=snQpE^u!_(aORM_2Kn{lI<0=w zjANoPUNUo>aVQG1W#5EVX5vM_%Av`)=Qo++OF?C+b275mmV9E2bC&~ef_+}g zpwxl=QzYS#pR*x%A>9+#2ub_e)^|tn1>?7bIg6O{!E30L8)rCEQB|IE74+vpi4Wm? zp&E{mvPjb%Lbv-!siYta6ZW`Mh$C?IG@3)~qCb0u&%^b(s>GM`^)>kklA2A1&FJx_ zwlef79m_2+p08V63=uoVFV-UUF8fq7zGwwt!X3%<7)-!MQRZ~OCr}J;q+~Hf=tg$Z1<;vVMYAKPJ0Vczv$~I1>Nnp zc*>O^4J&=`Z6{%~=1Hd%E19)4Y(npcGD56~NP6d3K;eXkbjh=H>C72Q)&S}m>ofU@ z&i&vX5lp!@s7n11kW6Pi00l_gh3kyub9QW8v+- zgv;Pm$wbLTUcGTxHzCBFC2?1>#5{mWg+Kg~t!-!)FNb}oJIBWg#njr5caAyRXIAEZ z=)74$oNk{j6HBZ4WZqiO)6mdrw{3bhKp;wE>Bf5BXW^J*dvn2rQp3V?i>7mt9+4L@ z3bE^3_h33cy9AsnnA3YRNXDM&j(PkBj>tMOHHak+7wM zv+22K{`t&iEcfTVkJtYDMV+1)%J3*GAOQcVZO#Nn_Q>4?H|VfS$vUs4$yhRLnha~*0_ux@_l)1 zH+d#dvZNNmzfucHfgTY3;)qE8_Z>Cr4$S%71sRxZVjj;C1AcY>Rg$$ENKx=qTH32S z#@rpc@Z+RGn?n1UuCJV_I=_c_bm&Mug{ORqi~zfeSLtjouPca0i5vTqhd!ZaJ8OP# zWZAvGs~^9o5BslGqxD>hY~A9SDz|W&Ix66+p>qnhZJSS}cbM;^p^kc#9aq=TDD={7 zUeHiM*=6nA(zZau?bD+A90nX^0x34OB1)c1BL%5Z?WcX^p)AjO;jD+7!|t8mRJWfQ z;oiGCRavqdr)8Rmiglsv^z2Rks}bXZCs5ZJ_2||CHrWS_lc_!ig7-K#8v3~HJ7*bu z=MoM1Z`KUvjX85QGC&IZ(V#|h73`VES`tyJ_DDpb4LjlUfJOEeBw9?AI)Z~*$Gogi z2sl>Rw0`#o?d+uJ#%|nhzwLn8TdDoz*l0JvdFDS^;wgVFS&boo<;T0L!JPMGR4pf+ z{2TiD>l>ladc-NbDWK-h8P!#IihC=YdU|G~wD!lSlDg5OVUh*YjIMi#)&pEbvurxb zJ~QB9Iqv1AsEQ`nM~%w_iyCg{J9`*^+>&&<3gOFxUpp4IhYz*ns<`jFdqpzkD;J-6 ztmIgc9Ykr5rzU`_katW+)t7oi67YbT#noKoWK(IVVC;q&4?~kgXWY0k`D!i z>luJl&6ZuFYsnQ)2EhT0DjuYU8%No$U&u|jRjE7XA>99{a#OU#TtA`-ZirW35*8!D zo8@5OZJUVqn=9^4Q&V~#rkFVX==1PXg`p`Kj?H1F3jplNO=gpqroTIn1G0~ktqMGs z!+CQ_P8nM1Rrw}fqS7RDIxby=HFpI7;ik7z-!X@1z9@#i(;#Af=vejv0A}O%n>9a; zEo8Hjpc{i@3MTTgI~jins|N*`GjddRnI-WeT8I%+>@tDzXxmYpwZlG4sQwjdhdOpn z0f`l|RDzhGVqljgF>i_< zRG!(srt4iF%Rk849seh<{q1n9W#Q9sHZ>o2q?z`U_w>cb+Q@1G(SaQz!UUBsK z`?F{G(ON4&w4vi50-<8OWueAOe6yKPZalRhOJ4f*@lT${Mhd&gR&ndW;Po+;S~0HQ z4=Z23dmvGm^${;ZVUx3qJraKN-IP`LAu#pW218UV=)2gjctNR7Fk2;b8LnRc2xX^m z&Yr%J1EilfEM zP>sS+C6RM?e}dtOGYFx!v>^O269E#s++P1cSJi1)jFxeXB2&EaPz(DG$()o2FNt*; zZLd6fm*k*qsrT4507ZJ5<_3tR{_*E?gWRwIjlw~Hakao#a2#IXa6B`T1fXYhY^KzN z+&U#LFb(4#MUo7shk#hZXq@G!Q_+wpy2B<0W(SN`6{^=jjD$$(W^M>*s@5z12R<~U zdao|(NXv9Zf;%h4S-TfHoGqZ4?~tvnpW4h%rr=5+1XSNQ_8NIuM%dUkMOPb`8J}#Y zg>DaK=I)lx{}I))~zjUX3-e#f&SfKokSh zgEG^pop4W(X~N+s$;&8R9`brvz1CgH$^d=5No3hLBwi!{O1nmGe;_)UfN1Fhsawis zuTAODhefa_-~J-J>cP6WTf@XB3T;oWl~M$kq3or=AMqO{^-pI%>%hBqs6mRAnlsI3SdX$bAJd}71&?xUvHG?TTj8#rVdi>rH)Qzj|x18$}zzD@mhpV zlSneSITnh=E6?l9H9HL}YJ+^p4nFZ|GN^2}Qdkurh?1F6qNS}EYfwc~kOdi1Y>sL< z)lWF4m4hsJVNZ_F6Vh4j(xbN0M*|>AlxxIWX-^0@uQUN{r>7zqj(4DJReu#_6KA<2 zGZ4Ee+-bA5P4;#`hD|j@jtr9n!R5x``tgX!8K+2E%Fi7qp4~|?=Q**i7wPgTP#WT8 zRr>Mu>vE6yuBm{k@b_K&J6fVCqICGiNn`;EF}SG9*X@EER7yVs}&6(Pie= z^z_Ed&pRpg-*vd)FZOF@cWY*C9@v|;*_;2E4?!*cRDqn8T(bS=r19GF;zg!&vR7L= z9{`r3gN`L$BPEwJW<;qMM4>Ua@}zX8&}iU2#j3y(#eiYnAV@uC7!IFMpJ?xMgGWiXm zDeMfmIhdNWA(9$NO^t+hom3Kzoax$X0$WI~dbcVnYo7CBjQ!0xx5W#$Y!&N)2r|G+ z1nZr4+Ea0gjGT2xoh|*c7+E|YvJ16-4!`qe#k_dl)*BiLq9R4+nj@AjrY%89OPB8< zUg)+Z$=ba`vDCkJ4H}?8cQao2BfUrAYnE>Oy9nQK<@F|S&EXWoku(heJWy|zcRTGk zZW(b+k{Y|a?9QMXQC=;JXbn|>k@0Kq^cIMmR($ zb%EM!Fy~7#-$al-Ogb4SOSHd?ou_+4)nG6>@QV(*w&3<+C7l6(D=hw294%O_-N$|r zbm9SWzm;c3z1T~v+evbgt6wR*2f01EraJDo?+yK)l&%UqMqoWExjdSg7cSjif@(;G z@7_i2GOZEEWRlb8Xu!J!h?$e|gD+#pB(d7_q0r0q zP^ow%%NP)6o)IVVR=YbuN3ZCiB#)+#PxXC}`0^`W5<;BZb8--9+3Hq>PNUc*!AtP? zfgpQvA_X3W}ry!Ero3vEWHfY zq{9UYkO4HSUNZl;Ot8|==B}zYy?uK9O{LxDjP8Pr^IJ$QhPS4a&$X@%@iNbI+1{I)r{S;gc zdhlrabc#tmvbHkI`F&axBTeeCE`c}gHc*sEhZ{;5--y5*BcuRrQW_VKcCnZG4P+L1 z@Ypj9dY(u+j}JSyi)j0jp}|PkuHDc|MwTuHXg~g-r8k+Za`XB6%esD*A%PH_A_Pf; zME_jbO+%7*Q><*aEv7eBaY%0*lGgkh$?*7rrA+=9jn8xCB2!TXM)O%9pK%XoY%kz= z`-(CpdD$O2<{em)qgVoV!=-Y$Wf0<(Q9rde!gJsXVJngu(jv(7B7g=BX4!_YTz=zk zo{=Q;w)FAF&9MOO4;x0JK2_RcTyL8Cle9dE6t4e*^?|dB1x|K2-!sJU>N|n+)0>vv zskKqtVwWf%G2qPZZJO%ypqFRe@l+=QShF5^oF(yoy4dx_#kux;&{fd${t4HrEtx@r(8-#zbe*IkHc?^z6GTm_MQX%? z-7`7em$kCI)-O9#)_!_9J1!tTY)u^b{ZW{CE)vC4=;7kgztV z`1Fu7GjQ*=z#7x-n(oco^l-oU$m1)?Kr)ExnM@|&sfq<~&Cr_(AXCZ5F>AKYS*c1` z@gU)=gXph8A6wFMxnauZ?)$)XFuN?V%f0A?Sfv(`&WF(KM)LVcPw5E8f|2Dz`Y6T zDrA$-OT zPaiS`862!S2Kg5Ml`A97j|A^lG-lD5jwmC^yapX7B^NRGu!Kj0eOWTJ{6V)@q;xRddz`@2ysWx zOBT#rcK&qN%6nAaWOFA%ihmE@4qrbHd;eNfCtmmBzY0X`bNd=AZ@;*pu)G4iV^*)o zdT?$IPNN&(rTQ%5r7ws?g0-I-r*?;La90|=!0H~ikGdpB;r2#wZj9YhUo{`Z&c_}1O3ti-acmGd;rB;jWrt(m~bwodQa z6cKnM(!B)%()hX|Tfn@snVbK6acR$x+a_n(z;hftv}oRXuojct)=jyqD?|fT_Mr>; zB5kkPpuWZaen$8k?MemA!_3u0gEr;>GexPN^o&s58C<%m;s}M#enutQNZq@DK5|a% zI;W?Fw?>;8k21|}lvx6AKPYb!6~it=2z{9)Dzmd$!9$Dpb1F8lxp7ayM)Dq~Bcs5A zt8Du@+mMULL-hrPFOy0c0(&Wvb)F_W>(Y;-IL8+i_;7yI$}IoNY$_)+$ST!?SzPvB z64TMhNq`JdRmXMB+!UD@I`!1>em5UdJ%L~V$yF*O-_H~KLvkyK>LTrsGL>%Aref6K-8c!AU6>(aX$qY>=#L)u4$gD^BvHng$^x@9G~P_msD3(O6Z;a2?on#rpZpu!{`A=yXY!o9K(w)^R{!7( zfd7(t9U_B;2_AGUvA^MTaEY2Q6yw!_>u7}3@($s)Ques?J$J>Q;&*MFS#`gB-7n@y z%alAhSM;RwKSA9##%IzXF2C-qh$wF z%G%)lY0QFK6xQh(B+S>YBZ~90%O8;yp+uYjvOq-L^bbkPu$1LvE;$uDF4z?>t>B7# z!S27GFIgL%9Twql^@e>2U%RODv5U!jkWO*&0)%+RQ_l5+Jaso2k4^@i!nSzo&mn1( z`@KY@aT`!6&von9^KSy29?k)WO1;vrDTq>DdWKAJhP^DEg-A9-iXk)O>$h1_J4^-n z4vA6&B3SFg>mP$@DN+SAe&>2a^{9okLXkR&PclqqhMC}x6}zbm`;cz~B4ANBG4|^u z3J=|YvucFw>9Jm@!9Igdw)+D9%4<}ZR}%5ebetJId_)57)(x>TXzncDeq}cY>im|4Aa^ z+%g1r3Sg&IIJkukpVFNaH6XA39F@kc4Rnef;Um>haamHR8wH4wqoQ7K(V@ci*HkKU zVfzOetUI5mH=1{@{Tm@_*@{izq%sPpk0%VijilKbXOcKnt+QoZ6)kJcV?AFU4x0?l z%r%mm?}d6SL2Ij+gATLWex|(V9=Hj>Qfc>GE;sy)rQ`by5RNJZ6k9(weNb#;GW72l z<7bEyFD<%U^SLYzM=fX!z-NpD8_y>gyNR533q-<6AFd7)n(Z1aOslzJ#!7Y|W%x2U zY1csbFUc@+NzwVjPWK5-HGB-GS}CE`23;g>ELeGXom$^CW&Q-pLWQ`#k@*B`F}z~r z!zKz7#rSa$t=0x zj=?|jBntk(ABtKgo=K>rVz(F|Eh6Z>z>Rv7i!ynq?1=nt6p4Ddwyf#gA*?NI>C!tT zEU$r&aNUorhJA<>&t_1r%of1=cdJRPQ}N=}T8noUK)>nY=j%BGOI$yl1>Rp!(oa7b z8BBxetrGtFQ#!>3rgS(dhV`}~F2^lGl)G4U2k(*k0dkHp9i8k^alfAGBSM5KzXye% z#;W$QWdziE$PiNvB5~lne11o`rFlz-OgX*eKTot5vyRM z)#u0st)ViV3C!;95I;^~@+$t8jIn8#O!=Z~jSbZ1>4NE6|29dg@_`9(;Gg+O!aiuv1(+gJ8L~V&saJg<=H(Iq<3l#+RSjl@m9>rrN3y zUJADA>^y-xE}rr*_;9f@B(sCQ|L#ortgFX8Asc}q?(OeL0cKGIYa3Wwo}uU$`!nhAM>P4ivFhej|5LG z^?^UtkA2rcNCBips56Vs9GLYs-3U^qqI3c)hKuFUE7!;ACG37o(K?*Wjt$xihqKvk zc4{yo;T>GY@>@?1pG>pVAQU@kM?aA&oa^@#ckrv^akY(a%Fu5xjg?IzQ;rODyK{u4 zQdj~95%VAj*$CVDmc5|7@(~C{9u^!iVD8LT<+NwYWvR)_M|Cjk7cb~JgM_Alr7vJ~ zAazgCN~`G2;G@Ay&4OY_&{y`t_6G~hkrpS;%awLlGe47~ymx_`g92`FF0dQhqhp@G zKW?}Fo)Z98gd-@5N8rtNDpm)$+=k&?fC5Lp9y11KQo&ol(-1{tf?LD~3l#oFus{^3 zWh7h33C7_?>iSZm>ShEJpl2DB-FyG?T#>WI$k;i81JC%>ZY8~4#KK0xH#T&s;SEEE zX+^Q1kogC#CzJhFyl;7@*%kZeZCSn$l*#)setB zk&lU8tfdGhOkigo7}MBBpkWxa28hcJY_n{v9m=jFVt6pS;KM{QUO8Tn3ZyG$5_Q?( zZIxM=nL?(DXTrJfOfEY8XnJ=lyFyN_<_g{ahzr6}v<{tF=l%(~+-s%_*z|8&cvhsL zM^;o_EdL9oM~c!bA_2bnL2&(`QX}Y0r`riFr_u;g9l6C~H^iX>)@>6)HBD(1r>Y0P zF$csEbYc{p2&aS4D)-t#q0Dv^8)LJEX2|dwqu>ikECPaw$TC_Gf7$6u?B*=CcRv~( zVuB3|7d>wl<(GeB@$TW%@7AmyC0M-19d11$GY+inX2WiJ-MupnJp)yqGZ4g4bP}P+ zB8m4RAczLdvJos4LAM&)Y;rPSvNK{M@$y$e!{@=7VaL|s*wi_;RnhbS`^V5{Bp|$M z!2+Klj1xvTiR*MyVZB3AD;tt(HrU&Rn7wKoC?r05MY?;!^m-5kRH8Tn!40w}){A-R zeRP$0+crUAD&S=s0XDxZ?(Ybi4OsvOOo9R+-f+6P!;Q^igr$~^9!>6}s8GcI4UzX zBI^(%^!2rrXI=9pT_!+1pmcIYQz=IE0+^3n#UEvYQZ|qf~-9ou4qOUoTyPx21b6 z&s50HU3Ak(51>>9KPX8JZ&?s`cGc3bLel_V0g3{dBI!1y7zlVr)?=Lg$t=9yv(>1~ z!iC&HXrfpGU@$*^Klj5ibdi(4T~g?FsDyhev3(TNR{)oHH(@pwT4S!pMW&UGrd-_j zPl9h;e;kfKfHGG91JO-((8!(aO&%7q)77=rIQ#=JgR#i3VaZwbVJ{x8Y{1*~6 zAj_P(kI7O>N!?a=YY$ z7dDL`yTdg~^0`CnhgeU@=J5BXn@l1lgB>f-9kCO1`Ks#mlUY45Vo*3YDD4L2rg3xY z(4|RDS0>>Tiy>SiflM=-7&{|%0pg^?E5u3K6=WDHb+E`FJh;7TdsLd z>a>1~VYSkBf3p8PF|xeq-jh4@>^lJLsUd;W6C$$K-pu3P>tF&IgW_ASj6{{kk0y*@ z5(zE>Ge!ajhJqtRe%hjXq7n1JElWA^ukN)frsBeH{0zP2bvFHpvZhQol?y4R ztR6>v2>#k7CBt>16pK-K1A*SCd#=ej*Rh1pbH(w3<-Y##8b~?G-d(p8^mIZPhNOD1 zmvh+V?Uua96W`+807_7Zf5ZCsaj?Qx`{KdyyN7giKn<4W0-iJy6an}SQqVLLHim(E zY{X}ij&ld$PqhNr0;O7Ltz!TP_^%FVloAH^Q{KvZyot~@ABK=Ayw=gefpq=>1K}cS zFIuiwY`gO9ekG#L=O5)+gKLoLcJ)|>dv`RXf-X!1!&-w-oRFuNd5fE?`co)npUz&Y z^)*T!eUwaxZk7=`L`9{C)n$wXXTSlo6ts?#iFt=!FM`#Vff1lHv^K1RkN2OUWrU{? ze}#f%K90Rl5BN|;XA_{vk`2&qL;N*@h8A?iqT%$Ydiig)l7Nwdc=+|MAz?diwv=f1 z{Ak2^ucJr`%!*8?pu^)M5tyBX+mVCQdz;tIOuzc8^gI>XFw_UC%)^QPjVV%zRMk*W z((Ui9h8ry3$)78~%?fsng-fkH{@5|J~few4M3m+uo_~+QQ#xArBO zm^jf*Z}ZO%{J%68I3XSmyXNH{>*1S@i`2XuZSB`KQIy) z5EYn=!#2I$-kY7heI6(5A+0_$Yp?n1l0oaLXJ`7xtTVv3Ro=$wtF;L<3m@=TfDQi* z^D-D-Y$iV*;?j_E?PrI3`i6Mz7PEYb=4V}g|9DtoMLtEiezzz3n{5g0TCDumn;Z`t z|J%*;Ole@BRKM z*OqLn&KQiM%eTxEdFp{D4U`>P@xKpr1O3C6v+E5(^^$EMR}VwP)J&xBp*|x@@kXpU zRK0Z67gce{v{g8vuboNdjrq^O0|EUFk1L05u1IlT?xpYb0r9 z4yoK{76uYti(}Ip|c)E4U8>1&S=I_97 z@vWb=TJ;Z49aCX#0A~b5JU&!&1m~{25_tQlBd+(sN5Kbo>49A-902e0jQAjXmvu1r z)OqbbdSOq$!)2hqzl=A5z|AHDElWNA<-c&6h2Afk`QVDSuGq)$y7DmX4fV?C3&@kW z25o5J?(+CZf_lY+)=S`}YS5MwprVraU=xTe`Az+m@XAW(b-CskhoPRwP*3VPtfD(x zmBxjbLvySCjH~ez+Eh1dHl3ajW!RW0gz&cE~*c9b!@}#?sfY{L%!=B!yS=-(6-g z%D9u!qOuTB5lOhH~jmqq)y%&lpR++dXg(Iz5xxu?6X$2MR zrL~bP98)U#Vj<|%LWAdh7aQEEQ3fLF}VHb9?sTV@g(+jbmyxh2 znf@t}sY7C@l9b$5ZMm5Iz5$%8uYpK&*RjkPj=i9;dF02?!%#Pp-1^}&d596q<;J3b zGg=9itt`iVP2wy;%7`C7OQDdIQ+LZQWtGd2VfJWV%5@(;r5nK1n;&}+Jh zWLjnvp&mqy>%JV)g)k0B@-j(;eY#snTK!bOaVlw}6c_pG6Epcje7n4K#&{!FEp64_ zOel>{30yOxeG%mtR5Y7ad1#N$)~`^x->jILL^S=mdGcC4Ola8Pz)sJL<|tp!92OXa zJh+yR4G+y_B7)XxD`C8i94~Z`?Db+O)dWg8(YdseU+2UbMzFk_5S=rZ)HN!!^rK=O zZw9j4rU*=Hh#w>EV?e_bmFa(s7V0Gy+2m>p$}G+I>eo~Ck+e0XLFJDs7dOe8&q!w|$ng4T2mhlKfEBIb*!2!+rD z>Ws7BGUZbw(LtQo&Cz@JZu&n{c}evhY8d4ERMzQ(cSaX9gf5@)`W$Z2eusTu z%eh>u@mN!$`B}@i#~(ofEKjaEW>4&nv=$2oZlv7G)KF<#37(8;5v{0*Y@xDS9%Kn^i%smYj186) zG?T_pmGZD$hsZgZ$Ucdmoanru+ms5|GJAOE(ou=-lZ&n7rxq-SBRqHZrVQLB$>5Ex zma@dfZ(;n zDacF#Bya%iATcPizgz%S!=HD0DqhJW1ZNEsSVOtFPr^$MkUZTubEX2H(cTXAZ((O( zua2wNhKu}jeR!))gTYm8BvWHTk{Cw)zRC1D&l7nXCChpW!p@+=v;_RFR-WS9LbG@A zwAqTFjmx(1stTrie&?*+06segh#2e#CKrh-6+AWA6y1r>uzM?7UyuR^De+Ju;7%iA z#RGyN>8SsCDw_cq0 z0dq0GanDg&pUHU|L}B+r-6NRa8j&br#}<;-r?>1}xSAS5Az|ZGmXo9;^X5(FFeE`S zo01!)BKW9N>}xmxAuc+FNT&^oI;~o7x>thbBA;4cV=O)If+E;X72W_WB|fWUROpDY zvpgGe=SPION@HH&ir8~~84OlWI#^-^-LtPnj|u(1-cN!9bpDtCc(cYs3QrdH&msU%f58@ zB^d5c=F%S)8`XxF`zzMi=OvWXB)}~u!bU^Cmkh-lg3)8-6@1gN0W5}qVJbX?MV_0@ zkhdNjtSvGo7WY0JsR#ECN=k+H&BD5VzPO2hv=yW7;g25(=)<;EalKV^EQ2W35i-qK z1e^o-ast5|#s*l2nX*_nQKZX^y^}mfB3fu=yxqalam293EI0(UCcBw@F0?`hddNdT z!8l#6@I3Ka5UAcUIxS-TL3ZAdog@FQL;)q8OdA}+3+0()({tjPYAR#1Ibsy$T=hDs zqXC=;+3)O`P93cb)yBVP)0;$my|ASEx?oK8oJig!dhA#x*M; zY%VMSD68YXdvbC5v0h4FC29e6(X$P!vKdj`&@XS|+T#0Mnn>6JI|sB&8Rp`0#l2>H z;I~Wa;|>1ky0iZr@3!=u`cKHpv8Z~x=9Huyv016TUJq6XH{>WIAX+d+fbX%#dO&Tw zhP>@1r@n`XJ0_hviQ_s9Hzdif}Oz)j1RFr2LlBW#8Y=eE;+Q*k6I2VvXfW zYE8NR*a0j3;cwi^Owu=G*r)8}S^Gnv87K>2Tf zD?^7&NjpFA_VW4(62APo*WJsG_ zxAc_=5OW04(qF{#YZZ1C#3N6`Hc^)J4A`fpev(^%Lgcb=*1QG8kaba^834m;c~!3M z3$wA8N&)m_raIG>EobndF{gArqSUkzVcRsr+zhY2hF$k#DcNwgWw0iY-{m&RDZD_G z*T@~Ny-OfGnhraU$luQ0WfB5V@5B&kW4tn4oFle zyS5si!Zbp@h)A`y{3@93$IbK{JH zfX@s5?WY1V(;Nn~MS7LVrm_MBU|u(h@CKOIZZ_t5`yS-0a-=Cm)Aiv6ws7kQlf**)k1-xT+r|uOE|?N;=}V= z0E+;yWlBQJB*FR%+z$)5&s2*n&`?{0iu9mrzLPC5wT_EEhkOg?H|x=c9g3 znbjow)Y%B}hpq5;esWJy(?iW4WVhg)=!n@4wY?!8kUwHkUfH}a^vcFl=%=ay0)>vNS>KcweQp;k0#pYKt(DZ1=A zE3aF1!rl?x8$)wzRc)gqvlpw}~{fDJCl0xq6nmkQ+?MIp(@IO71)ez1^j)ml#bccLN4#4@WJ4M`6LK zCnTSIK(V<^h?H)CuTGDiN1=qxwUFQkd6z4SQtwfU>J5ShW5Wjk+IXbhb+eOwN4Y&w z|FoaFzslc3OKhy4z%hxfi7l93_+MJWD%9s*ViR@-4}==DKzAZpHU+ zKMJJYF}Lk5dO&aLI8q6^?;iK$cKhIof|s0HYk7V;E;wD>zW#*D$fY$)8z+Q%UWv5n zbGLcq5r03UVa(I0+AX-O>_(f``G$~?TQ2$IY9?g{L8T|;oU2Yj)a9Ee=3QFQs=QK> zk6NPyp9)^p_3`*-Pv7hC+sg@ElZh#tiUiB{nWc)7k;@H3!D(~{)jA6uj}zW5w(y|v z!Ur?8SOMci*Zf*B)4cAsmvJE#MOVH>+_+DWF>y7fGz~mg2~JNuI}xGwP$%wM?2RQa zqaJc`7dd{}HRNgO-6zqh_d-HmBm^yldrZVOZ3Y2rxw-XCb>q234S{hJO>J}XCgm!g z^|2netlfcB@A=O0d27n8K@K|^8!X8I!1mc+T95}XKH*U zqIONi?W#Mag>t8t=eO<$QL!#zoaZ5GK z>RyCO`$*bI-PzRw(U-xXTVTDPlMmTU%>jZ4WReM#a^vIlT_S2vVDiCh0xNNn?X<^q zsOCvzExw*!*SNsxa(&PKVb?tuDA)fOI?J%8+Bgm`Si$H{K{_2hdZXJRA?>7_QA(-X zsDZ?!M9Ps;Dyg8Lqd@^dPyrE!q<{#Dim$=TxAW~>=X$Plo%8&k-|xP?eeAGriKuo( zM*-aL2~1t!TqSF!P5A!Oles4e!Su)HE~&9XN5JZ?5|>GE7A}p`mF%bRoYNhNSM^%U z9nbd<&JPKeHFSP?<6-KZsRSC~|1o9`X ztSKBV5;I)k`ZmM;`dJ@}RD(YN@#^STw$>X?bn2C*)h?*!++NqaOH|M&NopA#EG2+_ zWPvk>#^E!WzPy2j9q2u>x7qmi5>!#>wrj-!<>mopt|9R$!S}n!BJ+F5vRG7#%Ow>L-i~Y6jX{Vc4bE)V@pzK02kL?^raO+ciZy;wgNV)Ds!qZ_ z0k^#;J++{-toI`NWpOZzkw6DCd*cy^p<}5?DKN1#UdSyX_E#aSXJ)7VzAbjXwT$aO z-6#i`aU8=fnJS(J>9dp&>6i%adFvh`aq`WL+nULD+}e90xkGDCd{(ZTp}CBCWq64` z1d+9D6JskHsQER0+d5<#Q+eI}On#x;+&c32s=CQ37L)KQO1v^4Pq?jGv?!8qk!=YT z2!8qlrw6>J8ZkC8{Zix#OO0y9i-&UA#S;*8igfNCXElemo@9 z>D+)#Hd%E4tJg&;G7UDCTUKYbPIPhd)(%a+G&M`J+Jnv;4t{6hb5w&jsK)Gcybh|+7*y8)kXVO8{V|TrV{&G&{3<3tjVk_e z4yaC#I0RyeJxy?>B1<@tH^#7te`6#rdz@hu3M;ZbAd43QXh>KAX!)h@o@g~1+VQS~`3kWZTg%qB3WtYP%u$RBkKNbfV zIytn8H=kAO#sg0K*217^D5At6F9BT*iYS5cFVWcr@fc`BTz^?*-vk%1Ge_`ye2x|7Ud0Z%I~gbWCk z!-*U+c2Om2E-fd{#sWpHqwybb2%(GBToDN@ap?!;pC_jEmS@bB1JJ3O)GEGE{Qc0G zwA9$|--1j#o$7QSiG6R#sAKB?ie=45rW_Yrt>OKx8m@3PNv!#)sLn(N-5J(E9Gvt( zMc78vdQr<8_Qq|T1zFBDRdeEdItWG9xECyvqJs^}%U0_>(LdJukX69EC$~;%`GYLt zt4x1$z7}fVZX_kE1e>eDpK+8wJSA#+mWTmD1B|cAVXe#&A z+Igt+Paj1)hFmZy52Oyyqn@y}!<26eJ^#Ff8G4FxQ+W%s3upN~-6@~Iep zg-V=KKR!VEKlg{fveaPt5|zgd7koWc53Rj_O)})mwkJQwC}i$p*40m)EgL6VSNoW& zBV^k2LcVZ%T?cUhoIBJ6i-~(JSH*bgY}D+)oyX6^zYCuu?5ONl zLxJ6rHtiNd_=XXlU7|VS4 z*`JqU@8Typ(jwQ#mD%k_9CkIrEgUCphmzH+yeeRe0;-0vE{$cK-bLA zJPV_hU%I{Zmv0|t2g2*n0}D3G&#dlrErAi=muv(%vu#b!Hpb@59rUwZ{ry*p7j=i} z&T5gb)xiOFOB?Vipp9u^$b`7TtVS^k`zlnbd*Q}QX@xelpo>>}&hpfWP-WX`5%J${ z!uZP$N!Cw+fgXZ=xOB*cS6ANgyY2^y`sa^aCTDef6n%aK12Q6*(9&NX!Q>>}T4R%q zv_<}0kr4wx6a)0kR+DuP^`kl*lIchVtnve6afgfECIp1~kZ}_5y6I+u2?K00o#62} zZsj#=PBp(eMV%GLqJ4}`0^T@$mm+Opn(u=M7}i*S|f&|93+CGNL~%jlbCsiRUdyD3H|mL9N8dFvQ}b;ph7wTRDG zGVg7sN^t<3)HJzCM3-s@&qLvt--&Dudj9ba_kqIaRbB1c2ouwM5#mfqICdROMn(|D zxHxXPP4sp~M&^3LX?ub)%c@ty|ADG*0u83V1vXz~KDdXRZJ_K(0>4y8!|HIMahc8+ zVv;OkWNLLiF`lvo-m;En&Q7tuH8LU5U{5Ecg9K9}4%qt*CG$fIZ>)!yB|NBSHD*Bg zu7c9!{6whgAEsF=uOi|b$ZVf{y>S!)hQWsp82Q%b5KYU4p<3v8-i@0FN?<5QQzn?IwhnB zp+%+GrkpcH>sr6gS*GMGxy3NXTx7o?j5&nV@owL!xxC^IfgKo|RVW6B)F+h~WR@5l z3JoxXA|(MuI5tga5TVU@j#0Qs2i4%&UckjP9gAER5{fc1QsSxHcSJ7*-^!1r_z~Cx z5vis}D#3Rsu_oG?L15cK4HzoKnn`d_)6*&CcJdY;w3hiLfXn01mDB^9mUo-L#AnD# zXk&Q3ZWkE3AtPudYW@v}9cX@~giVy>peqN@E2o&HxW-7|_<3~{o4i9&!V#5b7re6)z}FVH_b`rp(!KQHVJPwB&`{#}}d{fs~)q07vUG zEIO5?w3ulT4p~$^=HhHts0y;K(zsU@DGjmuV(Tv&y&|3XR~ zH=^ZCSP_!mbSfj{fth(+np`+zuJZ#4Mbxj<=w!b$=OnXx@TfBuIsb&GcG1yd~=YQLPcVw`eA5yLSm9UeUXwEd>LpCR$I7a!H-=As)KQFDc}u;IqfXn<5Q zKn6cxtjN5FiHTpxe0ERw)BB!4zI)GhfEK{#Uqac3r`smPnFIh-a2R{v`=_Hqk8Y#b z)##8U;?s-^-Vv>L&+pyqOQI8I9x-0Xx%aeJTBz^@M*RddYF^;?lD%$-fo`52borIN zdg@`B+Fg4^>TgEh_x^4-0wB(FRK_-DZ8w#Vx%qQ_{&_`LamQ| z7}0nF|+tBcS5hyr|x8jzakmi8Q26$Y$%JPX`uT0;@pWGr@e>v0^D zI06e1^89T%YM>M~N9!U{(6c(XzNV!=l~aGm$#1N$7uGy(7j|9Wnsw=0Wq$+NG!b#= zc7Np~nD;SECl(|^h%+(IUc*B5sNhWkXi1~&ohxo}TjN(WV2$xIK5Sr6X=e3z)6=Un z$E_0+OFhx+6T&zr31^_ufmz!~S0WW?sYu_q}%QO>pq4uZcymWPOIp_aUY(6fB29K`8g#l{xb(nsbc`IiotT5;~xu zG;>?Alao~M<6af9(IcvC!At`j(g4EK&60o3Jf3#hG>vcfPClg=z!Iq0YC|SZuDLW$ zT0ePel#YDaJ-hAJUZlW(#iMb~J$p=#spj!3SpsY;8djKNvh@*SZve}&d{}Ze)p1hZ z+Ud;mI}kTO=koi9e9E0N*?m$=5v?Kh5pS#?AAlcSV}Uc+&_wWc4)%TV*F?>Vl&k4` zybmltO(oHRNe7jSv{xDNqLo|F_p%>Mls>4RRWI#HxGAZ=LLSDPgx@z(epU6e@jW!! zkGN3!0dCKFqc?MUep}vjK>la+In4XMlIF#SFW8I~M~jJ_51M)+A+B8puOGJp4*~3G zjKFgPQR?UmQUkvbvfUr~D zg)DE|uBoXXfDtI9bHw|72JAW!e87P1GuVX1d2gUf1ZZ6HRjc9f+1q=yfCSKgBGhYR zrORJMa|VJGV=WC^(HOqRS2$l8iQc_y@k+a-A6;_3*zc0aiB3)qjp_Vfir&-iV*FzM z?#oj?p>gxWe@*La2Yu|yqvm2`k64k_58#gho04<@8U?aweSf31)nMuMY~ampX{IQ} zp_0U@Z3H#EduiL5-y7GywGgz3iBe8|^;*V6*-!K{lK*gz8amC|XscuKng3VktFWtA zX2%xFMf1yWec5^|TBuKjK?6S&-U1mpe2G;rldF#D>+^a&#(JEx1psXnG7Eql#J@+= z0d3P?9!`HbJ>{MyDz&p!JVM`kX2W9nsg@^!5>aXL)HS077EW0Q^W|AyDz7ATPiDTZ zITtUPvaFtbD|{_Ke4Wd~kD*ewrgAvC{dK2KGHf*eTqA7oXET zsU|*mDwXE|>!IY4+`ZWmITfakc;JH5MU!Hvzz1r$Uxwt>yzqrh_Je7r8z(=@IJjPS zmo3FEu6nOX{aL@1Q(wA`XF}Hxe;NhS*SRzgW zk@Mdtttj=Vb|dtoTEE-r?&j=u3Cxw7dDg#|6vM zfBN#@J+xwZRY_Gt|1BN}7M*4?G^S-9cN?B0Eo!j8O!eG-!fga*vb|;X4QveEp<5w-U0oO{_@|$Q_m|aUR6-NHxyHFEAJF9+f zQRBjF@!=3c<%~(Cc+A6E_CiDJ(xVv%Nx^eG88~6J+P9fy{1X*H)8UiS?zdI$yP4c< zaG-@Y{HlerS4ze=me%e7>P<2d%fiCCX5?6^m5PVNrt4m&A{>J3wz<9|R^C6BVoVKd zr>GeAs2?em^w)^iUP0i+57s`i=J6??H9a<7WodGij2Az~f)@OfCYBD`-YvvzWzF?w zn``L?n1{>m6I26LK2+%K?KhfQZRVc5SYS<#4@N!dFNOAxi}&Dq`R@4pg*Zqq<`l<- z1U4Al{#VX7%;unnyC2w9DUG<;5!OER21-(bDODJhU0DJO2OUD_Nw*(-cp|m8^RD@4 z&dn=}Q9z&=Mvj<47*IXSH-f7I@Hz=#!KvCxPi^4=m6tcwGnKwhvw(5Jc4Y?f-#&^_ z_k)x(L?;%2j|%O-u8N(r@3wdh9TTtV*2prcCb<(^>V&tm2Z+V$m4h^416qnokyB@l zH3&7ZOHaShDs`?!34ZW8|7b!jRK!cE?V*as=YeyR{~djdOxNZJ+JcF3D2W#blp^lI zCHYby#k}}mA8%eX2Y{JV6!0hMf?xqndZmRCvaM#uI1E$vp|^xn>Wb&ms^b-Ws@>?K z)8Zj0syfrWoP`XI$dSnO4ABiaqHT`32lq|s#Q*uk`=VJl$cOvBwZyCZb~fBOmVj{h zF5ri)fCW#;Atz+=&rTA{bHSs*W{*DF_DcwV{OW2E!6%sXDj+M!yzLymigA8)4}G>W zfqAipoXQo_>A(RtAAx~2nvTT6_p$TlybHj%3@|25nfP9)d(Fvt`0{s9_4RK)6m=oj z=*F$EI!KCV*`Cb1`f{@DeDj|LQ-p8-Y?@MsEiSTIsk|#yDR}hG6?catvW-g5zS@)L z|91YYvU0cw$&iP*l1{F+VV@sw+{Q?@4(1}XyUi$MDppS79Ew?0@|?B0_>k?jd9bu_ zTrW)PipZ3t@UxoBTc9(zH}P*+#t20Xnok6y8*e?V8Fn$SuOE)uiqFY!a@ujIFZ527 zhxGcz-V%4CRT&T$TB)Mk_oG_877aDmKv%B}LIor~@I8B!vNOcz8-{beF33}K&L=^- zNSB7MKh<7q>6x;3$#>UfyZ`5B8ZLy39}ztKr%~pTt0R?n9;vM0Y7_N&%|Xn z#312`WJNDqrHprd6OX^vN-Y>6p8gnJA0E}L@)rmMEz@WL z+xDtihhA?}wNK<$7D$|bEg?n<7?1=NBYC?KPDv&r!M&$LfZszAk22)nA2WPfbufw# z2x-35NZ3q}L$hviw|Z}$Wma=q?D9o5nei`CQYLrAtow-<=rw1ow=c;*IE#_bR*8jK zj-uxairY&Vfsw{sa=}WXzX96N2y5` z`d!#`1yjDNffsDufl?_)hHN68!WO#V_3Cal+2W7zzq@8etrv<8T#bof+Zw^NJGmWu zn7|!Q8>`8)%+=1j?utder6Z~-Q3teArw)_-M+>7X!Qr8oT(ddNiMh#)bG(_!!u3mh zt&chP!mWnqegruRC+qGxek9sC$5l7Q)dCSfO}Sg>>7i{`Su12wId@H|bAVag zB_9Yy!Ev$v<9CD?Zn1g6?E*jHid8DVcl^LL-%(Ot?DA9~olcoVBgeSyByr#f^7Khr ziW<3c0Qk;3TA~tclCF3AiTxR*M59VAXGCn_cye(hEbSYXklInhjgk=Bb%k+Vm%^Rp z_0McEeZ5vvi<5FNLBy1#@RtEDPLQi^b5Y4ErB8M9tZn%BI0D?~YsCD&I~z`TenLJN zz8@7!)W6Ok_0(^6jU}Q$1Mh|2B=2Ozk71d|>7!y?cTlz0CjiwD&Ldnt>hq^m6GV~@tXE-Cc=Hx9BMbJaIz%(b!6_d`>hSfnVDtZq36YKgB`mqSXdtTgK6 zZ&zn~bNn1s<8~=3-hCOH9Z?eZW|%GZ7Tc9tvsNJE!PNC19blT%Ym@hfz}(FFp$G1se&yfgUH0)_gM8|ObP_HbbV<&f45f%SWo72&oqe>q91I&DaiC%W0d8)RJ*3~ zz4l5u>--ara_hu3IEL0(!8ousSB*vGX40H_K(^=~06Ad-@Gu%KdcwbttNy$H)3;vG zI4Gf@Z>@Di#1;>-vi1=YPgtF>^L(AJD^lyP1V(V?658*6@Q~6hn^OE@-ufTEkM#7! zO@f_yOn3yw_%5W@lqD?ZesfD(cA*=C)BUkD%{96Y%W8JeDVEXF_1)Yn{@*4LK?B^5 ztuWgrYvT<%|sOQ?5ahD$* z7aPAam#Og*c==AInPblV*WN=h3-i{|m8rTD;RJy3%PEFluc>X#9kjiC?EwWbi{;IYQ(@n=Z}t~rZ( zq+BYZtp=0D{jAcJIY+%D?-((>69(Z35^7;KUKbyOi+lFj|KoJT| z1dtLBNck%dVZkX%ADCFJ0>h-)~w%!)<&&z33IS~J&>+i0L(}l1QAGx?Sf&3 zIC$ytcOf1<9C5=~~0OccPKK$QCU%pZ?^&($#G20q+{b~j;B2Vhh;_S;(d)UPuD=9);!0+9lJ z$y%crJ<*EHVlajYf#w@_B(fd@f%1K`YvRgF#*t)*IT02hPI@d@VkN=J^9wG+0A=00 z&uE6^_}(pXy_1awhtmP4dUlRvLj$68NVW(PFf=}H?jEGYS|Y-F@Jy;lFTeTzzKN+( z1J;Om&UykXn$7j^u)Gw@r^adAm!-d}YwTdz$#kKku93bYRCt>>RiOXN@o@+3K?g?E|4`?PPpKeYt$UFPiYG21YTedlz@B|7f4Ge> zfOuod3`fr6KNN%bkrM+v$PG`*N*UR3y%RD2@>vU8Fw%CLXTo?645QhX!~$61VAlC5 zssBbIT+=lOr&Xef!|VwwTZ?033)&D+NBntnE6E#R*(N}{oNv@$t-VX@{rYCL z!z4-XUNg}nRXfQMs(j(c~G;;sMt_F%xLl=T#T83eBQTB9PR2A0;m@U13( zLFiHmG-)18Wsq42U21g{T6d8R8mtkQ9!f~h;~=|lqff=NqjwyO%kA~M99il1aX~J7 z$P`0o9T+@CeeCI;9%PTD2Zft^Y5FR1!{PMq5M0-dqkI`t+UwY23F%3pn>0kVq+B=T zY6FlNrIu0tTH>Z|<2T74LOjfvN>&a>4PH<<9_o&n_lc+cy8Mj8)=`R(&M^lyh<$b< zc}t|f+?=<|-r%zBOh#}#X-jXOV(IFR@>rN0VH*bIB#m&vXE_SbtSCF2=)VE8b_4T1 zyXHH)JvVc^4OzGyzI?k520gXVZp@g~xm_2yNG`V!G^ubwP0rYM{+n2Ods*o3G&{6` zGc1gk0B&*O3&nQJD3n|98+&9f_;wBiY6&TI_M~;%8sPxf=iTI~56Uj{9TE6I z==3AZ>y`pgABWJJSZ=v_fKda`iGydR&;3V{Qsb`iahj#FKa+XG>5eX)e=Iwr+dMt~ z<39tg_PFxh_-E?ySy((k#+4Wp`)quCp8K<-@w$f#It?APe1ec!(5z&j7z{K8>=blr zbpb*TtnS=*bBf7`mwUIT$#RSlojc?LjX{rGyZjgnQ4E%n5Wo7v6fpvIWX!$YZ-sr} z!i=)Ba+jGof$Tvi{_e_1Q-*eUx$0DWTzF&deuxg7|EMNM3S|(TOC5JKX7uXpF`qpW zacQ^x*I0`2m+aRx{w--W0HL&gP8!yK1ZWuH2^qse4)iaP&;KeUf-Rxn$H0|3?A10I zsGYotBG4JVON@j|?d6Nded}k%3VDw~w)E6%tsviH@T4o;Kn^+5H_kSCc8YMWgMxOQn;~kaw!)aC!Th5pM2AM4ZR=a;!2ck0A4!w zWWR3b|HJC)LCUT(0EM3vAGSUidlEJFgqQDiP4eThP(Lo*Y4n36Nmv}EDkXabTDt_! zIA1b9PE*CF+A;#u4gdxR#J_!8e>X0*_l0=KLtR4*4cDF7&}pGW|L{5(+ZgJTehNgu zN%P;v&5>;tdQco36t^ApBmkg+NztM}f@!`5=?_QhObuNC5XpJd$0bav$G=6uSdlQBt!lqRD9_%IxS>T=6$H`c!8TV8+;dg4baLr zhpmHQ`WSth`zmnqLd_cz_wb+^kve4+|)V|&AS(< zwJIz9E?ToqW;?@=Sb5O~?=ByoCPa~}l5>{|rwa$bz!mW6T$rbW_ce5dwYK^izU zj&x>^udwcru!=6*>l|USZ=%Ry=bMAbwodxd!+Wl+DMFTg*MxWE0^iuOeQfk1T`Pgu z*GFHd^a8JZy|%pKWb|D(r(9ubWGR=h8@i!v_{|aSspSI8dAp51CZHpCw+y2`*>Aq< z^c5M)NJfJ$34FSa2F1e_{9EPX>HVTxFxkFkv!AM>KYhua%(hFZ#l;|z29j25tfI7+ z-8q{FtFaB=V(+)5Upoec;!|Ibkk78w@r|Sic)tyrnej67_0Y_4HAEn1^yi0>CcCM_n4L7Ll@iW|2_1awxKO<+=7n%Skq9E8s(B%kY7WEkkH@<;Z69-L?4) zcx(C#ZIIzYdiXp{vO(N$>}nDLeC;+R&=vltB6s>BF9qcSf$po%f8>$_Cc35vdrBL? zQyg6Z&x;~XHoYTU@Q}FpRCZYi2Rk_{5Tct0&ON`Gdk-6rNs-*n5W+#3ab*9yS5PG| z^3b8ljR2W~1S7sbsE?0gCc;)oElmi`im#EQKVuC`|GYS#IB^aXF%OL$O9i3G*Dx@B z0L5UDy3nyjx?|w}<4CI0;{Lpe`@|8RR+q78=H7`aUp-*B-%)#qE|*U*&l4-SJfMW* zwJ3UtR$HSc&Ph|Ah}TBs?+9kNmY-%EKhpbYa$uHcKEHO}z2Zmv*Zo%q0-H0xjla-2 zvfD)5b%FS-$U1ok4AR54*a}x>;3d=B$qi z+u0|ymz{yjViIE|4kiuLVo+@Xp$qS`t2#Dq1W-ybn|s(hc~iR4wh5bQVz5Aw?M&`X zVMUi_*WttZ2eOUg`Z1s{I>y_F)#kodH7HpZg?oPs?Jm|My%k#byF)(gR46U9yN+IV zrv7kN>f`*#CpSG|nfm1L@Ws}9{{7!)&9itS9tI2uM~W0%ac(pEA!Ievbfjhks%AQn z4a+nWR8yfU#C6YrCIk~f5B9TM?yb+zmDb@f7iWvDs%B5{bo zNvX)jJDb}lw(_6Q9=jEL>$3+DW8Mv^5OBHY4z}rj@ARgCvIj3%9@Zy;|kIa6%a9&EEtuG@q z9YW7-un|;xT*FePgva1*qX_0P@r+<&xVxKwWlvQG#}w*tE8R9Z9;(UjGc92u{UDWe zue_RSN}7}0pP^i%X3MI8QGrY$#@%I=!(l)xd#Cz3Q0WeT(ygRH+1;X~DPoVb}n*L4%i zAUaTp;h_6U-k0s|CyaA+Knr3-(gq$s2zBMp?L+3AGZ)}LS1D8fYwvXGJma-@sut8W zU^kM9S3i55GeT?LW;;MjBo(zu?;%B2WqC(B(Hfbt#W zIub(6t~Dc6;XiXM;%!e`)J!TW=1r9tdq2(7hS=ArRLSFk8-E3`3LM)Ri9>BM2e>RQ zk@(aL3>x^Fe({t-13)Yc0NjVeKGU3K9`jrVfoZD%&(?mnuXXTsg?G$VSH}6C&_F1q zbk%nEn@C9 zU*1xH=|3_C+3#kXy?mTLRy&ifxkCYl+OAR4$tf}L4Uz8{@K)CPO))f1FnpWnoLwh^ z{YtCY4}#vAZ?}9#Na07}h7774h&>JWAP~mzm$Se0_zQ2+A~66Eek|KaX->fCc#w(N z&-$T+i7>Qbo7@=%k}U2QX`dkJoaMf=;T&{ZK>U)bWh$3Fq`*-tfyveYnq?K_!zK2# zQT#~>3ALEV%a|r_$*r{JTpS`+CmoQ?6rc1O z&=m!BP+@8>=xN;LbO#Z+GL`c?Lo=}@@CSU7%_~h| z$r7#ZGw(2WgqX}SQLrbVJYgaxIDQ*cTpH^po`MJzSdn2%_z#{SBoX?{Ee zF%&P%l%ez0!Q$SJH8`t=>1U4Y#0p*i@$DpwIS(mm*4SnSuGVRJFCn^` z%Lf=0p-X%+|1BYQJ^rw+3`?r|u)!iz4$vSViC8*-tDvRd)18Bj2>LauLQJP#p3c4O z#DI-85P>7VQ?xx_!e<)*YE%aUrV0#noYBtF+1C40ZMDds+Mn_Dx1fRkSSE0vhs25m zGG&~Fce@hg22Ko48PvJFZ}&RxzM4;e`-o30SVsZO+~CA^M*1=HP_AR41m=?EAiss& z3;4h)OiTmJ_ex=wS>KB(X|a2C8kgek*mq!Q>}%gD29Ux7axVWlm5m*v)myg4jShV5 zE*uCU05+~Vt>rA^kKTQSK7|FE?i7J)ocvB~3>VS1q8jnvBp*$NM@AO+f4GiPeYWcM zTRIIGP6OcT5S~{aa*__sHNa?39#mLFjCx0X=C!I69m|xa*2H0WJPMTX0u3@FsK{2c zcv*HziUiwraV`@cWc&UZ<;@tnWpI#kbNRowsMxO_e+VoRPJpmzOY>`zG3@@MBAeMC zF^U`FEGIgJ07PDe@Qv>WWR~D85wGK(@)Q+#)w`alnw*u_pSM^=HFf#6>xp;oEx3DK z4vZ1|fkJ1@xqoOXwoG|@m7Tu2b!zvo@X zUpoZ<8{-x4|HX16K7uaI8;2PYd)<~28{`HrxOk-cEp1 z_+e+kY4VztZB@TuZ68C8Du`zR|e@*qgUNNcg-KMsXq*O@vRlVi^cj*(B2zubXn^UZI z?bfPzu02!#^S@<~*5b6x?62QnJ^#eKwM{u-b=T}EcG$BH4L24pag4zMl!lD;yVCSE z!Gmq2vjh;*lwTGJfDes&`&~SsTpGrjP$lS4OCS#wpisY}O!bu68&xb%`Q0P(ht+hV z=jQi=yBx80fv7B+hBc!1bvku5t$ZkKyMN`6i133dutLFTJoqnz960>S?o%FwK^Jna zV17i}ICf*NE&g&J`83>qGxo#8w)Lr4AJ)g&0I?|8^QYlU60vz6xUkGGPEYegN^IT1Ic>M<(EBH*Pit^L$r7)ZISoTE*si z%1e#K)1KGUDv|@}wi>lSV}Z2ZiJ7M2mN6 zGgCy44yB#p!2spI!aRupkN^fU|I#m(wTdH))@?K9Orasg%|wvA1b`*mrdqc5Py?7L z7HiX9Whf`W&uOwsbbw-L!pnu5$WqvaSs^z}-dxsxW3gt@iFhbbI>4PSa!eMW0G-|F ziYSaa+9&(_aCbL={ZuvPDFi>j=n+6tJf})|ObqZbb>A}fdPh@ znCSMi_X6@a&Z@@){cX)vtluv?GWXp52QoHcpDA|Qt`h|kaqqrc`MY3_l= zCZyvM?cN=8crT{J`Op`R-vyOVvLG3N+>;TOa$`g}s89tXLZh#A*V<@p!YuKtOZT+1 z-_GQ`4N@bXaV6gF=Fo+iAf49Foum<#R7S- znoQ=%KUfG4*vs87Zc6%A$ofL;Wc~}*U%lo6lyz>7ejZz(A|1#yO|r)jwJl{-mSk0v z>8IPP$I6O93+tLA1CWqS%@O3dt9@hQBp8 z@(tICD(o`)g&F;Zm@`TOCnR0~kFf*>>D2Vhy&pP+5iNw=OKjrN_tVR1;tWgSE)RJ( zQJ3ewb!9~1)-z1Yf46UZ!dfHdS#Ut+@&WD^(8B?eHYLn9(dG8ekTvswwVGlFGugpx z7mjyzXe+*8Dn!Z`MfZN1SgKMZrU($(y0zSmdO<>|CTKcLPt3x-fhH*RQS81eqs;) zYKSsiAJm!Sds98w;dJmB^aVOWhst5p_S!@&vAR58^r-+IaVccZ(wQalGX=W7#wyE7 zsh4-;)yl~;@%Q|^TDBKHz;4z3fSxY_FCN0Y8RZcm za2SX%+28V~P&Pi)$#wJw*9JT!i0MxnXSc;pY1<}|;i!ZHuMvF++giy$8TtVKJkZ!7 zgzoOHU+yp3B7MNz|50^WBI&iV6J4WlSYK*&^o_rl?jCYh`GdIpt%!3YJ3yVG6FSHi z%aw|O?va(Lr=eEhUm~YQ>6aIY+1H<3o?Wc`{9#q}0q45P5zT#{Ijcfoshth8cwsr1 z`FfNBrTI+iApf6Xyk!GUB<;oepd*|Ef*BQl7l57zD&Ysz-vx7PCK zJ2?Okxqm#6#r7i!O*~9$Ydr@`m8=1lO8I>9BWm(c9uouykW(M1NCSvW_dg03Ry|f% zN!C;$l7B&ga`1t+&A^VS7hA?hC$(=i6=I#`{n?KIe7i)iUE;Pi|3{rUww@Xd8>JL>4otn$=qzZXXh{~@5o;Uhkg{LbOe?>GMORM z6?-*oJqG9AzV&B`6#cXK(3$@6nuxZnRH9~;_>EQ`xv$u%&$`b;Zn;)C*vx(fMq<)A&D>zqzAL1c@g*TvJ=S z_Qa2r1&F@4Njdj8(}O55t?8Y#>lF3iCM?nHJg>8Z^V>e-tB*1CRVql84yUK&aho~d zy$orhLTD|Si2;6E|J+B?0qESdm`7-vo_TY@;!6qnRX)5f5=A!YD%X4B533Wd`yp_o zpOreIL2+d#x>y*S2$|DA5y>>sCBV?3yy}Yf0L0A7w_p5uccn27og_IO=k)8H)DkT)G{Qj8s&EbZp!dbV( zzrXzsp1PLT!5?#mr zPW0(Dz5521`5s2DJSZZkOWIk+i)Y2c?q?m9DZcb$RhOL@R3Z-2|RZj*y%VUiH|& zVEuSwN%P-z6&{v^_1=LxgQ+!fq3FWjxcTC>)|20gy-y|RWad;8(F0=ND7{ZRA<#x= zNk*_)HZFhRrTDACUd;LH3olvVUlg(LS(G@#XxI4He?;t>411v8?+(JIfvN|Ol9rwL zIKe8!=yDUi3cjHBwO?cEN$s%zR(@h6^?$Ga9PqrzcK_(wbF5-wFDP-y7%0-Z;cM8V zI2zTGH2noENk0<60TgH?J&G;}z*H!Ji?B06g)iP`X1Sx>GEKdcLE-p?>VV%`s7z4n z9-}&pF6iG9^Dkte?BG!3ITW=9Ta%{?=Q#SbE4dvoS*raTBQ7mR(T-dpGf9|F2-A>+ z#m-Ncp&@xSI`Eq2MXwMPT~#gd?l{F$?i=$7I(d7w%8Z>$*`+0j zy@o?VZM`!RI)#+}#L(c=sUO&pDqb;=8Ca642v*f4iy1H*?|7sm?UL4C z_@^tnsGjYq$kC!WvUn z*_@*RSpT~*7{KL}ai0co-h@_nT}PVkQ@Ku`5^Ro!p}7gG;2W2Ms>;N5hDB~(Djo_B zae9&?g4`B|frNtpXX`B3ntaiW}VxQtCFk8xc_l(j^TF z;y{oPVIU#`>QInWQBg7e^6~-RZ*U*aeIL(pUFUUPzw@i2^qIV9af;LiFkzX!=qM-| zRUI2~UAr*bL?HN0h>?J5%~nLorzd5Wi0;n%PFdz9J&?YC^?0rvoOb3i_{Eo)K?(pI zw2fXp#AKADGI$|xon>uKT)*;rhVhmY%^q3Ak{DG-OZUNlC<+$&9aiUaC>HL3!1=09 zz|(OQ2_3)aiGF<*$}=r}>nk~hZz4d2Q*`q4KyxoL0?4WxP~DQ}>HCWNq3SxSOpm>F z3y$up4~ap4PcAr^>#eT^$f?)2h>fyug=X43+|SD>xp+k<42KkdsxBJ(*9cLNdWdE$ z(p|lESgHGO_mC~X#jml-=d6*}Jg?OAQe12ZN4=Z;p#*%otmcR7m|V|Yd=C|v-aE5F z9G5Uk`=o|C-?@mn!GOe+r_tF<#dgJC9uJ`h5_?vA$z3S(s z?y)z>$1jG=qea+FY8nxJRx+eqb(hv*HUWnW%<0hU?AY&-*dX}d6|Z1ztA{OfyS9wR zebuee!XiZ*Z4x7X00WIZ54Bhs&g%oRx2{hJJ-h(4F~Q!TW2Mw;p=dW!Jgm?7_6jYyM_vsP#)YFcdXx$(2N6x%F2IFV6uC zlvKHL!YP(rx-Tn^`aW9^m$rGGOBR`UMwYAj<7MDe%PXV+W3$u?ma6QUt5D(;%rI$3 zBW~u%;z^>$C+3id+If~r91Mq?vHOV>hz*(MQyrJm(I{7Dd36j?ZZ;CO#H90Ci$P_o z79)bJJT37R9Lh;dNM73dJq`jq5nlt#j(72Y9fl6o^of4_epCds$Z40j4XIaCg6pPzi6v_Q zUs|(~X1H$7smHSw4j`LFb~v|_^SUDbyHvtmEblZn3xebtQbkQMdsH^u624q(zPuE5 zPyBw)s9oiiiniFB=|h8ktGN$0gyepcs$z}5)lVu&ffhYiAIl{$W%V0!`w$tg3jLB8 zM1m|GcG)38Hbt*ApjxLXPJpr>gkPYp;1}*T;^inNN1~!|K2}x0c=McR_Bc=60U$i zKYL)OR=Xg{t{!gR1}@()9;Ju)Q`sQaADY^A`d5@d9;yHFQlC(HN%!YCd@KD~Iubsiu&l&b-Y_z9aaT!wEk!dGS-yGTLX!ctctpaX=@EG)n|h zHITVYE?a8hc1wZF_l>3Uru2rLcXC$Ik0Ca7WmX>oHh1F$$*=P-`uu6 zwA{8|wZ%Vv`=l8Z;F98}Q(vcP_oMx@$eSov&WfkV^NK8SSHSxC)W-=EU7=z*0Rm2^ zKnSh?JGv8(v!}AaK&aI9gf9*064I5jvMcjvpQ+pizMC!iTNIXu4tb(|q5w5Lr=^s%j zwE$MN!1R^YEc5B44uFgVAiMoKcnEGoJ|Fsm9)z$e%`2}Df%PU((KO`=%2So}02^;74;EkSgY&fIzi4gNUtsQ|!4-1$^kSAz`zEc}xo$|nZ;8ddK=C`GM`%(3*PMs$n^JjKkzR|#i+diotrdN1!Ka75c z7CoI5DbYjM4$am5M>i9?G$wQt=xIvf9~Tp%5g616g6L?`)>;98%6@Ah;FXn#M=r68 zNb~^!Pbr*z5#GlpMsgJ3FD&#O7TPGrd$~mHN(l#7&-T}#{;w(n4sF#uR4fkgp6BbU z2s(P+sJ*!)l|%7Mm;J(%djD1iDEk+*-^@9F3S`Y#>eRnf$_$e~R14UemhKQcZ6yi9 z4wzb^m}JK4Va)=K_!}o3vNwA~o5J}1QTgQPST6eXK3*VVe=`%y`_KUyN#yY8)byNZ z;iT|ce#0KZAiuvr=tsXo%5I-gUUEA$WeI_^_gJn%15n+uA-4Vz^9z0AZiq#saNvVD zQ_hzRo_;+xK}%9*)Fn8EWf{epOA%-%h#I0!ZSRScS%~a+HzcB}Zx?d60XTGl9CZ{? zv0BlmpF%Oc2PY(r^DvloDBnOS=26dqB?XS^WGhncYn@@}zzcZADh78g%o}nLR5%_y zRxsxfEHl3ky{A`iY>8$xQ0wLgsH=qcz*gYYr6C}CjFY()i~d$r<)OTP@>#!V4=zjM z`2CFUOmx18=gTMX>Gld!dc@M{Sj%v=#@a*eD9yVlU>#l4QyuPPC4S3J5n|7h)Bche z%FpGBV@u0KMua&_ zJBGz44&4T1#wmAy3J0kH$#H$0x+D%L@vV#)oY*I-7i*pe)coEc_O5|dGOGV}octw6 z!?u=-Qtul#qQrJ+EEah}*$BuHUUX)RV8;jOfy!@cU;3IP0P&-LM`xOsTnVYfJTTa8hNMQHuh;-a8Xe!!Kl$sw^`$IQBT)0vAEH}A~-R;prF3f4Nvm$ zX->NHK+8GVl~`q;IH+aSjEiW%L}vRD`}4;)?9sQ&lly{vhP7NNAq1j_Ym1#F+3<32 zpzrP5MfdECyCtm)wJonDbWfYPmg2$}S{f$Q{re;>u1aD25)-exx|YS=nL}f)n);M# z`;f_1&H0^&!Bsu}mnXDc@`57o7Tp?gzcx(FuD={nThlaZ7*P|LefL)HxVaA%Z*<=+ zi=trFtfgRGoYrluUzn9x+QW6M%6t8i_6 z5k@O>n({Zj@X)<@nqSi;C-gOu@UmlU-ax}4%;aGznLfDu$_|qnShp5cdKee^(6zWZ zK&!v@;Z%9zAttdnBza?Cb~Vl~yMAEVD*H}c>sAnXx4(Hd_&P1Zdd%hW3uCP)1vTq9 zkMua_IWMicI6UowR_)06R&e9Eb=Jes+|JY+^Zt56^3FvXp%fu(RBF$mwBhBX&?ReP zRa|jv`kk)yy5;iZdavl>IG6H~p4EK+RWCzQgl%=8b>2nmdXF5cXH|EQQ(jGGy}8Rn zC(X{9s$LyTgIDBeMpTnu=z;>Kq3PB$wC`PGi(m!w;F6|MV~Y;2$h#r=RpvC4C;G2CvKauCLTPlPCe#N z8TFF|UnBxGmMVy<8xD=>nGhZx2;AG}20v%xGeZ?-!XiH>vj(raKlGMt-uA*BeTuBJ z97Yxqq>>CPUQ25Q0KGfMsSm!-asw|tq{h5>!QFn(l~TX`VIQs~6IMGElffdGp~_W^ z!(d6{V~;>Uwm9>lTDBY^RUZUpaq5X>h#V8C-4tfwD%lCA54?hCxGP^=DQ9vl$JxWJ z8Eqz(Aha8ezG>dA%e{FW_IJitANHFqw>dOHv!w8CF7LajWX%K1ju;sb#k}ZEjnc(1 zx!*sw4=&TI)80N}JXPAIsce3e4Gw-68g@XX%n(`_cO)wSyS+R8O+ z-5aKYVMe46&#hTb`j#DSKSE!m!_f^l0>*$%{9K-6r5nzdbauGiXc;FwXZfah*My`a ze+VS2L+pLNx>A=ZHtp69O^_kJzRHv@qrL=b?D8X**Si>1VIda{er7rH%j`K(<)Kry zEq3wA60SA6n__SIYr^x|2v*ZMVuJrN!NvT6csf87BuV=aj(E6}zWb~nSa5wpoJhPz#1F&%NLZ*Plt>##s?crg2`& z!{>OKzPdJEvx5whYx%fbHzJrr&rNWfgWk;vcqSSycrA_K5lFdt(H{Z=j z@11w+CKjmK9(?W77_DtK-cVbbM%x&^Es(qZpZ`I z%+!EMS8+NKghsB87a{x9QiW)^FNVt=2he3q6*8v*N-;GgynmM z!WGqioEq&4uFXy>-p%XzshE1izDJ#xKeD7Yj5FO5bwVm_->7U4VQNgXre$q$5h^1He;!XhM-i8Kp4y>cL-|C%bW=E|2_$y?j=Jnb+ZIw z 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⪚tQrN_qmAr)4rkc2p$im+t*)x) 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

f%N}+k(nosM=>;LwRs?75v>IoqDTf)%$ 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 BjX(eZ From 90268a4e20c1eb331e16dbd6f809113108628c1b Mon Sep 17 00:00:00 2001 From: flabbet Date: Wed, 12 Aug 2026 19:15:17 +0200 Subject: [PATCH 15/55] Fixed imgui with skia textures bindings --- .../Bridge/Operations/IImageImplementation.cs | 2 + src/Drawie.Backend.Core/NativeTexture.cs | 5 +- .../Surfaces/DrawingSurface.cs | 7 +- .../Surfaces/ImageData/Image.cs | 4 +- .../Drawie.Backend.Skia.csproj | 8 +- .../SkiaImageImplementation.cs | 130 +++++++++++++++++- .../SkiaSurfaceImplementation.cs | 7 +- src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 1 + .../SkiaFramebufferInfo.cs | 11 +- src/Drawie.Backend.Skia/SkiaTextureInfo.cs | 18 +++ .../Core/RenderOptions.cs | 6 + .../Helpers/TextureFramebufferExtensions.cs | 11 +- src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs | 12 +- src/Drawie.RenderApi.OpenGl/OpenGlContext.cs | 5 +- src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs | 3 +- .../Abstraction/Pipeline/PipelineDesc.cs | 1 + .../Abstraction/Pipeline/RasterizerDesc.cs | 8 ++ .../Abstraction/Pipeline/RenderMode.cs | 7 + src/Drawie.Rendering/IGraphicsStore.cs | 1 + src/Drawie.Rendering/RenderingContext.cs | 3 +- src/Drawie.Rendering/Texture.cs | 34 ++++- src/Drawie.Rendering/TextureFramebuffer.cs | 6 + src/Drawie.Windowing.Glfw/GlfwWindow.cs | 2 +- src/Drawie.Windowing.Glfw/Input/GlfwCursor.cs | 31 +++++ .../Input/GlfwPointer.cs | 3 + src/Drawie.Windowing/Input/IPointer.cs | 14 ++ src/Drawie.sln | 7 - src/Drawie.sln.DotSettings.user | 2 + src/Drawie2Sample/Drawie2Sample.csproj | 1 - src/Drawie2Sample/Drawie2SampleApp.cs | 93 +++++++++---- 30 files changed, 376 insertions(+), 67 deletions(-) create mode 100644 src/Drawie.Backend.Skia/SkiaTextureInfo.cs create mode 100644 src/Drawie.Backend.Vertie/Core/RenderOptions.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Pipeline/RenderMode.cs create mode 100644 src/Drawie.Windowing.Glfw/Input/GlfwCursor.cs diff --git a/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs b/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs index 9a4168f..b1a2b24 100644 --- a/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs +++ b/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs @@ -10,6 +10,7 @@ public interface IImageImplementation { public Image Snapshot(DrawingSurface drawingSurface); public Image Snapshot(DrawingSurface drawingSurface, RectI bounds); + public Image? TextureSnapshot(DrawingSurface drawingSurface); public void DisposeImage(Image image); public Image? FromEncodedData(string path); public Image? FromEncodedData(byte[] dataBytes); @@ -30,5 +31,6 @@ public Shader ToShader(IntPtr objectPointer, TileMode tileX, TileMode tileY, Sam public Shader ToRawShader(IntPtr objectPointer); public Shader? ToShader(IntPtr objectPointer, TileMode clamp, TileMode tileMode, Matrix3X3 fillMatrixValue); public uint GetUniqueId(IntPtr objectPointer); + public ulong? GetTextureId(IntPtr objectPointer); } } diff --git a/src/Drawie.Backend.Core/NativeTexture.cs b/src/Drawie.Backend.Core/NativeTexture.cs index b834ecd..0ac1fb0 100644 --- a/src/Drawie.Backend.Core/NativeTexture.cs +++ b/src/Drawie.Backend.Core/NativeTexture.cs @@ -5,10 +5,11 @@ using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Backend.Core; -public class NativeTexture : IDisposable, ICloneable, IPixelsMap, IFramebufferInfo +public class NativeTexture : IDisposable, ICloneable, IPixelsMap, IFramebufferInfo, ITexture { public VecI Size { get; } public DrawingSurface DrawingSurface { get; private set; } @@ -21,6 +22,7 @@ public class NativeTexture : IDisposable, ICloneable, IPixelsMap, IFramebufferIn public ColorSpace ColorSpace { get; } public ImageInfo ImageInfo { get; } + public ulong TextureId => FramebufferId; private DrawingSurface? cpuSurface; private Pixmap? cpuPixmap; @@ -413,4 +415,5 @@ public void SaveToDesktop() public uint FramebufferId => DrawingBackendApi.Current.SurfaceImplementation.GetFramebufferInfo(DrawingSurface.ObjectPointer) ?.FramebufferId ?? throw new Exception("Framebuffer info not available."); + } \ No newline at end of file diff --git a/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs b/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs index 74aa76a..54a0e76 100644 --- a/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs +++ b/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs @@ -2,8 +2,6 @@ using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Numerics; -using Drawie.RenderApi; -using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Backend.Core.Surfaces { @@ -47,6 +45,11 @@ public Image Snapshot() { return DrawingBackendApi.Current.ImageImplementation.Snapshot(this); } + + public Image? TextureSnapshot() + { + return DrawingBackendApi.Current.ImageImplementation.TextureSnapshot(this); + } public Image Snapshot(RectI bounds) { diff --git a/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs b/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs index 24c51c5..4725ea0 100644 --- a/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs +++ b/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs @@ -15,19 +15,19 @@ namespace Drawie.Backend.Core.Surfaces.ImageData /// /// An image always has a non-zero dimensions. If there is a request to create a new image, either directly or via a surface, and either of the requested dimensions are zero, then will be returned. /// - public class Image : NativeObject, ICloneable, IPixelsMap, ITexture + public class Image : NativeObject, ICloneable, IPixelsMap { public override object Native => DrawingBackendApi.Current.ImageImplementation.GetNativeImage(ObjectPointer); public int Width => DrawingBackendApi.Current.ImageImplementation.GetWidth(ObjectPointer); public int Height => DrawingBackendApi.Current.ImageImplementation.GetHeight(ObjectPointer); - public ulong TextureId => DrawingBackendApi.Current.ImageImplementation.GetUniqueId(ObjectPointer); public ImageInfo Info => DrawingBackendApi.Current.ImageImplementation.GetImageInfo(ObjectPointer); public VecI Size => new VecI(Width, Height); public bool IsDisposed => isDisposed; + public ulong TextureId => DrawingBackendApi.Current.ImageImplementation.GetTextureId(ObjectPointer).Value; private bool isDisposed; diff --git a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj index 97f81c3..7243352 100644 --- a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj +++ b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj @@ -5,17 +5,17 @@ enable enable Drawie.Skia - 3.119.2 + 4.151.1 - - + + - + diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs index 84fae0e..b821312 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs @@ -1,9 +1,13 @@ -using Drawie.Backend.Core.Bridge.Operations; +using Drawie.Backend.Core; +using Drawie.Backend.Core.Bridge; +using Drawie.Backend.Core.Bridge.Operations; using Drawie.Backend.Core.Numerics; using Drawie.Backend.Core.Shaders; using Drawie.Backend.Core.Surfaces; using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Numerics; +using Drawie.RenderApi; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.Skia.Encoders; using Drawie.Skia.Extensions; using SkiaSharp; @@ -14,8 +18,9 @@ public class SkiaImageImplementation : SkObjectImplementation, IImageIm { private readonly SkObjectImplementation _imgImplementation; private readonly SkiaPixmapImplementation _pixmapImplementation; - private SkObjectImplementation? _surfaceImplementation; + private SkiaSurfaceImplementation _surfaceImplementation; private SkiaShaderImplementation shaderImpl; + private Dictionary textureInfos = new Dictionary(); private Dictionary nonSkiaEncoders = new Dictionary() { @@ -30,7 +35,7 @@ public SkiaImageImplementation(SkObjectImplementation imgDataImplementat shaderImpl = shaderImplementation; } - public void SetSurfaceImplementation(SkObjectImplementation surfaceImplementation) + public void SetSurfaceImplementation(SkiaSurfaceImplementation surfaceImplementation) { _surfaceImplementation = surfaceImplementation; } @@ -53,6 +58,114 @@ public Image Snapshot(DrawingSurface drawingSurface, RectI bounds) return new Image(snapshot.Handle); } + public Image? TextureSnapshot(DrawingSurface drawingSurface) + { + var surface = _surfaceImplementation![drawingSurface.ObjectPointer]; + + VecI size = new VecI(surface.Canvas.DeviceClipBounds.Width, surface.Canvas.DeviceClipBounds.Height); + + /* + var fbInfo = DrawingBackendApi.Current.SurfaceImplementation.GetFramebufferInfo(drawingSurface.ObjectPointer); + + if (fbInfo is not SkiaFramebufferInfo skiaFramebufferInfo) + { + return null; + } + + SKImage? snapshot = CreateFromFramebuffer(skiaFramebufferInfo, size, SurfaceOrigin.BottomLeft, out var textureInfo); + if (snapshot == null) return null;*/ + + var nativeTexture =_surfaceImplementation.GraphicsDevice.CreateTexture(new TextureDesc() + { + Width = size.X, + Height = size.Y, + Format = TextureFormat.RGBA8_Unorm + }); + + SKImage snapshot = SnapshotToOwnedTexture(surface, (uint)nativeTexture.TextureId, size.X, size.Y, + SurfaceOrigin.BottomLeft, out var textureInfo); + + AddManagedInstance(snapshot); + textureInfos[snapshot.Handle] = textureInfo; + return new Image(snapshot.Handle); + } + + internal SKImage? SnapshotToOwnedTexture( + SKSurface source, + uint textureId, + int width, + int height, + SurfaceOrigin origin, out SkiaTextureInfo info) + { + const uint GL_TEXTURE_2D = 3553; + const uint GL_RGBA8 = 0x8058; + + var textureInfo = new GRGlTextureInfo( + GL_TEXTURE_2D, + textureId, + GL_RGBA8); + + var backendTexture = new GRBackendTexture( + width, + height, + false, + textureInfo); + + var targetSurface = SKSurface.Create( + _surfaceImplementation.GrContext, + backendTexture, + (GRSurfaceOrigin)origin, + SKColorType.Rgba8888); + + info = new SkiaTextureInfo(backendTexture); + + if (targetSurface == null) + return null; + + using var snapshot = source.Snapshot(); + + targetSurface.Canvas.DrawImage(snapshot, 0, 0, SKSamplingOptions.Default); + + return SKImage.FromTexture( + _surfaceImplementation.GrContext, + backendTexture, + (GRSurfaceOrigin)origin, + SKColorType.Rgba8888, + SKAlphaType.Premul); + } + + internal SKImage? CreateFromFramebuffer(SkiaFramebufferInfo skiaFramebufferInfo, VecI size, SurfaceOrigin surfaceOrigin, out ITexture fbInfo) + { + if (skiaFramebufferInfo.VkImageInfo != null) + { + var imageInfo = skiaFramebufferInfo.VkImageInfo.Value; + var backendRenderTarget = new GRBackendTexture(size.X, size.Y, imageInfo); + var surface = SKImage.FromTexture(_surfaceImplementation.GrContext, backendRenderTarget, + (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888, SKAlphaType.Premul); + + fbInfo = new SkiaTextureInfo(backendRenderTarget); + return surface; + } + + if (skiaFramebufferInfo.GlFramebufferInfo != null) + { + uint textureId = skiaFramebufferInfo.GlFramebufferInfo.Value.FramebufferObjectId; + + const uint OpenGlTexture2D = 3553; + const uint RGBA8 = 0x8058; + GRBackendTexture backendRenderTarget = + new GRBackendTexture(size.X, size.Y, false, new GRGlTextureInfo(OpenGlTexture2D, textureId, RGBA8)); + + var surface = SKImage.FromTexture(_surfaceImplementation.GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, + SKColorType.Rgba8888, SKAlphaType.Premul); + + fbInfo = new SkiaTextureInfo(backendRenderTarget); + return surface; + } + + throw new ArgumentException("Unsupported texture type."); + } + public Image? FromEncodedData(byte[] dataBytes) { SKImage img = SKImage.FromEncodedData(dataBytes); @@ -66,6 +179,7 @@ public Image Snapshot(DrawingSurface drawingSurface, RectI bounds) public void DisposeImage(Image image) { UnmanageAndDispose(image.ObjectPointer); + textureInfos.Remove(image.ObjectPointer); } public Image? FromEncodedData(string path) @@ -208,6 +322,16 @@ public uint GetUniqueId(IntPtr objectPointer) return this[objectPointer].UniqueId; } + public ulong? GetTextureId(IntPtr objectPointer) + { + if (textureInfos.TryGetValue(objectPointer, out var info)) + { + return info.TextureId; + } + + return null; + } + public object GetNativeImage(IntPtr objectPointer) { return this[objectPointer]; diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index 3af370b..6a1c694 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -171,7 +171,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int var backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, imageInfo); var surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)); - fbInfo = new SkiaFramebufferInfo(backendRenderTarget); + fbInfo = new SkiaFramebufferInfo(backendRenderTarget, imageInfo); return surface; } @@ -184,13 +184,14 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int _ => throw new ArgumentException("Unsupported texture type.") }; + GRGlFramebufferInfo grGlFramebufferInfo = new GRGlFramebufferInfo(textureId, SKColorType.Rgba8888.ToGlSizedFormat()); GRBackendRenderTarget backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, 1, 0, - new GRGlFramebufferInfo(textureId, SKColorType.Rgba8888.ToGlSizedFormat())); + grGlFramebufferInfo); var surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888); - fbInfo = new SkiaFramebufferInfo(backendRenderTarget); + fbInfo = new SkiaFramebufferInfo(backendRenderTarget, grGlFramebufferInfo); return surface; } diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index 5900a86..01c96d7 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -234,6 +234,7 @@ private void SetupVulkan(IVulkanContext vulkanContext) public void Flush() { SkiaGraphicsContext?.Flush(); + SkiaGraphicsContext?.Submit(); } public void ResetContext() diff --git a/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs b/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs index 62d8522..c406a0d 100644 --- a/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs +++ b/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs @@ -5,11 +5,20 @@ namespace Drawie.Skia; public class SkiaFramebufferInfo : IFramebufferInfo { + public GRVkImageInfo? VkImageInfo { get; } + public GRGlFramebufferInfo? GlFramebufferInfo { get; } private GRBackendRenderTarget target; - public SkiaFramebufferInfo(GRBackendRenderTarget target) + public SkiaFramebufferInfo(GRBackendRenderTarget target, GRVkImageInfo imageInfo) { this.target = target; + VkImageInfo = imageInfo; + } + + public SkiaFramebufferInfo(GRBackendRenderTarget backendRenderTarget, GRGlFramebufferInfo grGlFramebufferInfo) + { + this.target = backendRenderTarget; + GlFramebufferInfo = grGlFramebufferInfo; } public uint FramebufferId => target.GetGlFramebufferInfo().FramebufferObjectId; diff --git a/src/Drawie.Backend.Skia/SkiaTextureInfo.cs b/src/Drawie.Backend.Skia/SkiaTextureInfo.cs new file mode 100644 index 0000000..6f96aff --- /dev/null +++ b/src/Drawie.Backend.Skia/SkiaTextureInfo.cs @@ -0,0 +1,18 @@ +using Drawie.Backend.Core.Surfaces; +using Drawie.RenderApi.Abstraction.Textures; +using SkiaSharp; + +namespace Drawie.Skia; + +public class SkiaTextureInfo : ITexture +{ + public GRBackendTexture Target => target; + private GRBackendTexture target; + + public SkiaTextureInfo(GRBackendTexture target) + { + this.target = target; + } + + public ulong TextureId => target.GetGlTextureInfo().Id; +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/RenderOptions.cs b/src/Drawie.Backend.Vertie/Core/RenderOptions.cs new file mode 100644 index 0000000..eacd8ec --- /dev/null +++ b/src/Drawie.Backend.Vertie/Core/RenderOptions.cs @@ -0,0 +1,6 @@ +namespace Drawie.Backend.Vertie.Core; + +public struct RenderOptions +{ + public RenderMode RenderMode { get; set; } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index fc31c4e..c3df5c3 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -23,15 +23,16 @@ public static class TextureFramebufferExtensions private static ICommandList? cmdList; - public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material material, Camera camera) + public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material material, Camera camera, RenderOptions options = default) { IGraphicsDevice device = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice; fb.Canvas?.Flush(); - DrawMesh(fb, mesh, material, camera, device); + DrawMesh(fb, mesh, material, camera, device, options); } - public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Camera camera, IGraphicsDevice device) + public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Camera camera, IGraphicsDevice device, + RenderOptions options) { var sceneTarget = device.CreateRenderTarget(new TextureDesc() { @@ -50,6 +51,10 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came Enabled = true, DepthCompare = DepthCompareType.Less, }, + Rasterizer = new RasterizerDesc() + { + RenderMode = options.RenderMode + }, ShaderProgram = shader, Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), }); diff --git a/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs b/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs index da0558b..a815382 100644 --- a/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs +++ b/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs @@ -22,7 +22,7 @@ public ImGuiLayer(Action render) { Render = render; } - + public void Initialize(IWindow window) { if (window == null) @@ -37,7 +37,7 @@ public void Initialize(IWindow window) renderApi = openGlRenderApi; this.window = window; - + OnLoaded(); window.SubscribeToRender("ImGui.Update", "Init", OnEarlyRender); window.SubscribeToRender("ImGui.Render", "Render", OnRender); @@ -56,8 +56,10 @@ private void OnEarlyRender(double dt) private void OnLoaded() { - _controller = - new ImGuiController(new GL(new LamdaNativeContext(renderApi.GetGlInterface())), - window.NativeWindow as IView, window.InputController.NativeInputController as IInputContext); + var gl = new GL(new LamdaNativeContext(renderApi.GetGlInterface())); + + _controller = new ImGuiController(gl, + window.NativeWindow as IView, + window.InputController.NativeInputController as IInputContext); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs index 89cf1fd..5140cac 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs @@ -1,4 +1,7 @@ -namespace Drawie.RenderApi.OpenGL; +using Silk.NET.Core.Contexts; +using Silk.NET.OpenGL; + +namespace Drawie.RenderApi.OpenGL; public class OpenGlContext : IOpenGlContext { diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs index 3c0fadb..3248f68 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs @@ -1,4 +1,5 @@ using System.Drawing; +using Drawie.Backend.Vertie.Core; using Drawie.RenderApi.Abstraction.Pipeline; using Silk.NET.OpenGL; @@ -45,7 +46,7 @@ public void Apply() Api.Disable(EnableCap.CullFace); Api.ClearColor(0, 0, 0, 1); Api.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit); - //Api.PolygonMode(TriangleFace.FrontAndBack, PolygonMode.Line); + Api.PolygonMode(TriangleFace.FrontAndBack, Description.Rasterizer.RenderMode == RenderMode.Wireframe ? PolygonMode.Line : PolygonMode.Fill); Description.ShaderProgram?.Use(); } diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs index f0588da..ee03299 100644 --- a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs @@ -8,6 +8,7 @@ public struct PipelineDesc public IShaderProgram? ShaderProgram { get; set; } public DepthDesc Depth { get; set; } public BlendDesc Blend { get; set; } + public RasterizerDesc Rasterizer { get; set; } public RectI Viewport { get; set; } } diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs new file mode 100644 index 0000000..2231e77 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs @@ -0,0 +1,8 @@ +using Drawie.Backend.Vertie.Core; + +namespace Drawie.RenderApi.Abstraction.Pipeline; + +public struct RasterizerDesc +{ + public RenderMode RenderMode { get; set; } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/RenderMode.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/RenderMode.cs new file mode 100644 index 0000000..112d1c5 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/RenderMode.cs @@ -0,0 +1,7 @@ +namespace Drawie.Backend.Vertie.Core; + +public enum RenderMode +{ + Default, + Wireframe +} \ No newline at end of file diff --git a/src/Drawie.Rendering/IGraphicsStore.cs b/src/Drawie.Rendering/IGraphicsStore.cs index c7052d7..06bb871 100644 --- a/src/Drawie.Rendering/IGraphicsStore.cs +++ b/src/Drawie.Rendering/IGraphicsStore.cs @@ -12,6 +12,7 @@ namespace Drawie.Rendering; /// public class GraphicsStore : IDisposable { + public static GraphicsStore Global { get; set; } #if DEBUG public static List AllStores = new List(); #endif diff --git a/src/Drawie.Rendering/RenderingContext.cs b/src/Drawie.Rendering/RenderingContext.cs index 9877bd0..e3c1f64 100644 --- a/src/Drawie.Rendering/RenderingContext.cs +++ b/src/Drawie.Rendering/RenderingContext.cs @@ -1,3 +1,4 @@ +using Drawie.Backend.Core.Bridge; using Drawie.RenderApi; namespace Drawie.Rendering; @@ -39,7 +40,7 @@ public void Dispose() { if (textureFramebuffer.IsOpen) throw new InvalidOperationException("Framebuffer is in use"); } - + IsOpen = false; ownedFramebuffers.Clear(); } diff --git a/src/Drawie.Rendering/Texture.cs b/src/Drawie.Rendering/Texture.cs index d9519cd..3b565c5 100644 --- a/src/Drawie.Rendering/Texture.cs +++ b/src/Drawie.Rendering/Texture.cs @@ -1,17 +1,41 @@ using Drawie.Backend.Core; +using Drawie.Backend.Core.Bridge; +using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.Rendering; ///

/// Readonly texture, can be modified with a Rendering Context /// -public class Texture +public class Texture : ITexture { - internal NativeTexture NativeTexture { get; } + public NativeTexture NativeTexture { get; } public int Width { get; } public int Height { get; } public VecI Size => new VecI(Width, Height); + public ulong TextureId + { + get + { + if(lastSnapshot == null) Snapshot(true); + + return lastSnapshot.TextureId; + } + } + + public Image Image + { + get + { + if(lastSnapshot == null) Snapshot(true); + + return lastSnapshot; + } + } + + private Image? lastSnapshot; internal Texture(NativeTexture native) { @@ -19,4 +43,10 @@ internal Texture(NativeTexture native) Width = native.Size.X; Height = native.Size.Y; } + + public void Snapshot(bool force = false) + { + if(lastSnapshot != null || force) + lastSnapshot = NativeTexture.DrawingSurface.TextureSnapshot(); + } } \ No newline at end of file diff --git a/src/Drawie.Rendering/TextureFramebuffer.cs b/src/Drawie.Rendering/TextureFramebuffer.cs index 367cfbe..e8ca995 100644 --- a/src/Drawie.Rendering/TextureFramebuffer.cs +++ b/src/Drawie.Rendering/TextureFramebuffer.cs @@ -1,3 +1,5 @@ +using Drawie.Backend.Core; +using Drawie.Backend.Core.Bridge; using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.ColorsImpl.Paintables; using Drawie.Backend.Core.Surfaces; @@ -62,7 +64,11 @@ public void Dispose() IsOpen = false; UnderlyingTexture.NativeTexture.DrawingSurface.Flush(); + // TODO: Find a way to synchronize things better + syncSurf.DrawingSurface.Canvas.DrawSurface(UnderlyingTexture.NativeTexture.DrawingSurface, 0, 0); } uint IRenderTarget.FramebufferId => UnderlyingTexture.NativeTexture.FramebufferId; + + private static NativeTexture syncSurf = new NativeTexture(new VecI(1, 1)); } \ No newline at end of file diff --git a/src/Drawie.Windowing.Glfw/GlfwWindow.cs b/src/Drawie.Windowing.Glfw/GlfwWindow.cs index 2fb56ef..07b28c8 100644 --- a/src/Drawie.Windowing.Glfw/GlfwWindow.cs +++ b/src/Drawie.Windowing.Glfw/GlfwWindow.cs @@ -119,7 +119,7 @@ public void Initialize() } store = new GraphicsStore(RenderApi.GraphicsContext); - + GraphicsStore.Global = store; foreach (var layer in layers) { diff --git a/src/Drawie.Windowing.Glfw/Input/GlfwCursor.cs b/src/Drawie.Windowing.Glfw/Input/GlfwCursor.cs new file mode 100644 index 0000000..a711477 --- /dev/null +++ b/src/Drawie.Windowing.Glfw/Input/GlfwCursor.cs @@ -0,0 +1,31 @@ +using Drawie.Windowing.Input; +using Silk.NET.Input; +using ICursor = Drawie.Windowing.Input.ICursor; + +namespace Drawie.Silk.Input; + +public class GlfwCursor : ICursor +{ + public global::Silk.NET.Input.ICursor SilkCursor { get; } + + public GlfwCursor(global::Silk.NET.Input.ICursor silkMouseCursor) + { + SilkCursor = silkMouseCursor; + } + + public CursorState State + { + get => ToCursorState(SilkCursor.CursorMode); + set => SilkCursor.CursorMode = ToCursorMode(value); + } + + private CursorMode ToCursorMode(CursorState value) + { + return (CursorMode)value; + } + + private CursorState ToCursorState(CursorMode silkCursorCursorMode) + { + return (CursorState)silkCursorCursorMode; + } +} \ No newline at end of file diff --git a/src/Drawie.Windowing.Glfw/Input/GlfwPointer.cs b/src/Drawie.Windowing.Glfw/Input/GlfwPointer.cs index 759bf6d..0ca6938 100644 --- a/src/Drawie.Windowing.Glfw/Input/GlfwPointer.cs +++ b/src/Drawie.Windowing.Glfw/Input/GlfwPointer.cs @@ -2,6 +2,7 @@ using Drawie.Numerics; using Drawie.Windowing.Input; using Silk.NET.Input; +using ICursor = Drawie.Windowing.Input.ICursor; namespace Drawie.Silk.Input; @@ -15,6 +16,7 @@ public class GlfwPointer : Drawie.Windowing.Input.IPointer public event PointerDoubleClick? PointerDoubleClicked; public event PointerScroll? PointerScrolled; public VecD Position => new VecD(SilkMouse.Position.X, SilkMouse.Position.Y); + public ICursor Cursor { get; } public GlfwPointer(IMouse silkMouse) { @@ -25,6 +27,7 @@ public GlfwPointer(IMouse silkMouse) silkMouse.Click += OnMouseClick; silkMouse.DoubleClick += OnMouseDoubleClick; silkMouse.Scroll += OnMouseScroll; + Cursor = new GlfwCursor(silkMouse.Cursor); } private void OnMouseDown(IMouse mouse, MouseButton button) diff --git a/src/Drawie.Windowing/Input/IPointer.cs b/src/Drawie.Windowing/Input/IPointer.cs index b0f452e..75664b1 100644 --- a/src/Drawie.Windowing/Input/IPointer.cs +++ b/src/Drawie.Windowing/Input/IPointer.cs @@ -18,10 +18,24 @@ public interface IPointer public event PointerDoubleClick PointerDoubleClicked; public event PointerScroll PointerScrolled; public VecD Position { get; } + ICursor Cursor { get; } public bool IsButtonPressed(PointerButton button); } +public interface ICursor +{ + public CursorState State { get; set; } +} + +public enum CursorState +{ + Normal, + Hidden, + Disabled, + Raw +} + public enum PointerButton { /// diff --git a/src/Drawie.sln b/src/Drawie.sln index 04119fe..e0e05fc 100644 --- a/src/Drawie.sln +++ b/src/Drawie.sln @@ -69,8 +69,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Layers", "Layers", "{8F709A EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.UI.ImGui", "Drawie.Layer.UI.ImGui\Drawie.Layer.UI.ImGui.csproj", "{7CACCC0C-044C-4ACE-B018-518F8D223D4A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.3D.Test", "Drawie.Layer.3D.Test\Drawie.Layer.3D.Test.csproj", "{946CC678-5FDF-4473-9D1E-19CC3058DFAB}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Backend.Vertie", "Drawie.Backend.Vertie\Drawie.Backend.Vertie.csproj", "{154B8B31-8819-4996-B8F7-C6DE0BDC87A7}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShaderPlayground", "ShaderPlayground\ShaderPlayground.csproj", "{EB963B58-ECBA-400D-887E-F7598C7F7894}" @@ -192,10 +190,6 @@ Global {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Release|Any CPU.Build.0 = Release|Any CPU - {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {946CC678-5FDF-4473-9D1E-19CC3058DFAB}.Release|Any CPU.Build.0 = Release|Any CPU {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Debug|Any CPU.Build.0 = Debug|Any CPU {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -227,7 +221,6 @@ Global {2D889347-CF94-4D67-AC4A-742AD1F1201D} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} {A9DB4D66-CD25-40E9-8F72-C5341D6C6564} = {239DB1B4-E66F-444A-87DA-B19775F40974} {7CACCC0C-044C-4ACE-B018-518F8D223D4A} = {8F709A50-C8C2-46FC-8355-A96701FFC359} - {946CC678-5FDF-4473-9D1E-19CC3058DFAB} = {8F709A50-C8C2-46FC-8355-A96701FFC359} {154B8B31-8819-4996-B8F7-C6DE0BDC87A7} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} {EB963B58-ECBA-400D-887E-F7598C7F7894} = {239DB1B4-E66F-444A-87DA-B19775F40974} EndGlobalSection diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 097585b..5146477 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -22,10 +22,12 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/Drawie2Sample/Drawie2Sample.csproj b/src/Drawie2Sample/Drawie2Sample.csproj index 88f2093..6ddd5e0 100644 --- a/src/Drawie2Sample/Drawie2Sample.csproj +++ b/src/Drawie2Sample/Drawie2Sample.csproj @@ -9,7 +9,6 @@ - diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 1341894..98c4094 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -4,69 +4,102 @@ using Drawie.Backend.Core.Bridge; using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Core.Text; using Drawie.Backend.Vertie.Core; using Drawie.Backend.Vertie.Helpers; using Drawie.Backend.Vertie.Rendering; +using Drawie.Layer.UI.ImGui; using Drawie.Numerics; -using Drawie.RenderApi.Abstraction.Textures; -using Drawie.RenderApi.OpenGL; using Drawie.Rendering; using Drawie.Windowing.Input; using DrawiEngine; +using ImGuiNET; using Silk.NET.OpenGL; using IWindow = Drawie.Windowing.IWindow; +using Texture = Drawie.Rendering.Texture; namespace Drawie2Sample; public class Drawie2SampleApp : DrawieApp { private IWindow window; - private Material material; private static Camera camera; private static VecD lastMousePosition; - + private int activeRenderMode = 0; + private bool handleMovement; + + private string[] renderModes = new[] + { + "Default", + "Wireframe", + }; + + private RenderOptions renderOptions = new RenderOptions(); + public override IWindow CreateMainWindow() { window = Engine.WindowingPlatform.CreateWindow("Drawie 2 Sample", new VecI(1920, 1080)); - //window.AddLayer(new ThreeDTest()); - //window.AddLayer(new ImGuiLayer(RenderImGui)); + window.AddLayer(new ImGuiLayer(RenderImGui)); return window; } private void RenderImGui(double dt) { - ImGuiNET.ImGui.ShowDemoWindow(); + ImGui.BeginGroup(); + if (ImGui.Combo("Render Mode", ref activeRenderMode, renderModes, renderModes.Length)) + { + renderOptions.RenderMode = (RenderMode)activeRenderMode; + } + ImGui.EndGroup(); + ImGui.ShowMetricsWindow(); } protected override void OnInitialize() { Material mat = new Material("Basic", [BuiltInShaders.BasicVertexShader, BuiltInShaders.UnlitFragmentShader]); - var surf = new NativeTexture(new VecI(512, 512)); - surf.DrawingSurface.Canvas.DrawRect(0, 0, 512, 512, new Paint(){Color = Colors.Red}); - var img = surf.DrawingSurface.Snapshot(); - - mat.AddTexture(img); + var surf = GraphicsStore.Global.Create(new VecI(512, 512)); + RenderingContext context = new RenderingContext(GraphicsStore.Global.GraphicsContext); + var ctx = context.Open(); + var fb = context.Edit(surf); + fb.DrawRectangle(0, 0, 512, 512, new ColorPaintable(Colors.Red)); + fb.Dispose(); + ctx.Dispose(); + mat.AddTexture(surf); + handleMovement = true; + + window.InputController.PrimaryPointer.Cursor.State = CursorState.Disabled; + window.InputController.PrimaryKeyboard.KeyPressed += (keyboard, key, code) => + { + if (key == Key.Escape) + { + window.InputController.PrimaryPointer.Cursor.State = CursorState.Normal; + handleMovement = false; + } + else if (key == Key.Enter) + { + window.InputController.PrimaryPointer.Cursor.State = CursorState.Disabled; + handleMovement = true; + } + }; + camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); Mesh mesh = new Mesh("Assets/teapot.obj"); RegisterMouse(window.InputController); - - window.Update += d => - { - HandleMovement((float)d, camera, window.InputController.PrimaryKeyboard); - }; - + + window.Update += d => { HandleMovement((float)d, camera, window.InputController.PrimaryKeyboard); }; + window.Render += (targetTexture, deltaTime) => { targetTexture.Clear(); - targetTexture.DrawMesh(mesh, mat, camera); - + targetTexture.DrawMesh(mesh, mat, camera, renderOptions); + using Font defaultFont = Font.CreateDefault(); Paintable color = new ColorPaintable(Colors.White); StringBuilder sb = new StringBuilder(); @@ -77,15 +110,14 @@ protected override void OnInitialize() } RichText rt = new RichText(sb.ToString()) { Fill = true, FillPaintable = color }; - + using Paint p = new Paint() { Paintable = color }; - + rt.Paint(targetTexture.Canvas, new VecD(0, 20), defaultFont, p, null); - }; } - - + + private void RegisterMouse(InputController input) { for (int i = 0; i < input.Pointers.Count; i++) @@ -96,13 +128,15 @@ private void RegisterMouse(InputController input) } } - private static void OnScroll(IPointer pointer, VecD scrollDelta) + private void OnScroll(IPointer pointer, VecD scrollDelta) { + if (!handleMovement) return; camera.Zoom = (float)scrollDelta.Y; } - private static void OnMouseMove(IPointer pointer, VecD position) + private void OnMouseMove(IPointer pointer, VecD position) { + if (!handleMovement) return; float lookSensitivity = 0.1f; if (lastMousePosition == default) { @@ -117,9 +151,10 @@ private static void OnMouseMove(IPointer pointer, VecD position) camera.SetDirection((float)offsetX, (float)offsetY); } } - - private static void HandleMovement(float deltaTime, Camera camera, IKeyboard primaryKeyboard) + + private void HandleMovement(float deltaTime, Camera camera, IKeyboard primaryKeyboard) { + if (!handleMovement) return; float moveSpeed = 5f * (float)deltaTime; if (primaryKeyboard.IsKeyPressed(Key.W)) { From b510c283ccc65a3bd71fbebe3902d71cba56ad46 Mon Sep 17 00:00:00 2001 From: flabbet Date: Fri, 14 Aug 2026 10:12:35 +0200 Subject: [PATCH 16/55] wip webgl --- .../BrowserDrawingEngine.cs | 2 +- .../DrawiEngine.Browser.csproj | 2 +- .../DrawiEngine.Desktop.csproj | 2 +- src/DrawiEngine/DrawiEngine.csproj | 2 +- src/DrawiEngine/DrawieApp.cs | 4 +- src/DrawiEngine/DrawingEngine.cs | 8 +- .../SkiaSurfaceImplementation.cs | 5 + .../Directory.Build.props | 11 + .../Directory.Build.targets | 45 ++++ .../Drawie.Backend.Vertie.csproj | 19 +- .../Helpers/ShaderLoader.cs | 51 +++++ .../Helpers/TextureFramebufferExtensions.cs | 2 +- .../Rendering/BuiltInShaders.cs | 15 +- .../Rendering/CompiledShader.cs | 78 ------- .../Rendering/Material.cs | 4 +- src/Drawie.Backend.Vertie/Rendering/Shader.cs | 57 +++++ .../Rendering/ShaderDefinition.cs | 30 --- src/Drawie.Backend.Vertie/Shaders/Unlit.slang | 3 +- .../BrowserInterop.cs | 4 +- .../BrowserWindow.cs | 16 +- .../BrowserWindowingPlatform.cs | 8 +- .../Drawie.Host.Browser.csproj} | 2 +- .../Input/BrowserCursor.cs | 8 + .../Input/BrowserKeyboard.cs | 4 +- .../Input/BrowserPointer.cs | 21 ++ .../Properties/AssemblyInfo.cs | 0 .../Drawie.Host.Glfw.csproj} | 4 +- .../Extensions/VectorExtensions.cs | 0 .../GlfwHost.cs} | 20 +- .../GlfwVulkanContextInfo.cs | 0 src/Drawie.Host.Glfw/GlfwWindowingPlatform.cs | 37 ++++ .../Input/GlfwCursor.cs | 4 +- .../Input/GlfwKeyboard.cs | 8 +- .../Input/GlfwPointer.cs | 6 +- .../Drawie.Host.csproj} | 0 .../IWindow.cs => Drawie.Host/IHost.cs} | 10 +- src/Drawie.Host/IHostPlatform.cs | 13 ++ src/Drawie.Host/ILayer.cs | 8 + .../Input/IKeyboard.cs | 2 +- .../Input/IPointer.cs | 2 +- .../Input/InputController.cs | 2 +- .../Input/Key.cs | 2 +- .../Input/Modifiers.cs | 2 +- .../RenderOrder.cs | 2 +- src/Drawie.JSInterop/Drawie.JSInterop.csproj | 5 +- src/Drawie.JSInterop/JSRuntime.WebGl.cs | 67 +++++- src/Drawie.JSInterop/drawie.js | 167 +++++++++++++- .../Drawie.Layer.UI.ImGui.csproj | 2 +- src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs | 25 +-- src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs | 4 +- .../OpenGlCommandList.cs | 30 +-- src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 11 +- ...enderApi.cs => OpenGlHostViewRenderApi.cs} | 4 +- src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs | 2 + .../OpenGlRenderApi.cs | 8 +- .../OpenGlRenderTarget.cs | 2 +- src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs | 12 +- .../OpenGlShaderProgram.cs | 3 +- ...enderApi.cs => VulkanHostViewRenderApi.cs} | 8 +- .../VulkanRenderApi.cs | 26 +-- .../Enums/WebGlBindings.cs | 6 + .../Enums/WebGlBufferMask.cs | 3 + .../Enums/WebGlBufferType.cs | 4 +- .../Enums/WebGlBufferUsage.cs | 7 +- src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs | 13 ++ .../Enums/WebGlCommandList.cs | 87 ++++++++ .../Enums/WebGlDataType.cs | 9 + .../Enums/WebGlDepthFunc.cs | 13 ++ .../Enums/WebGlDrawMode.cs | 6 - .../Enums/WebGlPrimitiveType.cs | 12 + .../Enums/WebGlRenderbufferFormat.cs | 6 + .../Enums/WebGlRenderbufferTarget.cs | 6 + .../Enums/WebGlTextureFilter.cs | 1 + .../Enums/WebGlTextureUnit.cs | 7 + src/Drawie.RenderApi.WebGl/WebGlBuffer.cs | 66 ++++++ src/Drawie.RenderApi.WebGl/WebGlContext.cs | 6 +- .../WebGlDepthBuffer.cs | 52 +++++ .../WebGlGraphicsContext.cs | 23 +- .../WebGlGraphicsDevice.cs | 140 ++++++++++++ ...RenderApi.cs => WebGlHostViewRenderApi.cs} | 46 +--- src/Drawie.RenderApi.WebGl/WebGlPipeline.cs | 66 ++++++ src/Drawie.RenderApi.WebGl/WebGlRenderApi.cs | 34 ++- .../WebGlRenderTarget.cs | 66 ++++++ src/Drawie.RenderApi.WebGl/WebGlSampler.cs | 16 ++ .../WebGlShaderProgram.cs | 126 +++++++++++ src/Drawie.RenderApi.WebGl/WebGlTexture.cs | 25 ++- .../WebGlVertexArray.cs | 30 +++ .../Abstraction/Buffers/IBuffer.cs | 2 +- .../CommandRecording/CommandList.cs | 34 +++ .../Abstraction/IGraphicsDevice.cs | 1 - .../Abstraction/INativeObject.cs | 7 - .../Abstraction/Pipeline/PipelineDesc.cs | 2 + .../Abstraction/Shaders/ShaderProgramDesc.cs | 2 + .../Abstraction/Shaders/UniformBlock.cs | 10 +- .../Abstraction/Textures/ISampler.cs | 2 +- src/Drawie.RenderApi/Drawie.RenderApi.csproj | 1 + ...derApi.cs => IBrowserHostViewRenderApi.cs} | 2 +- ...ndowRenderApi.cs => IHostViewRenderApi.cs} | 2 +- ...nderApi.cs => IOpenGlHostViewRenderApi.cs} | 2 +- src/Drawie.RenderApi/IRenderApi.cs | 4 +- ...nderApi.cs => IVulkanHostViewRenderApi.cs} | 2 +- src/Drawie.RenderApi/IVulkanRenderApi.cs | 2 +- .../Compilation/CrossCompiler.cs | 54 +++++ .../Compilation/GlslVersion.cs | 9 + .../Compilation/ShaderCompiler.cs | 188 ++++++++++++++++ .../Compilation/SpvCompiler.cs | 87 ++++++++ .../Compilation/SpvContext.cs | 29 +++ .../Drawie.ShaderCompiler.csproj | 26 +++ src/Drawie.ShaderCompiler/Program.cs | 67 ++++++ .../Drawie.Shaders.Common.csproj | 10 + src/Drawie.Shaders.Common/PropertyLayout.cs | 8 + src/Drawie.Shaders.Common/ShaderReflection.cs | 33 +++ .../ShaderReflectionContext.cs | 10 + .../ShaderType.cs | 2 +- .../GlfwWindowingPlatform.cs | 38 ---- src/Drawie.Windowing/ILayer.cs | 8 - src/Drawie.Windowing/IWindowingPlatform.cs | 13 -- src/Drawie.sln | 24 +- src/Drawie.sln.DotSettings.user | 3 + src/Drawie2Sample/Cub.cs | 59 +++++ src/Drawie2Sample/Drawie2Sample.csproj | 4 +- src/Drawie2Sample/Drawie2SampleApp.cs | 34 +-- .../DrawieSample.Browser.csproj | 8 +- .../wwwroot/scripts/drawie.js | 209 ++++++++++++++---- src/ShaderPlayground/Program.cs | 125 ++++------- src/ShaderPlayground/ShaderPlayground.csproj | 1 + 126 files changed, 2312 insertions(+), 589 deletions(-) create mode 100644 src/Drawie.Backend.Vertie/Directory.Build.props create mode 100644 src/Drawie.Backend.Vertie/Directory.Build.targets create mode 100644 src/Drawie.Backend.Vertie/Helpers/ShaderLoader.cs delete mode 100644 src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs create mode 100644 src/Drawie.Backend.Vertie/Rendering/Shader.cs delete mode 100644 src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs rename src/{Drawie.Windowing.Browser => Drawie.Host.Browser}/BrowserInterop.cs (96%) rename src/{Drawie.Windowing.Browser => Drawie.Host.Browser}/BrowserWindow.cs (91%) rename src/{Drawie.Windowing.Browser => Drawie.Host.Browser}/BrowserWindowingPlatform.cs (76%) rename src/{Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj => Drawie.Host.Browser/Drawie.Host.Browser.csproj} (88%) create mode 100644 src/Drawie.Host.Browser/Input/BrowserCursor.cs rename src/{Drawie.Windowing.Browser => Drawie.Host.Browser}/Input/BrowserKeyboard.cs (95%) create mode 100644 src/Drawie.Host.Browser/Input/BrowserPointer.cs rename src/{Drawie.Windowing.Browser => Drawie.Host.Browser}/Properties/AssemblyInfo.cs (100%) rename src/{Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj => Drawie.Host.Glfw/Drawie.Host.Glfw.csproj} (84%) rename src/{Drawie.Windowing.Glfw => Drawie.Host.Glfw}/Extensions/VectorExtensions.cs (100%) rename src/{Drawie.Windowing.Glfw/GlfwWindow.cs => Drawie.Host.Glfw/GlfwHost.cs} (92%) rename src/{Drawie.Windowing.Glfw => Drawie.Host.Glfw}/GlfwVulkanContextInfo.cs (100%) create mode 100644 src/Drawie.Host.Glfw/GlfwWindowingPlatform.cs rename src/{Drawie.Windowing.Glfw => Drawie.Host.Glfw}/Input/GlfwCursor.cs (89%) rename src/{Drawie.Windowing.Glfw => Drawie.Host.Glfw}/Input/GlfwKeyboard.cs (69%) rename src/{Drawie.Windowing.Glfw => Drawie.Host.Glfw}/Input/GlfwPointer.cs (93%) rename src/{Drawie.Windowing/Drawie.Windowing.csproj => Drawie.Host/Drawie.Host.csproj} (100%) rename src/{Drawie.Windowing/IWindow.cs => Drawie.Host/IHost.cs} (80%) create mode 100644 src/Drawie.Host/IHostPlatform.cs create mode 100644 src/Drawie.Host/ILayer.cs rename src/{Drawie.Windowing => Drawie.Host}/Input/IKeyboard.cs (83%) rename src/{Drawie.Windowing => Drawie.Host}/Input/IPointer.cs (98%) rename src/{Drawie.Windowing => Drawie.Host}/Input/InputController.cs (94%) rename src/{Drawie.Windowing => Drawie.Host}/Input/Key.cs (99%) rename src/{Drawie.Windowing => Drawie.Host}/Input/Modifiers.cs (74%) rename src/{Drawie.Windowing => Drawie.Host}/RenderOrder.cs (88%) rename src/Drawie.RenderApi.OpenGl/{OpenGlWindowRenderApi.cs => OpenGlHostViewRenderApi.cs} (87%) rename src/Drawie.RenderApi.Vulkan/{VulkanWindowRenderApi.cs => VulkanHostViewRenderApi.cs} (99%) create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlBindings.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlDataType.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlDepthFunc.cs delete mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlDrawMode.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlPrimitiveType.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlRenderbufferFormat.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlRenderbufferTarget.cs create mode 100644 src/Drawie.RenderApi.WebGl/Enums/WebGlTextureUnit.cs create mode 100644 src/Drawie.RenderApi.WebGl/WebGlBuffer.cs create mode 100644 src/Drawie.RenderApi.WebGl/WebGlDepthBuffer.cs create mode 100644 src/Drawie.RenderApi.WebGl/WebGlGraphicsDevice.cs rename src/Drawie.RenderApi.WebGl/{WebGlWindowRenderApi.cs => WebGlHostViewRenderApi.cs} (55%) create mode 100644 src/Drawie.RenderApi.WebGl/WebGlPipeline.cs create mode 100644 src/Drawie.RenderApi.WebGl/WebGlRenderTarget.cs create mode 100644 src/Drawie.RenderApi.WebGl/WebGlSampler.cs create mode 100644 src/Drawie.RenderApi.WebGl/WebGlShaderProgram.cs create mode 100644 src/Drawie.RenderApi.WebGl/WebGlVertexArray.cs create mode 100644 src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs delete mode 100644 src/Drawie.RenderApi/Abstraction/INativeObject.cs rename src/Drawie.RenderApi/{IBrowserWindowRenderApi.cs => IBrowserHostViewRenderApi.cs} (52%) rename src/Drawie.RenderApi/{IWindowRenderApi.cs => IHostViewRenderApi.cs} (93%) rename src/Drawie.RenderApi/{IOpenGlWindowRenderApi.cs => IOpenGlHostViewRenderApi.cs} (52%) rename src/Drawie.RenderApi/{IVulkanWindowRenderApi.cs => IVulkanHostViewRenderApi.cs} (54%) create mode 100644 src/Drawie.ShaderCompiler/Compilation/CrossCompiler.cs create mode 100644 src/Drawie.ShaderCompiler/Compilation/GlslVersion.cs create mode 100644 src/Drawie.ShaderCompiler/Compilation/ShaderCompiler.cs create mode 100644 src/Drawie.ShaderCompiler/Compilation/SpvCompiler.cs create mode 100644 src/Drawie.ShaderCompiler/Compilation/SpvContext.cs create mode 100644 src/Drawie.ShaderCompiler/Drawie.ShaderCompiler.csproj create mode 100644 src/Drawie.ShaderCompiler/Program.cs create mode 100644 src/Drawie.Shaders.Common/Drawie.Shaders.Common.csproj create mode 100644 src/Drawie.Shaders.Common/PropertyLayout.cs create mode 100644 src/Drawie.Shaders.Common/ShaderReflection.cs create mode 100644 src/Drawie.Shaders.Common/ShaderReflectionContext.cs rename src/{Drawie.RenderApi/Abstraction/Shaders => Drawie.Shaders.Common}/ShaderType.cs (57%) delete mode 100644 src/Drawie.Windowing.Glfw/GlfwWindowingPlatform.cs delete mode 100644 src/Drawie.Windowing/ILayer.cs delete mode 100644 src/Drawie.Windowing/IWindowingPlatform.cs create mode 100644 src/Drawie2Sample/Cub.cs diff --git a/src/DrawiEngine.Browser/BrowserDrawingEngine.cs b/src/DrawiEngine.Browser/BrowserDrawingEngine.cs index 3b10e54..f559414 100644 --- a/src/DrawiEngine.Browser/BrowserDrawingEngine.cs +++ b/src/DrawiEngine.Browser/BrowserDrawingEngine.cs @@ -1,7 +1,7 @@ using Drawie.JSInterop; using Drawie.RenderApi.WebGl; using Drawie.Skia; -using Drawie.Windowing.Browser; +using Drawie.Host.Browser; namespace DrawiEngine.Browser; diff --git a/src/DrawiEngine.Browser/DrawiEngine.Browser.csproj b/src/DrawiEngine.Browser/DrawiEngine.Browser.csproj index 924ea43..b0f1193 100644 --- a/src/DrawiEngine.Browser/DrawiEngine.Browser.csproj +++ b/src/DrawiEngine.Browser/DrawiEngine.Browser.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj b/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj index 0bc3df7..f81c29c 100644 --- a/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj +++ b/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj @@ -9,7 +9,7 @@ - + diff --git a/src/DrawiEngine/DrawiEngine.csproj b/src/DrawiEngine/DrawiEngine.csproj index d7395b9..fb05b47 100644 --- a/src/DrawiEngine/DrawiEngine.csproj +++ b/src/DrawiEngine/DrawiEngine.csproj @@ -8,6 +8,6 @@ - + diff --git a/src/DrawiEngine/DrawieApp.cs b/src/DrawiEngine/DrawieApp.cs index 0b04922..bd6cf27 100644 --- a/src/DrawiEngine/DrawieApp.cs +++ b/src/DrawiEngine/DrawieApp.cs @@ -1,5 +1,5 @@ using Drawie.Backend.Core.Bridge; -using Drawie.Windowing; +using Drawie.Host; namespace DrawiEngine; @@ -17,7 +17,7 @@ public void Initialize(DrawingEngine engine) Engine = engine; } - public abstract IWindow CreateMainWindow(); + public abstract IHost CreateMainWindow(); public void Run() { diff --git a/src/DrawiEngine/DrawingEngine.cs b/src/DrawiEngine/DrawingEngine.cs index 35a88d0..32480fd 100644 --- a/src/DrawiEngine/DrawingEngine.cs +++ b/src/DrawiEngine/DrawingEngine.cs @@ -1,7 +1,7 @@ using Drawie.Backend.Core; using Drawie.Backend.Core.Bridge; using Drawie.RenderApi; -using Drawie.Windowing; +using Drawie.Host; namespace DrawiEngine; @@ -32,14 +32,14 @@ public void RunWithApp(DrawieApp app) Console.WriteLine($"\t- DrawingBackend: {DrawingBackend}"); app.Initialize(this); - IWindow window = app.CreateMainWindow(); + IHost host = app.CreateMainWindow(); - window.Initialize(); + host.Initialize(); DrawingBackendApi.InitializeBackend(RenderApi); app.Run(); - window.Show(); + host.Show(); } public void Run() diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index 6a1c694..a34ea73 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -137,6 +137,11 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int { return SKSurface.Create(info); } + + if(GraphicsDevice == null) + { + throw new InvalidOperationException("GraphicsDevice is not initialized."); + } var texture = GraphicsDevice.CreateTexture(new TextureDesc() { diff --git a/src/Drawie.Backend.Vertie/Directory.Build.props b/src/Drawie.Backend.Vertie/Directory.Build.props new file mode 100644 index 0000000..e78a491 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Directory.Build.props @@ -0,0 +1,11 @@ + + + $(ProjectDir)Shaders + true + + + + + + + \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Directory.Build.targets b/src/Drawie.Backend.Vertie/Directory.Build.targets new file mode 100644 index 0000000..3ebeb07 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Directory.Build.targets @@ -0,0 +1,45 @@ + + + $(IntermediateOutputPath)CompiledShaders + + + + + + + + + + + + + + + + + + + + + $(AssemblyName).BuiltInShaders.%(CompiledShaderResources.Filename)%(CompiledShaderResources.Extension) + + + + + + \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj index 380551a..8538b65 100644 --- a/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj +++ b/src/Drawie.Backend.Vertie/Drawie.Backend.Vertie.csproj @@ -5,26 +5,21 @@ enable enable Drawie.Backend.Vertie + true - - + + + - - + - + - - - PreserveNewest - - - - + \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Helpers/ShaderLoader.cs b/src/Drawie.Backend.Vertie/Helpers/ShaderLoader.cs new file mode 100644 index 0000000..83669e4 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Helpers/ShaderLoader.cs @@ -0,0 +1,51 @@ +using System.Reflection; +using System.Text.Json; +using System.Text.Json.Serialization; +using System.Text.Json.Serialization.Metadata; +using Drawie.Backend.Shaders.Common; +using Drawie.Backend.Vertie.Rendering; + +namespace Drawie.Backend.Vertie.Helpers; + +public static class ShaderLoader +{ + public static Shader? LoadShader(string name) + { + using var shaderStream = ReadFromAssemblyStream(name + ".shader"); + using var reflectionStream = ReadFromAssemblyStream(name + ".reflection.json"); + + using var memoryStream = new MemoryStream(); + shaderStream.CopyTo(memoryStream); + byte[] shaderBytes = memoryStream.ToArray(); + + using StreamReader reader = new StreamReader(reflectionStream); + string reflectionJson = reader.ReadToEnd(); + + if (string.IsNullOrEmpty(reflectionJson)) return null; + + ShaderReflection? reflection = JsonSerializer.Deserialize(reflectionJson, new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + TypeInfoResolver = new ShaderReflectionContext() + }); + + return new Shader(shaderBytes, reflection); + } + + private static Stream ReadFromAssemblyStream(string name) + { + Stream? stream = null; + try + { + stream = Assembly.GetExecutingAssembly() + .GetManifestResourceStream("Drawie.Backend.Vertie.BuiltInShaders." + name) + ?? throw new InvalidOperationException("Shader not found"); + return stream; + } + catch + { + stream?.Dispose(); + throw; + } + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index c3df5c3..a4261ba 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -61,8 +61,8 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came cmdList ??= device.CreateCommandList(); cmdList.BeginRenderPass(sceneTarget); + cmdList.SetPipeline(pipeline); - if (!mesh.BuffersInitialized) { mesh.GenerateBuffers(device); diff --git a/src/Drawie.Backend.Vertie/Rendering/BuiltInShaders.cs b/src/Drawie.Backend.Vertie/Rendering/BuiltInShaders.cs index e837901..8ebe14e 100644 --- a/src/Drawie.Backend.Vertie/Rendering/BuiltInShaders.cs +++ b/src/Drawie.Backend.Vertie/Rendering/BuiltInShaders.cs @@ -1,4 +1,4 @@ -using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.Backend.Vertie.Helpers; namespace Drawie.Backend.Vertie.Rendering; @@ -6,15 +6,10 @@ public static class BuiltInShaders { static BuiltInShaders() { - var matShader = new ShaderDefinition(File.ReadAllText("Shaders/BasicVertex.slang")); - var compiled = matShader.Compile(); - BasicVertexShader = compiled; - - var fragmentShader = new ShaderDefinition(File.ReadAllText("Shaders/Unlit.slang")); - var compiledFragment = fragmentShader.Compile(); - UnlitFragmentShader = compiledFragment; + BasicVertexShader = ShaderLoader.LoadShader("BasicVertex"); + UnlitFragmentShader = ShaderLoader.LoadShader("Unlit"); } - public static CompiledShader BasicVertexShader { get; private set; } - public static CompiledShader UnlitFragmentShader { get; private set; } + public static Shader BasicVertexShader { get; private set; } + public static Shader UnlitFragmentShader { get; private set; } } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs b/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs deleted file mode 100644 index 944479c..0000000 --- a/src/Drawie.Backend.Vertie/Rendering/CompiledShader.cs +++ /dev/null @@ -1,78 +0,0 @@ -using Drawie.RenderApi.Abstraction.Shaders; -using Slangc.NET; - -namespace Drawie.Backend.Vertie.Rendering; - -public class CompiledShader(byte[] shaderBytes, SlangReflection reflection) -{ - public byte[] ShaderBytes { get; } = shaderBytes; - - public ShaderType ShaderType { get; } = StageToType(reflection.EntryPoints.FirstOrDefault()?.Stage); - public string EntryName { get; } = reflection.EntryPoints.FirstOrDefault()?.Name ?? throw new ArgumentException("Shader entry point not found in the compiled shader."); - - public SlangReflection Reflection { get; } = reflection; - - public IReadOnlyDictionary Properties => properties; - - private Dictionary properties = new Dictionary(); - - public bool HasUniformBlock(string name) - { - return Reflection.Parameters.Any(x => x.Name == name); - } - - public void SetUniformBlock(UniformBlock block) - { - properties[block.Name] = block; - SetBlockLayout(block); - } - - private void SetBlockLayout(UniformBlock block) - { - var elementVarLayout = Reflection.Parameters.FirstOrDefault(x => x.Name == block.Name) - ?.Type.ConstantBuffer?.ElementVarLayout; - - if (elementVarLayout?.Binding == null) - { - throw new ArgumentException($"Uniform block binding '{block.Name}' not found in the compiled shader."); - } - - List propLayouts = GetPropertyLayouts(elementVarLayout); - - block.ShaderLayout = new UniformBlockLayout() - { - Index = (int)elementVarLayout.Binding.Index, - Size = (int)elementVarLayout.Binding.Size, - UniformProperties = propLayouts - }; - } - - private static ShaderType StageToType(SlangStage? stage) - { - if(stage == null) throw new ArgumentException("Shader stage cannot be null."); - - return stage switch - { - SlangStage.Vertex => ShaderType.Vertex, - SlangStage.Fragment => ShaderType.Fragment, - SlangStage.Compute => ShaderType.Compute, - _ => throw new ArgumentException($"Unsupported shader stage: {stage}") - }; - } - - private List GetPropertyLayouts(SlangVar elementVarLayout) - { - var fields = elementVarLayout.Type.Struct?.Fields; - - if (fields == null) return new List(); - - List layouts = new List(); - foreach (var field in fields) - { - if(field.Binding == null) continue; - layouts.Add(new UniformPropertyLayout(){UniformName = field.Name, Offset = (int)field.Binding.Offset, Size = (int)field.Binding.Size}); - } - - return layouts; - } -} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/Material.cs b/src/Drawie.Backend.Vertie/Rendering/Material.cs index 550567f..f7df473 100644 --- a/src/Drawie.Backend.Vertie/Rendering/Material.cs +++ b/src/Drawie.Backend.Vertie/Rendering/Material.cs @@ -9,13 +9,13 @@ namespace Drawie.Backend.Vertie.Rendering; public class Material { public string Name { get; set; } - public CompiledShader[] Shaders { get; set; } + public Shader[] Shaders { get; set; } public Dictionary Properties { get; set; } = new(); public List Textures { get; set; } = new(); private int _textureCount; - public Material(string name, CompiledShader[] shaders) + public Material(string name, Shader[] shaders) { Name = name; Shaders = shaders; diff --git a/src/Drawie.Backend.Vertie/Rendering/Shader.cs b/src/Drawie.Backend.Vertie/Rendering/Shader.cs new file mode 100644 index 0000000..fbd3df7 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Rendering/Shader.cs @@ -0,0 +1,57 @@ +using Drawie.Backend.Shaders.Common; +using Drawie.RenderApi.Abstraction.Shaders; + +namespace Drawie.Backend.Vertie.Rendering; + +public class Shader(byte[] shaderBytes, ShaderReflection reflection) +{ + public byte[] ShaderBytes { get; } = shaderBytes; + + public ShaderType ShaderType { get; } = reflection.EntryPoints.FirstOrDefault()?.Type ?? throw new ArgumentException("Shader type not found in the compiled shader."); + public string EntryName { get; } = reflection.EntryPoints.FirstOrDefault()?.Name ?? throw new ArgumentException("Shader entry point not found in the compiled shader."); + + public ShaderReflection Reflection { get; } = reflection; + + public IReadOnlyDictionary Properties => properties; + + private Dictionary properties = new Dictionary(); + + public bool HasUniformBlock(string name) + { + return Reflection.Parameters.Any(x => x.Name == name); + } + + public void SetUniformBlock(UniformBlock block) + { + properties[block.Name] = block; + SetBlockLayout(block); + } + + private void SetBlockLayout(UniformBlock block) + { + var elementVarLayout = Reflection.Parameters.FirstOrDefault(x => x.Name == block.Name); + + if (elementVarLayout?.Var == null) + { + throw new ArgumentException($"Uniform block binding '{block.Name}' not found in the compiled shader."); + } + + List propLayouts = GetPropertyLayouts(elementVarLayout.Var); + + block.ShaderLayout = new UniformBlockLayout() + { + Index = elementVarLayout.Index, + Size = elementVarLayout.Size, + UniformProperties = propLayouts + }; + } + + private List GetPropertyLayouts(ShaderVar elementVar) + { + var fields = elementVar.Fields; + + if (fields == null) return new List(); + + return fields.ToList(); + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs b/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs deleted file mode 100644 index 060f48e..0000000 --- a/src/Drawie.Backend.Vertie/Rendering/ShaderDefinition.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Numerics; -using Slangc.NET; - -namespace Drawie.Backend.Vertie.Rendering; - -public sealed class ShaderDefinition -{ - public string SourceCode { get; } - private Guid id = Guid.NewGuid(); - - public ShaderDefinition(string slangCode) - { - SourceCode = slangCode; - } - - public CompiledShader Compile() - { - var bytes = SlangCompiler.CompileWithReflection(SourceCode, - [ - "-profile", "glsl_450", - "-matrix-layout-column-major", - "-fvk-use-entrypoint-name", - "-target", "spirv" - ], out var reflection); - - File.WriteAllBytes("shader.spv", bytes); - - return new CompiledShader(bytes, reflection); - } -} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang index 3691d88..841504d 100644 --- a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang +++ b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang @@ -11,5 +11,6 @@ Sampler2D uTexture; [shader("fragment")] float4 PSMain(FragmentInput input) : SV_Target { - return uTexture.Sample(input.fTexCoords); + return float4(1, 0, 0, 1); + //return uTexture.Sample(input.fTexCoords); } \ No newline at end of file diff --git a/src/Drawie.Windowing.Browser/BrowserInterop.cs b/src/Drawie.Host.Browser/BrowserInterop.cs similarity index 96% rename from src/Drawie.Windowing.Browser/BrowserInterop.cs rename to src/Drawie.Host.Browser/BrowserInterop.cs index 349b833..56e813f 100644 --- a/src/Drawie.Windowing.Browser/BrowserInterop.cs +++ b/src/Drawie.Host.Browser/BrowserInterop.cs @@ -1,8 +1,8 @@ using Drawie.Numerics; -using Drawie.Windowing.Input; +using Drawie.Host.Input; using JSRuntime = Drawie.JSInterop.JSRuntime; -namespace Drawie.Windowing.Browser; +namespace Drawie.Host.Browser; public partial class BrowserInterop { diff --git a/src/Drawie.Windowing.Browser/BrowserWindow.cs b/src/Drawie.Host.Browser/BrowserWindow.cs similarity index 91% rename from src/Drawie.Windowing.Browser/BrowserWindow.cs rename to src/Drawie.Host.Browser/BrowserWindow.cs index cfbc83d..c384221 100644 --- a/src/Drawie.Windowing.Browser/BrowserWindow.cs +++ b/src/Drawie.Host.Browser/BrowserWindow.cs @@ -1,16 +1,17 @@ using Drawie.Backend.Core; using Drawie.Backend.Core.Bridge; +using Drawie.Host; +using Drawie.Host.Browser.Input; using Drawie.JSInterop; using Drawie.Numerics; using Drawie.RenderApi; using Drawie.RenderApi.Web.Common; using Drawie.Rendering; -using Drawie.Windowing.Browser.Input; -using Drawie.Windowing.Input; +using Drawie.Host.Input; -namespace Drawie.Windowing.Browser; +namespace Drawie.Host.Browser; -public class BrowserWindow(IWindowRenderApi windowRenderApi) : IWindow +public class BrowserWindow(IHostViewRenderApi hostViewRenderApi) : IHost { public string Name { @@ -25,7 +26,7 @@ public VecI Size public VecI UsableWindowSize => BrowserInterop.GetWindowSize(); - public IWindowRenderApi RenderApi { get; set; } = windowRenderApi; + public IHostViewRenderApi RenderApi { get; set; } = hostViewRenderApi; public InputController InputController { get; private set; } @@ -48,7 +49,7 @@ public bool IsVisible public event Action? Render; public event Action? Resize; - public object NativeWindow => canvas; + public object Native => canvas; public event Action? Loaded; private Texture renderTexture; @@ -67,8 +68,9 @@ public void Initialize() RenderApi.CreateInstance(canvasObject, UsableWindowSize); RenderApi.FramebufferResized += FramebufferResized; - InputController = new InputController(new [] { new BrowserKeyboard() }, [], null); + InputController = new InputController(new [] { new BrowserKeyboard() }, [new BrowserPointer()], null); store = new GraphicsStore(RenderApi.GraphicsContext); + GraphicsStore.Global = store; renderStack.Add(new RenderOrder("Init", _ => { })); renderStack.Add(new RenderOrder("Render", RenderContent)); diff --git a/src/Drawie.Windowing.Browser/BrowserWindowingPlatform.cs b/src/Drawie.Host.Browser/BrowserWindowingPlatform.cs similarity index 76% rename from src/Drawie.Windowing.Browser/BrowserWindowingPlatform.cs rename to src/Drawie.Host.Browser/BrowserWindowingPlatform.cs index dac2969..576cf4b 100644 --- a/src/Drawie.Windowing.Browser/BrowserWindowingPlatform.cs +++ b/src/Drawie.Host.Browser/BrowserWindowingPlatform.cs @@ -1,19 +1,19 @@ using Drawie.Numerics; using Drawie.RenderApi; -namespace Drawie.Windowing.Browser; +namespace Drawie.Host.Browser; public class BrowserWindowingPlatform(IRenderApi renderApi) : IWindowingPlatform { public BrowserWindow Window { get; private set; } public IRenderApi RenderApi { get; } = renderApi; - IReadOnlyCollection IWindowingPlatform.Windows => new IWindow[] { Window }; - public IWindow CreateWindow(string name) + IReadOnlyCollection IWindowingPlatform.Windows => new IHost[] { Window }; + public IHost CreateWindow(string name) { return CreateWindow(name, VecI.Zero); } - public IWindow CreateWindow(string name, VecI size) + public IHost CreateWindow(string name, VecI size) { if (Window != null) { diff --git a/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj b/src/Drawie.Host.Browser/Drawie.Host.Browser.csproj similarity index 88% rename from src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj rename to src/Drawie.Host.Browser/Drawie.Host.Browser.csproj index b0233c8..e96a4fa 100644 --- a/src/Drawie.Windowing.Browser/Drawie.Windowing.Browser.csproj +++ b/src/Drawie.Host.Browser/Drawie.Host.Browser.csproj @@ -10,7 +10,7 @@ - + diff --git a/src/Drawie.Host.Browser/Input/BrowserCursor.cs b/src/Drawie.Host.Browser/Input/BrowserCursor.cs new file mode 100644 index 0000000..8d37a71 --- /dev/null +++ b/src/Drawie.Host.Browser/Input/BrowserCursor.cs @@ -0,0 +1,8 @@ +using Drawie.Host.Input; + +namespace Drawie.Host.Browser.Input; + +public class BrowserCursor : ICursor +{ + public CursorState State { get; set; } +} \ No newline at end of file diff --git a/src/Drawie.Windowing.Browser/Input/BrowserKeyboard.cs b/src/Drawie.Host.Browser/Input/BrowserKeyboard.cs similarity index 95% rename from src/Drawie.Windowing.Browser/Input/BrowserKeyboard.cs rename to src/Drawie.Host.Browser/Input/BrowserKeyboard.cs index 9fdd375..7023c39 100644 --- a/src/Drawie.Windowing.Browser/Input/BrowserKeyboard.cs +++ b/src/Drawie.Host.Browser/Input/BrowserKeyboard.cs @@ -1,7 +1,7 @@ using Drawie.JSInterop; -using Drawie.Windowing.Input; +using Drawie.Host.Input; -namespace Drawie.Windowing.Browser.Input; +namespace Drawie.Host.Browser.Input; public class BrowserKeyboard : IKeyboard { diff --git a/src/Drawie.Host.Browser/Input/BrowserPointer.cs b/src/Drawie.Host.Browser/Input/BrowserPointer.cs new file mode 100644 index 0000000..512953a --- /dev/null +++ b/src/Drawie.Host.Browser/Input/BrowserPointer.cs @@ -0,0 +1,21 @@ +using Drawie.Host.Input; +using Drawie.Numerics; + +namespace Drawie.Host.Browser.Input; + +public class BrowserPointer : IPointer +{ + public event PointerPress? PointerPressed; + public event PointerRelease? PointerReleased; + public event PointerMove? PointerMoved; + public event PointerClick? PointerClicked; + public event PointerDoubleClick? PointerDoubleClicked; + public event PointerScroll? PointerScrolled; + public VecD Position { get; } + public ICursor Cursor { get; } = new BrowserCursor(); + + public bool IsButtonPressed(PointerButton button) + { + return false; + } +} \ No newline at end of file diff --git a/src/Drawie.Windowing.Browser/Properties/AssemblyInfo.cs b/src/Drawie.Host.Browser/Properties/AssemblyInfo.cs similarity index 100% rename from src/Drawie.Windowing.Browser/Properties/AssemblyInfo.cs rename to src/Drawie.Host.Browser/Properties/AssemblyInfo.cs diff --git a/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj b/src/Drawie.Host.Glfw/Drawie.Host.Glfw.csproj similarity index 84% rename from src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj rename to src/Drawie.Host.Glfw/Drawie.Host.Glfw.csproj index 3715ad3..4297cd9 100644 --- a/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj +++ b/src/Drawie.Host.Glfw/Drawie.Host.Glfw.csproj @@ -4,7 +4,7 @@ net10.0 enable enable - Drawie.Silk + Drawie.Host.Glfw true @@ -17,7 +17,7 @@ - + diff --git a/src/Drawie.Windowing.Glfw/Extensions/VectorExtensions.cs b/src/Drawie.Host.Glfw/Extensions/VectorExtensions.cs similarity index 100% rename from src/Drawie.Windowing.Glfw/Extensions/VectorExtensions.cs rename to src/Drawie.Host.Glfw/Extensions/VectorExtensions.cs diff --git a/src/Drawie.Windowing.Glfw/GlfwWindow.cs b/src/Drawie.Host.Glfw/GlfwHost.cs similarity index 92% rename from src/Drawie.Windowing.Glfw/GlfwWindow.cs rename to src/Drawie.Host.Glfw/GlfwHost.cs index 07b28c8..9480382 100644 --- a/src/Drawie.Windowing.Glfw/GlfwWindow.cs +++ b/src/Drawie.Host.Glfw/GlfwHost.cs @@ -7,18 +7,18 @@ using Drawie.Silk.Extensions; using Drawie.Silk.Input; using Drawie.Skia; -using Drawie.Windowing; -using Drawie.Windowing.Input; +using Drawie.Host; +using Drawie.Host.Input; using Silk.NET.Input; using Silk.NET.Maths; using Silk.NET.Windowing; using SkiaSharp; -using IKeyboard = Drawie.Windowing.Input.IKeyboard; +using IKeyboard = Drawie.Host.Input.IKeyboard; using IWindow = Silk.NET.Windowing.IWindow; namespace Drawie.Silk; -public class GlfwWindow : Drawie.Windowing.IWindow +public class GlfwHost : Drawie.Host.IHost { private GraphicsStore store; private IWindow? window; @@ -51,7 +51,7 @@ public bool IsVisible } } - public IWindowRenderApi RenderApi { get; set; } + public IHostViewRenderApi RenderApi { get; set; } public InputController InputController { get; private set; } @@ -61,7 +61,7 @@ public bool ShowOnTop set => window?.TopMost = value; } - public object NativeWindow => window; + public object Native => window; public event Action? Loaded; public event Action Update; @@ -75,13 +75,13 @@ public bool ShowOnTop private List layers = new List(); private List renderStack = new List(); - public GlfwWindow(string name, VecI size, IWindowRenderApi renderApi) + public GlfwHost(string name, VecI size, IHostViewRenderApi renderApi) { window = Window.Create(WindowOptions.Default with { Title = name, Size = size.ToVector2DInt(), - API = renderApi is IVulkanWindowRenderApi ? GraphicsAPI.DefaultVulkan : GraphicsAPI.Default + API = renderApi is IVulkanHostViewRenderApi ? GraphicsAPI.DefaultVulkan : GraphicsAPI.Default }); window.Load += () => Loaded?.Invoke(); RenderApi = renderApi; @@ -99,7 +99,7 @@ public void Initialize() window.Initialize(); InitInput(); - if (RenderApi is IVulkanWindowRenderApi) + if (RenderApi is IVulkanHostViewRenderApi) { if (window.VkSurface == null) { @@ -109,7 +109,7 @@ public void Initialize() GlfwVulkanContextInfo info = new GlfwVulkanContextInfo(window.VkSurface!); RenderApi.CreateInstance(info, window.Size.ToVecI()); } - else if (RenderApi is IOpenGlWindowRenderApi) + else if (RenderApi is IOpenGlHostViewRenderApi) { RenderApi.CreateInstance(window.GLContext, window.Size.ToVecI()); } diff --git a/src/Drawie.Windowing.Glfw/GlfwVulkanContextInfo.cs b/src/Drawie.Host.Glfw/GlfwVulkanContextInfo.cs similarity index 100% rename from src/Drawie.Windowing.Glfw/GlfwVulkanContextInfo.cs rename to src/Drawie.Host.Glfw/GlfwVulkanContextInfo.cs diff --git a/src/Drawie.Host.Glfw/GlfwWindowingPlatform.cs b/src/Drawie.Host.Glfw/GlfwWindowingPlatform.cs new file mode 100644 index 0000000..6c6fcc7 --- /dev/null +++ b/src/Drawie.Host.Glfw/GlfwWindowingPlatform.cs @@ -0,0 +1,37 @@ +using Drawie.Numerics; +using Drawie.RenderApi; +using Drawie.Host; +using Drawie.Host.Input; +using Silk.NET.Input; + +namespace Drawie.Silk; + +public class GlfwWindowingPlatform : IWindowingPlatform +{ + private readonly List _windows = new(); + + public IReadOnlyCollection Windows => _windows; + public IRenderApi RenderApi { get; } + + public GlfwWindowingPlatform(IRenderApi renderApi) + { + RenderApi = renderApi; + } + + public IHost CreateWindow(string name) + { + return CreateWindow(name, VecI.Zero); + } + + public IHost CreateWindow(string name, VecI size) + { + GlfwHost host = new(name, size, RenderApi.CreateWindowRenderApi()); + _windows.Add(host); + return host; + } + + public override string ToString() + { + return "Glfw"; + } +} \ No newline at end of file diff --git a/src/Drawie.Windowing.Glfw/Input/GlfwCursor.cs b/src/Drawie.Host.Glfw/Input/GlfwCursor.cs similarity index 89% rename from src/Drawie.Windowing.Glfw/Input/GlfwCursor.cs rename to src/Drawie.Host.Glfw/Input/GlfwCursor.cs index a711477..d4ef37e 100644 --- a/src/Drawie.Windowing.Glfw/Input/GlfwCursor.cs +++ b/src/Drawie.Host.Glfw/Input/GlfwCursor.cs @@ -1,6 +1,6 @@ -using Drawie.Windowing.Input; +using Drawie.Host.Input; using Silk.NET.Input; -using ICursor = Drawie.Windowing.Input.ICursor; +using ICursor = Drawie.Host.Input.ICursor; namespace Drawie.Silk.Input; diff --git a/src/Drawie.Windowing.Glfw/Input/GlfwKeyboard.cs b/src/Drawie.Host.Glfw/Input/GlfwKeyboard.cs similarity index 69% rename from src/Drawie.Windowing.Glfw/Input/GlfwKeyboard.cs rename to src/Drawie.Host.Glfw/Input/GlfwKeyboard.cs index 568a0b3..629a829 100644 --- a/src/Drawie.Windowing.Glfw/Input/GlfwKeyboard.cs +++ b/src/Drawie.Host.Glfw/Input/GlfwKeyboard.cs @@ -1,11 +1,11 @@ -using Drawie.Windowing.Input; +using Drawie.Host.Input; using Silk.NET.Input; using IKeyboard = Silk.NET.Input.IKeyboard; using Key = Silk.NET.Input.Key; namespace Drawie.Silk.Input; -public class GlfwKeyboard : Drawie.Windowing.Input.IKeyboard +public class GlfwKeyboard : Drawie.Host.Input.IKeyboard { public event KeyPress? KeyPressed; @@ -19,10 +19,10 @@ public GlfwKeyboard(IKeyboard silkKeyboard) private void OnKeyDown(IKeyboard keyboard, Key key, int keyCode) { - KeyPressed?.Invoke(this, (Drawie.Windowing.Input.Key) key, keyCode); + KeyPressed?.Invoke(this, (Drawie.Host.Input.Key) key, keyCode); } - public bool IsKeyPressed(Windowing.Input.Key key) + public bool IsKeyPressed(Host.Input.Key key) { return silkKeyboard.IsKeyPressed((Key)key); } diff --git a/src/Drawie.Windowing.Glfw/Input/GlfwPointer.cs b/src/Drawie.Host.Glfw/Input/GlfwPointer.cs similarity index 93% rename from src/Drawie.Windowing.Glfw/Input/GlfwPointer.cs rename to src/Drawie.Host.Glfw/Input/GlfwPointer.cs index 0ca6938..52d4c33 100644 --- a/src/Drawie.Windowing.Glfw/Input/GlfwPointer.cs +++ b/src/Drawie.Host.Glfw/Input/GlfwPointer.cs @@ -1,12 +1,12 @@ using System.Numerics; using Drawie.Numerics; -using Drawie.Windowing.Input; +using Drawie.Host.Input; using Silk.NET.Input; -using ICursor = Drawie.Windowing.Input.ICursor; +using ICursor = Drawie.Host.Input.ICursor; namespace Drawie.Silk.Input; -public class GlfwPointer : Drawie.Windowing.Input.IPointer +public class GlfwPointer : Drawie.Host.Input.IPointer { public IMouse SilkMouse { get; } public event PointerPress? PointerPressed; diff --git a/src/Drawie.Windowing/Drawie.Windowing.csproj b/src/Drawie.Host/Drawie.Host.csproj similarity index 100% rename from src/Drawie.Windowing/Drawie.Windowing.csproj rename to src/Drawie.Host/Drawie.Host.csproj diff --git a/src/Drawie.Windowing/IWindow.cs b/src/Drawie.Host/IHost.cs similarity index 80% rename from src/Drawie.Windowing/IWindow.cs rename to src/Drawie.Host/IHost.cs index d4b899e..c4ce3f3 100644 --- a/src/Drawie.Windowing/IWindow.cs +++ b/src/Drawie.Host/IHost.cs @@ -1,17 +1,17 @@ using Drawie.Backend.Core; +using Drawie.Host.Input; using Drawie.Numerics; using Drawie.RenderApi; using Drawie.Rendering; -using Drawie.Windowing.Input; -namespace Drawie.Windowing; +namespace Drawie.Host; -public interface IWindow +public interface IHost { public string Name { get; set; } public VecI Size { get; } - public IWindowRenderApi RenderApi { get; set; } + public IHostViewRenderApi RenderApi { get; set; } public InputController InputController { get; } public bool ShowOnTop { get; set; } @@ -26,7 +26,7 @@ public interface IWindow public void Show(); public void Close(); public void AddLayer(ILayer layer); - public object NativeWindow { get; } + public object Native { get; } public event Action Loaded; public void SubscribeToRender(string name, string renderAfter, Action render); } diff --git a/src/Drawie.Host/IHostPlatform.cs b/src/Drawie.Host/IHostPlatform.cs new file mode 100644 index 0000000..5d63573 --- /dev/null +++ b/src/Drawie.Host/IHostPlatform.cs @@ -0,0 +1,13 @@ +using Drawie.Numerics; +using Drawie.RenderApi; +using Drawie.Host.Input; + +namespace Drawie.Host; + +public interface IWindowingPlatform +{ + public IRenderApi RenderApi { get; } + public IReadOnlyCollection Windows { get; } + public IHost CreateWindow(string name); + public IHost CreateWindow(string name, VecI size); +} \ No newline at end of file diff --git a/src/Drawie.Host/ILayer.cs b/src/Drawie.Host/ILayer.cs new file mode 100644 index 0000000..bb5a3b6 --- /dev/null +++ b/src/Drawie.Host/ILayer.cs @@ -0,0 +1,8 @@ +using Drawie.Rendering; + +namespace Drawie.Host; + +public interface ILayer +{ + void Initialize(IHost host); +} \ No newline at end of file diff --git a/src/Drawie.Windowing/Input/IKeyboard.cs b/src/Drawie.Host/Input/IKeyboard.cs similarity index 83% rename from src/Drawie.Windowing/Input/IKeyboard.cs rename to src/Drawie.Host/Input/IKeyboard.cs index 9695dad..42d76a3 100644 --- a/src/Drawie.Windowing/Input/IKeyboard.cs +++ b/src/Drawie.Host/Input/IKeyboard.cs @@ -1,4 +1,4 @@ -namespace Drawie.Windowing.Input; +namespace Drawie.Host.Input; public delegate void KeyPress(IKeyboard keyboard, Key key, int keyCode); public interface IKeyboard diff --git a/src/Drawie.Windowing/Input/IPointer.cs b/src/Drawie.Host/Input/IPointer.cs similarity index 98% rename from src/Drawie.Windowing/Input/IPointer.cs rename to src/Drawie.Host/Input/IPointer.cs index 75664b1..4a5b913 100644 --- a/src/Drawie.Windowing/Input/IPointer.cs +++ b/src/Drawie.Host/Input/IPointer.cs @@ -1,6 +1,6 @@ using Drawie.Numerics; -namespace Drawie.Windowing.Input; +namespace Drawie.Host.Input; public delegate void PointerPress(IPointer pointer, PointerButton button, VecD position); public delegate void PointerRelease(IPointer pointer, PointerButton button, VecD position); diff --git a/src/Drawie.Windowing/Input/InputController.cs b/src/Drawie.Host/Input/InputController.cs similarity index 94% rename from src/Drawie.Windowing/Input/InputController.cs rename to src/Drawie.Host/Input/InputController.cs index 059253e..ec26555 100644 --- a/src/Drawie.Windowing/Input/InputController.cs +++ b/src/Drawie.Host/Input/InputController.cs @@ -1,4 +1,4 @@ -namespace Drawie.Windowing.Input; +namespace Drawie.Host.Input; public class InputController { diff --git a/src/Drawie.Windowing/Input/Key.cs b/src/Drawie.Host/Input/Key.cs similarity index 99% rename from src/Drawie.Windowing/Input/Key.cs rename to src/Drawie.Host/Input/Key.cs index 8a3396e..4479fef 100644 --- a/src/Drawie.Windowing/Input/Key.cs +++ b/src/Drawie.Host/Input/Key.cs @@ -1,4 +1,4 @@ -namespace Drawie.Windowing.Input; +namespace Drawie.Host.Input; // Taken from https://github.com/dotnet/Silk.NET/blob/14ee3f16a1c1b7c5f561c307b956f769c5e89474/src/Input/Silk.NET.Input.Common/Enums/Key.cs // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. diff --git a/src/Drawie.Windowing/Input/Modifiers.cs b/src/Drawie.Host/Input/Modifiers.cs similarity index 74% rename from src/Drawie.Windowing/Input/Modifiers.cs rename to src/Drawie.Host/Input/Modifiers.cs index f2830c8..a77f714 100644 --- a/src/Drawie.Windowing/Input/Modifiers.cs +++ b/src/Drawie.Host/Input/Modifiers.cs @@ -1,4 +1,4 @@ -namespace Drawie.Windowing.Input; +namespace Drawie.Host.Input; [Flags] public enum Modifiers diff --git a/src/Drawie.Windowing/RenderOrder.cs b/src/Drawie.Host/RenderOrder.cs similarity index 88% rename from src/Drawie.Windowing/RenderOrder.cs rename to src/Drawie.Host/RenderOrder.cs index 9523c9b..eac4f12 100644 --- a/src/Drawie.Windowing/RenderOrder.cs +++ b/src/Drawie.Host/RenderOrder.cs @@ -1,4 +1,4 @@ -namespace Drawie.Windowing; +namespace Drawie.Host; public class RenderOrder { diff --git a/src/Drawie.JSInterop/Drawie.JSInterop.csproj b/src/Drawie.JSInterop/Drawie.JSInterop.csproj index 94cb7dc..b38b2f9 100644 --- a/src/Drawie.JSInterop/Drawie.JSInterop.csproj +++ b/src/Drawie.JSInterop/Drawie.JSInterop.csproj @@ -8,7 +8,10 @@ - + + true + PreserveNewest + diff --git a/src/Drawie.JSInterop/JSRuntime.WebGl.cs b/src/Drawie.JSInterop/JSRuntime.WebGl.cs index f0a46a1..4b433ad 100644 --- a/src/Drawie.JSInterop/JSRuntime.WebGl.cs +++ b/src/Drawie.JSInterop/JSRuntime.WebGl.cs @@ -30,7 +30,10 @@ public partial class JSRuntime public static partial void BindBuffer(int handle, int array, int positionBuffer); [JSImport("webgl.bufferData", "drawie.js")] - public static partial void BufferData(int handle, int arrayType, double[] vertices, int usage); + public static partial void BufferData(int handle, int target, int size, int usage); + + [JSImport("webgl.bufferData", "drawie.js")] + public static partial void BufferData(int handle, int arrayType, byte[] data, int usage); [JSImport("webgl.clearColor", "drawie.js")] public static partial void ClearColor(int gl, double r, double g, double b, double a); @@ -93,7 +96,7 @@ public static partial void TexImage2D(int handle, int type, int level, int forma public static partial void Viewport(int gl, int x, int y, int width, int height); [JSImport("webgl.bindFramebuffer", "drawie.js")] - public static partial void BindFramebuffer(int gl, int framebuffer); + public static partial void BindFramebuffer(int gl, int target, int framebuffer); [JSImport("webgl.createFramebuffer", "drawie.js")] public static partial int CreateFramebuffer(int gl); @@ -109,4 +112,64 @@ public static partial void TexImage2D(int handle, int type, int level, int forma [JSImport("webgl.deleteFramebuffer", "drawie.js")] public static partial void DeleteFramebuffer(int gl, int framebuffer); + + [JSImport("webgl.enable", "drawie.js")] + public static partial void Enable(int gl, int cap); + + [JSImport("webgl.disable", "drawie.js")] + public static partial void Disable(int gl, int cap); + + [JSImport("webgl.depthFunc", "drawie.js")] + public static partial void DepthFunc(int gl, int func); + + [JSImport("webgl.clearDepth", "drawie.js")] + public static partial void ClearDepth(int gl, double depth); + + [JSImport("webgl.depthMask", "drawie.js")] + public static partial void DepthMask(int gl, bool value); + + [JSImport("webgl.getParameter", "drawie.js")] + public static partial int GetParameter(int gl, int binding); + + [JSImport("webgl.bindVertexArray", "drawie.js")] + public static partial void BindVertexArray(int gl, int vertexArrayHandle); + + [JSImport("webgl.bindSampler", "drawie.js")] + public static partial void BindSampler(int gl, int slot, int samplerHandle); + + [JSImport("webgl.drawElements", "drawie.js")] + public static partial void DrawElements(int gl, int mode, int count, int type, int offset); + + [JSImport("webgl.blitFramebuffer", "drawie.js")] + public static partial void BlitFramebuffer(int gl, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, + int dstX1, int dstY1, int mask, int filter); + [JSImport("webgl.createSampler", "drawie.js")] + public static partial int CreateSampler(int glHandle); + + [JSImport("webgl.createVertexArray", "drawie.js")] + public static partial int CreateVertexArray(int gl); + + [JSImport("webgl.uniformBlockBinding", "drawie.js")] + public static partial void UniformBlockBinding(int gl, int programHandle, int blockIndex, int bindingPoint); + + [JSImport("webgl.bindBufferBase", "drawie.js")] + public static partial void BindBufferBase(int gl, int target, int bindingPoint, int buffer); + + [JSImport("webgl.bufferSubData", "drawie.js")] + public static partial void BufferSubData(int gl, int target, int offset, byte[] data); + + [JSImport("webgl.createRenderbuffer", "drawie.js")] + public static partial int CreateRenderbuffer(int api); + + [JSImport("webgl.bindRenderbuffer", "drawie.js")] + public static partial void BindRenderbuffer(int gl, int target, int renderbuffer); + + [JSImport("webgl.deleteRenderbuffer", "drawie.js")] + public static partial void DeleteRenderbuffer(int gl, int renderbuffer); + + [JSImport("webgl.renderbufferStorage", "drawie.js")] + public static partial void RenderbufferStorage(int gl, int target, int internalFormat, int width, int height); + + [JSImport("webgl.framebufferRenderbuffer", "drawie.js")] + public static partial void FramebufferRenderbuffer(int gl, int target, int attachment, int renderbufferTarget, int renderbuffer); } diff --git a/src/Drawie.JSInterop/drawie.js b/src/Drawie.JSInterop/drawie.js index 68c9e59..8872e00 100644 --- a/src/Drawie.JSInterop/drawie.js +++ b/src/Drawie.JSInterop/drawie.js @@ -13,9 +13,21 @@ textureHandleIds = 0; textureHandles = {}; + samplerIds = 0; + samplerHandles = {} + + framebufferIds = 0; + framebufferHandles = {} + uniformLocationHandleIds = 0; uniformLocationHandles = {}; + vertexArrayIds = 0; + vertexArrayHandles = {} + + renderbufferIds = 0; + renderbufferHandles = {} + exports = {}; addDrawieImports() { @@ -50,6 +62,40 @@ return null; }, + viewport: (handleId, x, y, width, height) => { + const gl = this.canvasContextHandles[handleId]; + gl.viewport(x, y, width, height); + }, + createFramebuffer: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + const webGlFramebuffer = gl.createFramebuffer(); + this.framebufferIds++; + this.framebufferHandles[this.framebufferIds] = webGlFramebuffer; + return this.framebufferIds; + }, + bindFramebuffer: (handleId, target, framebuffer) => { + const gl = this.canvasContextHandles[handleId]; + const fb = this.framebufferHandles[framebuffer]; + gl.bindFramebuffer(target, fb); + }, + framebufferTexture2D: (glHandle, target, attachment, textarget, texture, level) => { + const gl = this.canvasContextHandles[glHandle]; + const targetTexture = this.textureHandles[texture] + gl.framebufferTexture2D(target, attachment, textarget, targetTexture, level); + }, + checkFramebufferStatus: (glHandle, target) => { + const gl = this.canvasContextHandles[glHandle]; + return gl.checkFramebufferStatus(target); + }, + getError: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + return gl.getError(); + }, + deleteFramebuffer: (glHandle, framebuffer) => { + const gl = this.canvasContextHandles[glHandle]; + gl.deleteFramebuffer(this.framebufferHandles[framebuffer]); + delete this.framebufferHandles[framebuffer]; + }, createProgram: (glHandle) => { const gl = this.canvasContextHandles[glHandle]; @@ -92,9 +138,33 @@ const buffer = this.bufferHandles[bufferId]; gl.bindBuffer(target, buffer); }, - bufferData: (glHandle, target, data, usage) => { + bufferData: (glHandle, target, dataOrSize, usage) => { + const gl = this.canvasContextHandles[glHandle]; + if (typeof dataOrSize === 'number') { + gl.bufferData(target, dataOrSize, usage); + return; + } + + const array = target === 0x8893 ? new Uint16Array(dataOrSize) : new Float32Array(dataOrSize); + gl.bufferData(target, array, usage); + }, + bindBufferBase: (glHandle, target, index, buffer) => { const gl = this.canvasContextHandles[glHandle]; - gl.bufferData(target, new Float32Array(data), usage); + const bufferObj = this.bufferHandles[buffer]; + gl.bindBufferBase(target, index, bufferObj); + }, + bufferSubData: (glHandle, target, dstByteOffset, srcData) => { + const gl = this.canvasContextHandles[glHandle]; + + const data = srcData instanceof Uint8Array + ? srcData + : new Uint8Array(srcData); + + gl.bufferSubData( + target, + dstByteOffset, + data + ); }, clearColor: (glHandle, r, g, b, a) => { const gl = this.canvasContextHandles[glHandle]; @@ -114,7 +184,7 @@ }, useProgram: (glHandle, programId) => { const gl = this.canvasContextHandles[glHandle]; - const program = programHandles[programId]; + const program = this.programHandles[programId]; gl.useProgram(program); }, drawArrays: (glHandle, mode, first, count) => { @@ -126,6 +196,73 @@ const program = this.programHandles[programId]; return gl.getAttribLocation(program, name); }, + enable: (glHandle, cap) => { + const gl = this.canvasContextHandles[glHandle]; + gl.enable(cap); + }, + disable: (glHandle, cap) => { + const gl = this.canvasContextHandles[glHandle]; + gl.disable(cap) + }, + depthFunc: (glHandle, func) => { + const gl = this.canvasContextHandles[glHandle]; + gl.depthFunc(func); + }, + clearDepth: (glHandle, depth) => { + const gl = this.canvasContextHandles[glHandle]; + gl.clearDepth(depth); + }, + depthMask: (glHandle, value) => { + const gl = this.canvasContextHandles[glHandle]; + gl.depthMask(value); + }, + getParameter: (glHandle, param) => { + const gl = this.canvasContextHandles[glHandle]; + const foundParam = gl.getParameter(param); + return foundParam.name; + }, + bindVertexArray: (glHandle, vertexArray) => { + const gl = this.canvasContextHandles[glHandle]; + const vao = this.vertexArrayHandles[vertexArray]; + gl.bindVertexArray(vao); + }, + bindSampler: (glHandle, slot, sampler) => { + const gl = this.canvasContextHandles[glHandle]; + const wglSampler = this.samplerHandles[sampler]; + gl.bindSampler(slot, wglSampler); + }, + uniformBlockBinding: (glHandle, program, blockIndex, bindingPoint) => { + const gl = this.canvasContextHandles[glHandle]; + const wglProgram = this.programHandles[program]; + gl.uniformBlockBinding(wglProgram, blockIndex, bindingPoint); + }, + createRenderbuffer: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + const rb = gl.createRenderbuffer() + this.renderbufferIds++; + this.renderbufferHandles[this.renderbufferIds] = rb; + return this.renderbufferIds; + }, + bindRenderbuffer: (glHandle, target, renderbufferId) => { + const gl = this.canvasContextHandles[glHandle]; + const rb = this.renderbufferHandles[renderbufferId]; + gl.bindRenderbuffer(target, rb); + }, + renderbufferStorage: (glHandle, target, internalFormat, width, height) => { + const gl = this.canvasContextHandles[glHandle]; + gl.renderbufferStorage(target, internalFormat, width, height); + }, + deleteRenderbuffer: (glHandle, renderbufferId) => { + const gl = this.canvasContextHandles[glHandle]; + const rb = this.renderbufferHandles[renderbufferId]; + gl.deleteRenderbuffer(rb); + delete this.renderbufferHandles[renderbufferId]; + }, + framebufferRenderbuffer: (glHandle, target, attachment, renderbufferTarget, renderbuffer) => { + const gl = this.canvasContextHandles[glHandle]; + const rb = this.renderbufferHandles[renderbuffer]; + gl.framebufferRenderbuffer(target, attachment, renderbufferTarget, rb); + }, openSkiaContext: (canvasId) => { const contextAttributes = { alpha: 1, @@ -173,7 +310,7 @@ }, activeTexture: (glHandle, textureUnit) => { const gl = this.canvasContextHandles[glHandle]; - gl.activeTexture(gl.TEXTURE0 + textureUnit); + gl.activeTexture(textureUnit); }, uniform1i: (glHandle, location, value) => { const gl = this.canvasContextHandles[glHandle]; @@ -197,6 +334,28 @@ delete this.textureHandles[textureId]; }, + drawElements: (glHandle, mode, count, type, offset) => { + const gl = this.canvasContextHandles[glHandle]; + gl.drawElements(mode, count, type, offset); + }, + blitFramebuffer: (glHandle, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter) => { + const gl = this.canvasContextHandles[glHandle]; + gl.blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); + }, + createSampler: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + const sampler = gl.createSampler(); + this.samplerIds++; + this.samplerHandles[this.samplerIds] = sampler; + return this.samplerIds; + }, + createVertexArray: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + const vao = gl.createVertexArray(); + this.vertexArrayIds++; + this.vertexArrayHandles[this.vertexArrayIds] = vao; + return this.vertexArrayIds; + } }, window: { innerWidth: () => window.innerWidth, diff --git a/src/Drawie.Layer.UI.ImGui/Drawie.Layer.UI.ImGui.csproj b/src/Drawie.Layer.UI.ImGui/Drawie.Layer.UI.ImGui.csproj index e9b74a9..fc00545 100644 --- a/src/Drawie.Layer.UI.ImGui/Drawie.Layer.UI.ImGui.csproj +++ b/src/Drawie.Layer.UI.ImGui/Drawie.Layer.UI.ImGui.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs b/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs index a815382..9c06422 100644 --- a/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs +++ b/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs @@ -1,20 +1,19 @@ using Drawie.RenderApi; using Drawie.Rendering; -using Drawie.Windowing; +using Drawie.Host; using Silk.NET.Core.Contexts; using Silk.NET.Input; using Silk.NET.OpenGL; using Silk.NET.OpenGL.Extensions.ImGui; using Silk.NET.Windowing; -using IWindow = Drawie.Windowing.IWindow; namespace Drawie.Layer.UI.ImGui; public class ImGuiLayer : ILayer { public Action Render { get; set; } - private IWindow window; - private IOpenGlWindowRenderApi renderApi; + private IHost _host; + private IOpenGlHostViewRenderApi renderApi; private ImGuiController _controller; @@ -23,24 +22,24 @@ public ImGuiLayer(Action render) Render = render; } - public void Initialize(IWindow window) + public void Initialize(IHost host) { - if (window == null) + if (host == null) { - throw new ArgumentNullException(nameof(window)); + throw new ArgumentNullException(nameof(host)); } - if (window.RenderApi is not IOpenGlWindowRenderApi openGlRenderApi) + if (host.RenderApi is not IOpenGlHostViewRenderApi openGlRenderApi) { throw new InvalidOperationException("ImGui only supports OpenGL render APIs."); } renderApi = openGlRenderApi; - this.window = window; + this._host = host; OnLoaded(); - window.SubscribeToRender("ImGui.Update", "Init", OnEarlyRender); - window.SubscribeToRender("ImGui.Render", "Render", OnRender); + host.SubscribeToRender("ImGui.Update", "Init", OnEarlyRender); + host.SubscribeToRender("ImGui.Render", "Render", OnRender); } private void OnRender(double dt) @@ -59,7 +58,7 @@ private void OnLoaded() var gl = new GL(new LamdaNativeContext(renderApi.GetGlInterface())); _controller = new ImGuiController(gl, - window.NativeWindow as IView, - window.InputController.NativeInputController as IInputContext); + _host.Native as IView, + _host.InputController.NativeInputController as IInputContext); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs b/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs index ccdc94f..dbc7e04 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs @@ -7,7 +7,6 @@ namespace Drawie.RenderApi.OpenGL; public class OpenGlBuffer : IBuffer where TData : unmanaged { - public int Handle { get; } public uint NativeHandle => openglHandle; public BufferUsage Usage { get; } public uint Size { get; } @@ -16,9 +15,8 @@ public class OpenGlBuffer : IBuffer where TData : unmanaged private GL api; - public OpenGlBuffer(GL api, int handle, BufferUsage usage, TData[]? data = null) + public OpenGlBuffer(GL api, BufferUsage usage, TData[]? data = null) { - Handle = handle; Usage = usage; this.api = api; diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index d2523c3..b67d0f9 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -8,22 +8,21 @@ namespace Drawie.RenderApi.OpenGL; -public class OpenGlCommandList(GL api) : ICommandList +public class OpenGlCommandList(GL api) : CommandList { public GL Api { get; } = api; - private List instructions = new List(); private IRenderTarget source; private uint originalFb; private int lastBoundTextureSlot = 0; - public void BeginRenderPass(IRenderTarget fb) + public override void BeginRenderPass(IRenderTarget fb) { source = fb; lastBoundTextureSlot = 0; - instructions?.Clear(); + ClearInstructions(); RecordInstruction(() => { originalFb = (uint)Api.GetInteger(GLEnum.FramebufferBinding); @@ -31,26 +30,26 @@ public void BeginRenderPass(IRenderTarget fb) }); } - public void SetPipeline(IPipeline pipeline) + public override void SetPipeline(IPipeline pipeline) { RecordInstruction(pipeline.Apply); } - public void SetBuffers(IBufferGroup bufferGroup) + public override void SetBuffers(IBufferGroup bufferGroup) { RecordInstruction(() => { Api.BindVertexArray(bufferGroup.Handle); }); } - public void BindTexture(ITexture texture, ISampler sampler) + public override void BindTexture(ITexture texture, ISampler sampler) { if (sampler is not OpenGlSampler openGlSampler) throw new ArgumentException("Cannot bind non opengl samplers"); Api.ActiveTexture(TextureUnit.Texture0 + lastBoundTextureSlot); Api.BindTexture(TextureTarget.Texture2D, (uint)texture.TextureId); - Api.BindSampler((uint)lastBoundTextureSlot, openGlSampler.SamplerId); + Api.BindSampler((uint)lastBoundTextureSlot, openGlSampler.Handle); lastBoundTextureSlot++; } - public unsafe void DrawIndexed(int indexCount) + public override unsafe void DrawIndexed(int indexCount) { RecordInstruction(() => { @@ -58,7 +57,7 @@ public unsafe void DrawIndexed(int indexCount) }); } - public RecordedRenderPass EndRenderPass(IRenderTarget blitTo) + public override RecordedRenderPass EndRenderPass(IRenderTarget blitTo) { RecordInstruction(() => { @@ -71,17 +70,12 @@ public RecordedRenderPass EndRenderPass(IRenderTarget blitTo) BlitFramebufferFilter.Nearest); Api.BindFramebuffer(FramebufferTarget.Framebuffer, originalFb); }); - return new RecordedRenderPass(instructions.ToArray()); + return ToRenderPass(); } - public RecordedRenderPass EndRenderPass() + public override RecordedRenderPass EndRenderPass() { RecordInstruction(() => Api.BindFramebuffer(FramebufferTarget.Framebuffer, originalFb)); - return new RecordedRenderPass(instructions.ToArray()); - } - - private void RecordInstruction(Action instruction) - { - instructions.Add(instruction); + return ToRenderPass(); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index c9b5266..41e32b8 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -8,7 +8,7 @@ using Drawie.RenderApi.Abstraction.Shaders; using Drawie.RenderApi.Abstraction.Textures; using Silk.NET.OpenGL; -using ShaderType = Drawie.RenderApi.Abstraction.Shaders.ShaderType; +using ShaderType = Drawie.Backend.Shaders.Common.ShaderType; namespace Drawie.RenderApi.OpenGL; @@ -22,11 +22,10 @@ public OpenGlDevice(GL api) Api = api; } - public Dictionary ManagedObjects { get; } = new Dictionary(); public IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged { - return new OpenGlBuffer(Api, GetNextHandle(), usage, data); + return new OpenGlBuffer(Api, usage, data); } public ITexture CreateTexture(TextureDesc desc) @@ -135,10 +134,4 @@ private Silk.NET.OpenGL.ShaderType ToOpenGlShaderType(ShaderType shaderType) throw new ArgumentOutOfRangeException(nameof(shaderType), shaderType, null); } } - - private int GetNextHandle() - { - handleCounter++; - return handleCounter; - } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs b/src/Drawie.RenderApi.OpenGl/OpenGlHostViewRenderApi.cs similarity index 87% rename from src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs rename to src/Drawie.RenderApi.OpenGl/OpenGlHostViewRenderApi.cs index ac202f4..78e13db 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlHostViewRenderApi.cs @@ -5,12 +5,12 @@ namespace Drawie.RenderApi.OpenGL; -public class OpenGlWindowRenderApi : IOpenGlWindowRenderApi +public class OpenGlHostViewRenderApi : IOpenGlHostViewRenderApi { public event Action? FramebufferResized; public ITexture RenderTexture => texture; - Func IOpenGlWindowRenderApi.GetGlInterface() + Func IOpenGlHostViewRenderApi.GetGlInterface() { return name => Context.GetProcAddress(name); } diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs index 3248f68..a859a8e 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs @@ -61,6 +61,8 @@ private DepthFunction ToOpenGlDesc(DepthCompareType depthDepthCompare) DepthCompareType.Greater => DepthFunction.Greater, DepthCompareType.GreaterEqual => DepthFunction.Gequal, DepthCompareType.Always => DepthFunction.Always, + DepthCompareType.Never => DepthFunction.Never, + DepthCompareType.NotEqual => DepthFunction.Notequal, _ => throw new ArgumentOutOfRangeException(nameof(depthDepthCompare), depthDepthCompare, null) }; } diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs index cfb69b0..e743d8c 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs @@ -6,9 +6,9 @@ namespace Drawie.RenderApi.OpenGL; public class OpenGlRenderApi : IOpenGlRenderApi { - private List windowRenderApis = new List(); + private List windowRenderApis = new List(); - public IReadOnlyCollection WindowRenderApis => windowRenderApis; + public IReadOnlyCollection WindowRenderApis => windowRenderApis; public IGraphicsDevice GraphicsDevice { get; private set; } public IOpenGlContext OpenGlContext @@ -38,9 +38,9 @@ public OpenGlRenderApi(IOpenGlContext context) CreateGraphicsDevice(context); } - public IWindowRenderApi CreateWindowRenderApi() + public IHostViewRenderApi CreateWindowRenderApi() { - OpenGlWindowRenderApi renderApi = new OpenGlWindowRenderApi(); + OpenGlHostViewRenderApi renderApi = new OpenGlHostViewRenderApi(); windowRenderApis.Add(renderApi); if (GraphicsDevice == null) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs index 4125f3a..3e89eda 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs @@ -5,7 +5,7 @@ namespace Drawie.RenderApi.OpenGL; -public sealed unsafe class OpenGlRenderTarget : IDisposable, IRenderTarget +public sealed class OpenGlRenderTarget : IDisposable, IRenderTarget { public OpenGlTexture Color { get; } public OpenGlDepthBuffer? Depth { get; } diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs b/src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs index e407a96..c92991d 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlSampler.cs @@ -5,28 +5,28 @@ namespace Drawie.RenderApi.OpenGL; public class OpenGlSampler : ISampler { - public uint SamplerId { get; } + public uint Handle { get; } public OpenGlSampler(GL api) { - SamplerId = api.CreateSampler(); + Handle = api.CreateSampler(); api.SamplerParameter( - SamplerId, + Handle, SamplerParameterI.MinFilter, (int)TextureMinFilter.Linear); api.SamplerParameter( - SamplerId, + Handle, SamplerParameterI.MagFilter, (int)TextureMagFilter.Linear); api.SamplerParameter( - SamplerId, + Handle, SamplerParameterI.WrapS, (int)TextureWrapMode.Repeat); api.SamplerParameter( - SamplerId, + Handle, SamplerParameterI.WrapT, (int)TextureWrapMode.Repeat); } diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs b/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs index 10220a7..7751bfa 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlShaderProgram.cs @@ -1,4 +1,5 @@ using System.Runtime.InteropServices; +using Drawie.Backend.Shaders.Common; using Drawie.RenderApi.Abstraction.Shaders; using Silk.NET.OpenGL; @@ -81,7 +82,7 @@ public unsafe void UpdateUniforms(List uniformBlocks) private unsafe void UploadProperty( object value, - UniformPropertyLayout layout) + PropertyLayout layout) { int size = layout.Size; diff --git a/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs similarity index 99% rename from src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs rename to src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs index 3b9d961..0080a13 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanWindowRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs @@ -16,7 +16,7 @@ namespace Drawie.RenderApi.Vulkan; -public class VulkanWindowRenderApi : IVulkanWindowRenderApi +public class VulkanHostViewRenderApi : IVulkanHostViewRenderApi { private const int MAX_FRAMES_IN_FLIGHT = 2; @@ -55,13 +55,13 @@ public class VulkanWindowRenderApi : IVulkanWindowRenderApi private Fence[]? imagesInFlight; private int currentFrame = 0; public event Action? FramebufferResized; - ITexture IWindowRenderApi.RenderTexture => texture; + ITexture IHostViewRenderApi.RenderTexture => texture; public VulkanWindowContext Context => context; - IVulkanContext IVulkanWindowRenderApi.Context => context; + IVulkanContext IVulkanHostViewRenderApi.Context => context; - public VulkanWindowRenderApi(VulkanWindowContext context) + public VulkanHostViewRenderApi(VulkanWindowContext context) { this.context = context; } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs index 8b9f66e..fecf961 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs @@ -5,13 +5,13 @@ namespace Drawie.RenderApi.Vulkan; public class VulkanRenderApi : IVulkanRenderApi { - private List windowRenderApis = new List(); - public IReadOnlyCollection WindowRenderApis => windowRenderApis; + private List windowRenderApis = new List(); + public IReadOnlyCollection WindowRenderApis => windowRenderApis; public IGraphicsDevice GraphicsDevice { get; private set; } public IVulkanContext VulkanContext { get; private set; } - IReadOnlyCollection IVulkanRenderApi.WindowRenderApis => - windowRenderApis.Cast().ToList(); + IReadOnlyCollection IVulkanRenderApi.WindowRenderApis => + windowRenderApis.Cast().ToList(); public VulkanRenderApi() { @@ -22,25 +22,25 @@ public VulkanRenderApi(IVulkanContext vulkanContext) VulkanContext = vulkanContext; } - public IWindowRenderApi CreateWindowRenderApi() + public IHostViewRenderApi CreateWindowRenderApi() { - VulkanWindowRenderApi windowRenderApi; + VulkanHostViewRenderApi hostViewRenderApi; if (windowRenderApis.Count == 0) { var context = new VulkanWindowContext(); VulkanContext = context; - windowRenderApi = new VulkanWindowRenderApi(context); - windowRenderApis.Add(windowRenderApi); - return windowRenderApi; + hostViewRenderApi = new VulkanHostViewRenderApi(context); + windowRenderApis.Add(hostViewRenderApi); + return hostViewRenderApi; } - var existingWindowRenderApi = windowRenderApis.First() as VulkanWindowRenderApi; + var existingWindowRenderApi = windowRenderApis.First() as VulkanHostViewRenderApi; - windowRenderApi = new VulkanWindowRenderApi(existingWindowRenderApi.Context); + hostViewRenderApi = new VulkanHostViewRenderApi(existingWindowRenderApi.Context); - windowRenderApis.Add(windowRenderApi); - return windowRenderApi; + windowRenderApis.Add(hostViewRenderApi); + return hostViewRenderApi; } private void CreateGraphicsDevice(IVulkanContext context) diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlBindings.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlBindings.cs new file mode 100644 index 0000000..0bb8106 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlBindings.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlBindings +{ + FramebufferBinding = 0x8CA6 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferMask.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferMask.cs index c03766c..90c1c86 100644 --- a/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferMask.cs +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferMask.cs @@ -1,6 +1,9 @@ namespace Drawie.RenderApi.WebGl; +[Flags] public enum WebGlBufferMask { ColorBufferBit = 0x00004000, + DepthBufferBit = 0x00000100, + StencilBufferBit = 0x00000400 } diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferType.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferType.cs index 9c280c3..62bb795 100644 --- a/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferType.cs +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferType.cs @@ -1,6 +1,8 @@ -namespace Drawie.RenderApi.WebGl; +namespace Drawie.RenderApi.WebGl.Enums; public enum WebGlBufferType { Array = 0x8892, + ElementArray = 0x8893, + Uniform = 0x8A11 } diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferUsage.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferUsage.cs index ccd8f69..843691a 100644 --- a/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferUsage.cs +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlBufferUsage.cs @@ -1,6 +1,7 @@ -namespace Drawie.RenderApi.WebGl; +namespace Drawie.RenderApi.WebGl.Enums; internal enum WebGlBufferUsage { - StaticDraw = 0x88E4 -} + StaticDraw = 0x88E4, + DynamicDraw = 0x88E8 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs new file mode 100644 index 0000000..12df03f --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs @@ -0,0 +1,13 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlCap +{ + Blend = 0x0BE2, + DepthTest = 0x0B71, + Dither = 0x0BD0, + PolygonOffsetFill = 0x8037, + SampleAlphaToCoverage = 0x809E, + SampleCoverage = 0x80A0, + ScissorTest = 0x0C11, + StencilTest = 0x0B90 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs new file mode 100644 index 0000000..cefa6d5 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs @@ -0,0 +1,87 @@ +using Drawie.JSInterop; +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.CommandRecording; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Textures; + +namespace Drawie.RenderApi.WebGl.Enums; + +public class WebGlCommandList : CommandList +{ + public int Gl { get; } + private IRenderTarget source; + + private int originalFb; + + private int lastBoundTextureSlot = 0; + + public WebGlCommandList(int gl) + { + Gl = gl; + } + + public override void BeginRenderPass(IRenderTarget fb) + { + source = fb; + lastBoundTextureSlot = 0; + ClearInstructions(); + RecordInstruction(() => + { + originalFb = JSRuntime.GetParameter(Gl, (int)WebGlBindings.FramebufferBinding); + JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.Framebuffer, (int)fb.FramebufferId); + }); + } + + public override void SetPipeline(IPipeline pipeline) + { + RecordInstruction(pipeline.Apply); + } + + public override void SetBuffers(IBufferGroup bufferGroup) + { + RecordInstruction(() => { JSRuntime.BindVertexArray(Gl, (int)bufferGroup.Handle); }); + } + + public override void BindTexture(ITexture texture, ISampler sampler) + { + RecordInstruction(() => + { + JSRuntime.ActiveTexture(Gl, (int)WebGlTextureUnit.Texture0 + lastBoundTextureSlot); + JSRuntime.BindTexture(Gl, (int)WebGlTextureType.Texture2D, (int)texture.TextureId); + JSRuntime.BindSampler(Gl, lastBoundTextureSlot, (int)sampler.Handle); + lastBoundTextureSlot++; + }); + } + + public override void DrawIndexed(int indexCount) + { + RecordInstruction(() => + { + JSRuntime.DrawElements(Gl, (int)WebGlPrimitiveType.Triangles, indexCount, + (int)WebGlDataType.UnsignedInt, 0); + }); + } + + public override RecordedRenderPass EndRenderPass(IRenderTarget blitTo) + { + RecordInstruction(() => + { + JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.ReadFramebuffer, (int)source.FramebufferId); + JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.DrawFramebuffer, (int)blitTo.FramebufferId); + JSRuntime.BlitFramebuffer(Gl, + 0, 0, source.Size.X, source.Size.Y, + 0, 0, blitTo.Size.X, blitTo.Size.Y, + (int)WebGlBufferMask.ColorBufferBit, + (int)WebGlTextureFilter.Nearest); + JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.Framebuffer, originalFb); + }); + return ToRenderPass(); + } + + public override RecordedRenderPass EndRenderPass() + { + RecordInstruction(() => JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.Framebuffer, originalFb)); + return ToRenderPass(); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlDataType.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlDataType.cs new file mode 100644 index 0000000..a2d280b --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlDataType.cs @@ -0,0 +1,9 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlDataType +{ + UnsignedByte = 0x1401, + UnsignedShort = 0x1403, + UnsignedInt = 0x1405, + Float = 0x1406 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlDepthFunc.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlDepthFunc.cs new file mode 100644 index 0000000..038d83c --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlDepthFunc.cs @@ -0,0 +1,13 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlDepthFunc +{ + Never = 0x0200, + Less = 0x0201, + Equal = 0x0202, + LEqual = 0x0203, + Greater = 0x0204, + NotEqual = 0x0205, + GEqual = 0x0206, + Always = 0x0207 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlDrawMode.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlDrawMode.cs deleted file mode 100644 index ed5ba88..0000000 --- a/src/Drawie.RenderApi.WebGl/Enums/WebGlDrawMode.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace Drawie.RenderApi.WebGl; - -public enum WebGlDrawMode -{ - TriangleStrip = 0x0005, -} diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlPrimitiveType.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlPrimitiveType.cs new file mode 100644 index 0000000..ba88c1e --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlPrimitiveType.cs @@ -0,0 +1,12 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public class WebGlPrimitiveType +{ + public const int Points = 0x0000; + public const int Lines = 0x0001; + public const int LineLoop = 0x0002; + public const int LineStrip = 0x0003; + public const int Triangles = 0x0004; + public const int TriangleStrip = 0x0005; + public const int TriangleFan = 0x0006; +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlRenderbufferFormat.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlRenderbufferFormat.cs new file mode 100644 index 0000000..bf81262 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlRenderbufferFormat.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlRenderbufferFormat +{ + Depth24Stencil8 = 0x88F0 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlRenderbufferTarget.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlRenderbufferTarget.cs new file mode 100644 index 0000000..1e83873 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlRenderbufferTarget.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlRenderbufferTarget +{ + Renderbuffer = 0x8D41 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlTextureFilter.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlTextureFilter.cs index 6e46f2f..475a2f0 100644 --- a/src/Drawie.RenderApi.WebGl/Enums/WebGlTextureFilter.cs +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlTextureFilter.cs @@ -3,4 +3,5 @@ public enum WebGlTextureFilter { Nearest = 0x2600, + Linear = 0x2601 } diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlTextureUnit.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlTextureUnit.cs new file mode 100644 index 0000000..1ec27b7 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlTextureUnit.cs @@ -0,0 +1,7 @@ +namespace Drawie.RenderApi.WebGl.Enums; + +public enum WebGlTextureUnit +{ + Texture0 = 0x84C0, + // for more just add a number to Texture0 +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlBuffer.cs b/src/Drawie.RenderApi.WebGl/WebGlBuffer.cs new file mode 100644 index 0000000..575c65f --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/WebGlBuffer.cs @@ -0,0 +1,66 @@ +using System.ComponentModel; +using System.Runtime.InteropServices; +using Drawie.JSInterop; +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.WebGl.Enums; + +namespace Drawie.RenderApi.WebGl; + +public class WebGlBuffer : IBuffer where TData : unmanaged +{ + public int Id { get; } + public int Gl { get; } + public BufferUsage Usage { get; } + public uint Size { get; } + + public WebGlBuffer(int gl, BufferUsage usage, TData[]? data = null) + { + Usage = usage; + Gl = gl; + + Id = JSRuntime.CreateBuffer(gl); + if (data != null) + { + Size = (uint)data.Length; + WebGlBufferType bufferType = ToBufferType(); + JSRuntime.BindBuffer(Gl, (int)bufferType, Id); + var bytes = MemoryMarshal.AsBytes(data).ToArray(); + JSRuntime.BufferData(Gl, (int)bufferType, bytes, (int)WebGlBufferUsage.StaticDraw); + } + + if (usage == BufferUsage.Vertex) + { + VertexAttributePointer(0, 3, 8, 0); + VertexAttributePointer(1, 3, 8, 3); + VertexAttributePointer(2, 2, 8, 6); + } + } + + private WebGlBufferType ToBufferType() + { + return Usage switch + { + BufferUsage.Vertex => WebGlBufferType.Array, + BufferUsage.Index => WebGlBufferType.ElementArray, + BufferUsage.Uniform => WebGlBufferType.Uniform, + BufferUsage.Storage => + throw new InvalidEnumArgumentException("Storage buffers are not supported in WebGL."), + _ => throw new ArgumentOutOfRangeException() + }; + } + + private void VertexAttributePointer(int index, int count, int vertexSize, + int offset) + { + int vTypeSize = sizeof(float); + JSRuntime.VertexAttribPointer(Gl, index, count, (int)WebGlDataType.Float, false, vertexSize * vTypeSize, + (offset * vTypeSize)); + JSRuntime.EnableVertexAttribArray(Gl, index); + } + + public void Dispose() + { + //TODO: + //JSRuntime.DeleteBuffer(Gl, Id); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlContext.cs b/src/Drawie.RenderApi.WebGl/WebGlContext.cs index 9fdf62f..1105e8b 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlContext.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlContext.cs @@ -5,11 +5,11 @@ namespace Drawie.RenderApi.WebGl; public class WebGlContext : IWebGlContext { - public WebGlWindowRenderApi WebGlWindowRenderApi { get; } + public WebGlHostViewRenderApi WebGlHostViewRenderApi { get; } - public WebGlContext(WebGlWindowRenderApi webGlWindowRenderApi) + public WebGlContext(WebGlHostViewRenderApi webGlHostViewRenderApi) { - WebGlWindowRenderApi = webGlWindowRenderApi; + WebGlHostViewRenderApi = webGlHostViewRenderApi; } public IntPtr GetGlInterface(string name) diff --git a/src/Drawie.RenderApi.WebGl/WebGlDepthBuffer.cs b/src/Drawie.RenderApi.WebGl/WebGlDepthBuffer.cs new file mode 100644 index 0000000..95a750a --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/WebGlDepthBuffer.cs @@ -0,0 +1,52 @@ +using Drawie.JSInterop; +using Drawie.RenderApi.Abstraction.Textures; +using Drawie.RenderApi.WebGl.Enums; + +namespace Drawie.RenderApi.WebGl; + +public class WebGlDepthBuffer : IDisposable +{ + public uint RenderbufferId { get; } + + public int Width { get; } + public int Height { get; } + + private int Gl { get; } + + public WebGlDepthBuffer(int api, int width, int height, DepthFormat depth) + { + Gl = api; + + Width = width; + Height = height; + + RenderbufferId = (uint)JSRuntime.CreateRenderbuffer(api); + + JSRuntime.BindRenderbuffer(api, (int)WebGlRenderbufferTarget.Renderbuffer, (int)RenderbufferId); + + JSRuntime.RenderbufferStorage( + api, + (int)WebGlRenderbufferTarget.Renderbuffer, + (int)ToOpenglDepth(depth), width, height); + + JSRuntime.BindRenderbuffer(api, (int)WebGlRenderbufferTarget.Renderbuffer, 0); + } + + private WebGlRenderbufferFormat ToOpenglDepth(DepthFormat depth) + { + switch (depth) + { + case DepthFormat.NoDepth: + throw new ArgumentException("Cannot create depth with NoDepth format"); + case DepthFormat.Depth24Stencil8: + return WebGlRenderbufferFormat.Depth24Stencil8; + default: + throw new ArgumentOutOfRangeException(nameof(depth), depth, null); + } + } + + public void Dispose() + { + JSRuntime.DeleteRenderbuffer(Gl, (int)RenderbufferId); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs b/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs index a75604b..dbbe594 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlGraphicsContext.cs @@ -6,11 +6,11 @@ namespace Drawie.RenderApi.WebGl; public class WebGlGraphicsContext(int Gl) : IGraphicsContext { - private HashSet ownedTextures = new HashSet(); + private HashSet ownedTextures = new HashSet(); public bool OwnsTexture(ITexture nativeTexture) { - return nativeTexture is WebGlTexture wglTexture && ownedTextures.Contains(wglTexture.TextureId); + return ownedTextures.Contains(nativeTexture.TextureId); } public void MakeCurrent() @@ -18,25 +18,24 @@ public void MakeCurrent() JSRuntime.MakeContextCurrent(Gl); } - public WebGlTexture CreateTexture(int handle, int width, int height) + public WebGlRenderTarget CreateRenderTarget(int handle, int width, int height) { - var texture = new WebGlTexture(Gl, JSRuntime.CreateTexture(handle)); - JSRuntime.BindTexture(handle, (int)WebGlTextureType.Texture2D, texture.TextureId); - JSRuntime.TexImage2D(handle, (int)WebGlTextureType.Texture2D, 0, (int)WebGlTextureFormat.Rgba, width, height, 0, (int)WebGlTextureFormat.Rgba, (int)WebGlArrayType.UnsignedByte, 0); - JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureMinFilter, (int)WebGlTextureFilter.Nearest); - JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureMagFilter, (int)WebGlTextureFilter.Nearest); - JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureWrapS, (int)WebGlTextureWrap.ClampToEdge); - JSRuntime.TexParameteri(handle, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureWrapT, (int)WebGlTextureWrap.ClampToEdge); + var texture = new WebGlRenderTarget(handle, width, height, DepthFormat.NoDepth); ownedTextures.Add(texture.TextureId); return texture; } - public void DisposeTexture(WebGlTexture texture) + public void DisposeTexture(WebGlRenderTarget texture) { if (ownedTextures.Contains(texture.TextureId)) { - JSRuntime.DeleteTexture(Gl, texture.TextureId); + texture.Dispose(); ownedTextures.Remove(texture.TextureId); } } + + public override string ToString() + { + return string.Join(", ", ownedTextures); + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlGraphicsDevice.cs b/src/Drawie.RenderApi.WebGl/WebGlGraphicsDevice.cs new file mode 100644 index 0000000..7c51b7b --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/WebGlGraphicsDevice.cs @@ -0,0 +1,140 @@ +using System.Text; +using Drawie.Backend.Shaders.Common; +using Drawie.JSInterop; +using Drawie.RenderApi.Abstraction; +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.CommandRecording; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Abstraction.Textures; +using Drawie.RenderApi.WebGl.Enums; + +namespace Drawie.RenderApi.WebGl; + +public class WebGlGraphicsDevice : IGraphicsDevice +{ + public int GlHandle { get; } + + public WebGlGraphicsDevice(int gl) + { + GlHandle = gl; + } + + public IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged + { + return new WebGlBuffer(GlHandle, usage, data); + } + + public ITexture CreateTexture(TextureDesc desc) + { + return new WebGlTexture(GlHandle, desc.Width, desc.Height); + } + + public IPipeline CreatePipeline(PipelineDesc desc) + { + return new WebGlPipeline(desc, GlHandle); + } + + public ICommandList CreateCommandList() + { + return new WebGlCommandList(GlHandle); + } + + public ISampler CreateSampler(SamplerDesc desc) + { + return new WebGlSampler(GlHandle, desc); + } + + public IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) + { + WebGlShaderProgram webGlProgram = new WebGlShaderProgram(GlHandle); + int program = webGlProgram.ProgramHandle; + + int[] shaders = new int[desc.Shaders.Count]; + + try + { + for (int i = 0; i < desc.Shaders.Count; i++) + { + var shader = desc.Shaders[i]; + + int shaderHandle = JSRuntime.CreateShader( + GlHandle, + ToWebGlShaderType(shader.Type)); + + shaders[i] = shaderHandle; + + string source = Encoding.UTF8.GetString(shader.Bytes); + + JSRuntime.ShaderSource(GlHandle, shaderHandle, source); + string? result = JSRuntime.CompileShader(GlHandle, shaderHandle); + + if(result != null) + { + throw new Exception($"Shader compilation failed: {result}"); + } + + JSRuntime.AttachShader(GlHandle, program, shaderHandle); + } + + string? error = JSRuntime.LinkProgram(GlHandle, program); + if (error != null) + { + throw new Exception($"Program linking failed: {error}"); + } + + return webGlProgram; + } + finally + { + for (int i = 0; i < shaders.Length; i++) + { + int shader = shaders[i]; + + if (shader == 0) + continue; + + // TODO: + /*JSRuntime.DetachShader( + GlHandle, + program, + shader); + + JSRuntime.DeleteShader( + GlHandle, + shader);*/ + } + } + } + + private static int ToWebGlShaderType(ShaderType type) + { + return type switch + { + ShaderType.Vertex => (int)WebGlShaderType.Vertex, + ShaderType.Fragment => (int)WebGlShaderType.Fragment, + _ => throw new NotSupportedException( + $"Unsupported WebGL shader type: {type}") + }; + } + + public IRenderTarget CreateRenderTarget(TextureDesc textureDesc) + { + return new WebGlRenderTarget(GlHandle, textureDesc.Width, textureDesc.Height, textureDesc.Depth); + } + + public IBufferGroup CreateBufferGroup() + { + return new WebGlVertexArray(GlHandle); + } + + public void Submit(RecordedRenderPass cmdList) + { + for (var index = 0; index < cmdList.Instructions.Length; index++) + { + var instruction = cmdList.Instructions[index]; + instruction.Invoke(); + } + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs b/src/Drawie.RenderApi.WebGl/WebGlHostViewRenderApi.cs similarity index 55% rename from src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs rename to src/Drawie.RenderApi.WebGl/WebGlHostViewRenderApi.cs index 5f4d4c3..23c2569 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlHostViewRenderApi.cs @@ -7,17 +7,19 @@ namespace Drawie.RenderApi.WebGl; -public class WebGlWindowRenderApi : IWindowRenderApi +public class WebGlHostViewRenderApi : IHostViewRenderApi { private HtmlCanvas canvasObject; public event Action? FramebufferResized; public ITexture RenderTexture => texture; public string CanvasId { get; private set; } + + public event Action InstanceCreated; public int gl; - private WebGlTexture texture; + private WebGlRenderTarget texture; private int framebuffer; private VecI fbSize; @@ -39,8 +41,9 @@ public void CreateInstance(object contextObject, VecI framebufferSize) JSRuntime.MakeContextCurrent(gl); - texture = CreateFramebuffer(gl, framebufferSize.X, framebufferSize.Y); + texture = webglGraphicsContext.CreateRenderTarget(gl, framebufferSize.X, framebufferSize.Y); fbSize = framebufferSize; + InstanceCreated?.Invoke(); } public void DestroyInstance() @@ -62,41 +65,4 @@ public void PrepareTextureToWrite() public void Render(double deltaTime) { } - - private WebGlTexture CreateFramebuffer(int handle, int width, int height) - { - var tex = webglGraphicsContext.CreateTexture(handle, width, height); - framebuffer = JSRuntime.CreateFramebuffer(gl); - - JSRuntime.BindFramebuffer( - gl, - framebuffer); - - JSRuntime.FramebufferTexture2D( - gl, - (int)WebGlFramebufferTarget.Framebuffer, - (int)WebGlFramebufferAttachment.ColorAttachment0, - (int)WebGlTextureType.Texture2D, - tex.TextureId, - 0); - - var status = JSRuntime.CheckFramebufferStatus(gl, (int)WebGlFramebufferTarget.Framebuffer); - - if (status != (int)WebGlFramebufferStatus.FramebufferComplete) - { - WebGlError error = (WebGlError)JSRuntime.GetError(gl); - throw new Exception($"Framebuffer invalid: {status}, Error: {error}"); - } - - return tex; - } - - private void DisposeTexture() - { - JSRuntime.BindFramebuffer(gl, 0); - - JSRuntime.DeleteFramebuffer(gl, framebuffer); - framebuffer = 0; - webglGraphicsContext.DisposeTexture(texture); - } } diff --git a/src/Drawie.RenderApi.WebGl/WebGlPipeline.cs b/src/Drawie.RenderApi.WebGl/WebGlPipeline.cs new file mode 100644 index 0000000..2e555d4 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/WebGlPipeline.cs @@ -0,0 +1,66 @@ +using Drawie.Backend.Vertie.Core; +using Drawie.JSInterop; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.WebGl.Enums; + +namespace Drawie.RenderApi.WebGl; + +public class WebGlPipeline : IPipeline +{ + public PipelineDesc Description { get; } + public int Gl { get; } + + public WebGlPipeline(PipelineDesc description, int gl) + { + Description = description; + Gl = gl; + } + + public void Apply() + { + JSRuntime.Viewport(Gl, Description.Viewport.X, Description.Viewport.Y, Description.Viewport.Width, Description.Viewport.Height); + + if (Description.Blend.Enabled) + { + JSRuntime.Enable(Gl, (int)WebGlCap.Blend); + } + else + { + JSRuntime.Disable(Gl, (int)WebGlCap.Blend); + } + + if (Description.Depth.Enabled) + { + JSRuntime.Enable(Gl, (int)WebGlCap.DepthTest); + JSRuntime.DepthFunc(Gl, ToWebGlDesc(Description.Depth.DepthCompare)); + JSRuntime.DepthMask(Gl, true); + + JSRuntime.ClearDepth(Gl, 1.0); + } + else + { + JSRuntime.Disable(Gl, (int)WebGlCap.DepthTest); + } + + JSRuntime.ClearColor(Gl, 0, 0, 0, 1); + JSRuntime.Clear(Gl, (int)(WebGlBufferMask.ColorBufferBit | WebGlBufferMask.DepthBufferBit | WebGlBufferMask.StencilBufferBit)); + + Description.ShaderProgram?.Use(); + } + + private int ToWebGlDesc(DepthCompareType depthDepthCompare) + { + return depthDepthCompare switch + { + DepthCompareType.Never => (int)WebGlDepthFunc.Never, + DepthCompareType.Less => (int)WebGlDepthFunc.Less, + DepthCompareType.Equal => (int)WebGlDepthFunc.Equal, + DepthCompareType.LessEqual => (int)WebGlDepthFunc.LEqual, + DepthCompareType.Greater => (int)WebGlDepthFunc.Greater, + DepthCompareType.NotEqual => (int)WebGlDepthFunc.NotEqual, + DepthCompareType.GreaterEqual => (int)WebGlDepthFunc.GEqual, + DepthCompareType.Always => (int)WebGlDepthFunc.Always, + _ => throw new ArgumentOutOfRangeException(nameof(depthDepthCompare), depthDepthCompare, null) + }; + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlRenderApi.cs b/src/Drawie.RenderApi.WebGl/WebGlRenderApi.cs index c27427b..16c761b 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlRenderApi.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlRenderApi.cs @@ -1,25 +1,39 @@ -namespace Drawie.RenderApi.WebGl; +using Drawie.RenderApi.Abstraction; + +namespace Drawie.RenderApi.WebGl; public class WebGlRenderApi : IWebGlRenderApi { public IWebGlContext WebGlContext { get; private set; } - public WebGlWindowRenderApi WindowRenderApi { get; private set; } - - IReadOnlyCollection IRenderApi.WindowRenderApis => new List { WindowRenderApi }; + public WebGlHostViewRenderApi HostViewRenderApi { get; private set; } + IReadOnlyCollection IRenderApi.WindowRenderApis => new List { HostViewRenderApi }; + public IGraphicsDevice GraphicsDevice { get; private set; } + public WebGlRenderApi() { } - public IWindowRenderApi CreateWindowRenderApi() + public IHostViewRenderApi CreateWindowRenderApi() { - if (WindowRenderApi != null) + if (HostViewRenderApi != null) { throw new InvalidOperationException("Window render API was already created."); - } + } - WindowRenderApi = new WebGlWindowRenderApi(); - WebGlContext = new WebGlContext(WindowRenderApi); - return WindowRenderApi; + HostViewRenderApi = new WebGlHostViewRenderApi(); + + if (GraphicsDevice == null) + { + HostViewRenderApi.InstanceCreated += () => CreateGraphicsDevice(HostViewRenderApi.gl); + } + + WebGlContext = new WebGlContext(HostViewRenderApi); + return HostViewRenderApi; + } + + private void CreateGraphicsDevice(int context) + { + GraphicsDevice = new WebGlGraphicsDevice(context); } } diff --git a/src/Drawie.RenderApi.WebGl/WebGlRenderTarget.cs b/src/Drawie.RenderApi.WebGl/WebGlRenderTarget.cs new file mode 100644 index 0000000..5ba5151 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/WebGlRenderTarget.cs @@ -0,0 +1,66 @@ +using Drawie.JSInterop; +using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Textures; +using Drawie.RenderApi.WebGl.Enums; + +namespace Drawie.RenderApi.WebGl; + +public class WebGlRenderTarget : IRenderTarget, IWebGlTexture, IDisposable +{ + public int Gl { get; } + public uint FramebufferId { get; } + public VecI Size { get; } + public ulong TextureId => texture.TextureId; + + private WebGlTexture texture; + private WebGlDepthBuffer depthBuffer; + + public WebGlRenderTarget(int gl, int width, int height, DepthFormat depth) + { + Gl = gl; + Size = new VecI(width, height); + texture = new WebGlTexture(gl, width, height); + FramebufferId = (uint)JSRuntime.CreateFramebuffer(gl); + + if (depth != DepthFormat.NoDepth) + { + depthBuffer = new WebGlDepthBuffer(gl, width, height, depth); + } + + JSRuntime.BindFramebuffer(gl, (int)WebGlFramebufferTarget.Framebuffer, (int)FramebufferId); + + JSRuntime.FramebufferTexture2D(gl, + (int)WebGlFramebufferTarget.Framebuffer, + (int)WebGlFramebufferAttachment.ColorAttachment0, + (int)WebGlTextureType.Texture2D, + (int)texture.TextureId, + 0); + + if (depthBuffer != null) + { + JSRuntime.FramebufferRenderbuffer( + gl, + (int)WebGlFramebufferTarget.Framebuffer, + (int)WebGlFramebufferAttachment.DepthStencilAttachment, + (int)WebGlRenderbufferTarget.Renderbuffer, + (int)depthBuffer.RenderbufferId); + } + + var status = JSRuntime.CheckFramebufferStatus(gl, (int)WebGlFramebufferTarget.Framebuffer); + + if (status != (int)WebGlFramebufferStatus.FramebufferComplete) + { + WebGlError error = (WebGlError)JSRuntime.GetError(gl); + throw new Exception($"Framebuffer invalid: {status}, Error: {error}"); + } + } + + public void Dispose() + { + texture.Dispose(); + JSRuntime.DeleteFramebuffer(Gl, (int)FramebufferId); + } + + uint IWebGlTexture.TextureId => (uint)texture.TextureId; +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlSampler.cs b/src/Drawie.RenderApi.WebGl/WebGlSampler.cs new file mode 100644 index 0000000..bf6261a --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/WebGlSampler.cs @@ -0,0 +1,16 @@ +using Drawie.JSInterop; +using Drawie.RenderApi.Abstraction.Textures; + +namespace Drawie.RenderApi.WebGl; + +public class WebGlSampler : ISampler +{ + public int Gl { get; } + public uint Handle { get; } + + public WebGlSampler(int glHandle, SamplerDesc desc) + { + Gl = glHandle; + Handle = (uint)JSRuntime.CreateSampler(glHandle); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlShaderProgram.cs b/src/Drawie.RenderApi.WebGl/WebGlShaderProgram.cs new file mode 100644 index 0000000..da52217 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/WebGlShaderProgram.cs @@ -0,0 +1,126 @@ +using System.Numerics; +using System.Runtime.InteropServices; +using Drawie.Backend.Shaders.Common; +using Drawie.JSInterop; +using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.WebGl.Enums; + +namespace Drawie.RenderApi.WebGl; + +public class WebGlShaderProgram : IShaderProgram +{ + public int ProgramHandle { get; } + public int Gl { get; } + + private readonly Dictionary uniformBlockUbos = new(); + + public WebGlShaderProgram(int gl) + { + Gl = gl; + ProgramHandle = JSRuntime.CreateProgram(gl); + } + + public void Use() + { + JSRuntime.UseProgram(Gl, ProgramHandle); + } + + public void UpdateUniforms(List blocks) + { + int bindingPoint = 0; + + foreach (var uniformBlock in blocks) + { + int blockIndex = uniformBlock.ShaderLayout.Index; + int blockSize = uniformBlock.ShaderLayout.Size; + + if (blockIndex == int.MaxValue) + continue; + + JSRuntime.UniformBlockBinding( + Gl, + ProgramHandle, + blockIndex, + bindingPoint); + + if (!uniformBlockUbos.TryGetValue( + uniformBlock.Name, + out int ubo)) + { + ubo = JSRuntime.CreateBuffer(Gl); + + uniformBlockUbos.Add( + uniformBlock.Name, + ubo); + } + + JSRuntime.BindBuffer( + Gl, + (int)WebGlBufferType.Uniform, + ubo); + + JSRuntime.BufferData( + Gl, + (int)WebGlBufferType.Uniform, + blockSize, + (int)WebGlBufferUsage.DynamicDraw); + + JSRuntime.BindBufferBase( + Gl, + (int)WebGlBufferType.Uniform, + bindingPoint, + ubo); + + for (int i = 0; i < uniformBlock.Properties.Count; i++) + { + var property = uniformBlock.Properties[i]; + + UploadProperty( + property.ObjValue, + uniformBlock.ShaderLayout.UniformProperties[i]); + } + + JSRuntime.BindBuffer( + Gl, + (int)WebGlBufferType.Uniform, + 0); + + bindingPoint++; + } + } + + private void UploadProperty( + object value, + PropertyLayout layout) + { + byte[] data = UniformValueToBytes(value); + + JSRuntime.BufferSubData( + Gl, + (int)WebGlBufferType.Uniform, + layout.Offset, + data); + } + + private static byte[] UniformValueToBytes(object value) + { + return value switch + { + float v => BitConverter.GetBytes(v), + int v => BitConverter.GetBytes(v), + uint v => BitConverter.GetBytes(v), + float[] v => MemoryMarshal.Cast(v.AsSpan()).ToArray(), + int[] v => MemoryMarshal.Cast(v.AsSpan()).ToArray(), + uint[] v => MemoryMarshal.Cast(v.AsSpan()).ToArray(), + Matrix4x4 v => CreateFromMatrix(v), + _ => throw new NotSupportedException($"Unsupported uniform value type: {value.GetType()}") + }; + } + + private static byte[] CreateFromMatrix(Matrix4x4 matrix) + { + return MemoryMarshal + .AsBytes(MemoryMarshal.CreateSpan(ref matrix, 1)) + .ToArray(); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlTexture.cs b/src/Drawie.RenderApi.WebGl/WebGlTexture.cs index d54c7e2..be41c34 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlTexture.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlTexture.cs @@ -1,17 +1,36 @@ using Drawie.JSInterop; +using Drawie.RenderApi.WebGl.Enums; namespace Drawie.RenderApi.WebGl; -public class WebGlTexture : IWebGlTexture +public class WebGlTexture : IWebGlTexture, IDisposable { public int Gl { get; private set; } - public int TextureId { get; private set; } + public ulong TextureId { get; private set; } uint IWebGlTexture.TextureId => (uint)TextureId; - public WebGlTexture(int gl, int textureId) + public WebGlTexture(int gl, ulong textureId) { TextureId = textureId; Gl = gl; } + + public WebGlTexture(int gl, int width, int height) + { + Gl = gl; + TextureId = (ulong)JSRuntime.CreateTexture(gl); + + JSRuntime.BindTexture(gl, (int)WebGlTextureType.Texture2D, (int)TextureId); + JSRuntime.TexImage2D(gl, (int)WebGlTextureType.Texture2D, 0, (int)WebGlTextureFormat.Rgba, width, height, 0, (int)WebGlTextureFormat.Rgba, (int)WebGlArrayType.UnsignedByte, 0); + JSRuntime.TexParameteri(gl, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureMinFilter, (int)WebGlTextureFilter.Nearest); + JSRuntime.TexParameteri(gl, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureMagFilter, (int)WebGlTextureFilter.Nearest); + JSRuntime.TexParameteri(gl, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureWrapS, (int)WebGlTextureWrap.ClampToEdge); + JSRuntime.TexParameteri(gl, (int)WebGlTextureType.Texture2D, (int)WebGlTextureParameterName.TextureWrapT, (int)WebGlTextureWrap.ClampToEdge); + } + + public void Dispose() + { + JSRuntime.DeleteTexture(Gl, (int)TextureId); + } } diff --git a/src/Drawie.RenderApi.WebGl/WebGlVertexArray.cs b/src/Drawie.RenderApi.WebGl/WebGlVertexArray.cs new file mode 100644 index 0000000..9690307 --- /dev/null +++ b/src/Drawie.RenderApi.WebGl/WebGlVertexArray.cs @@ -0,0 +1,30 @@ +using Drawie.JSInterop; +using Drawie.RenderApi.Abstraction.Buffers; + +namespace Drawie.RenderApi.WebGl; + +public class WebGlVertexArray : IBufferGroup +{ + public uint Handle { get; } + public int Gl { get; } + + private WebGlBufferGroupList bufferList = new WebGlBufferGroupList(); + + public WebGlVertexArray(int glHandle) + { + Gl = glHandle; + Handle = (uint)JSRuntime.CreateVertexArray(Gl); + } + + public void Open(Action list) + { + JSRuntime.BindVertexArray(Gl, (int)Handle); + list(bufferList); + JSRuntime.BindVertexArray(Gl, 0); + } +} + +public class WebGlBufferGroupList : IBufferGroupList +{ + public List Buffers { get; } = new List(); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs b/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs index 9b9fb6d..61b3187 100644 --- a/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs +++ b/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs @@ -1,6 +1,6 @@ namespace Drawie.RenderApi.Abstraction.Buffers; -public interface IBuffer : INativeObject +public interface IBuffer { public BufferUsage Usage { get; } } diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs new file mode 100644 index 0000000..05c5af0 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs @@ -0,0 +1,34 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Textures; + +namespace Drawie.RenderApi.Abstraction.CommandRecording; + +public abstract class CommandList : ICommandList +{ + private List instructions = new List(); + + protected void RecordInstruction(Action instruction) + { + instructions.Add(instruction); + } + + protected RecordedRenderPass ToRenderPass() + { + return new RecordedRenderPass(instructions.ToArray()); + } + + protected void ClearInstructions() + { + instructions.Clear(); + } + + public abstract void BeginRenderPass(IRenderTarget fb); + public abstract void SetPipeline(IPipeline pipeline); + public abstract void SetBuffers(IBufferGroup bufferGroup); + public abstract void BindTexture(ITexture texture, ISampler sampler); + public abstract void DrawIndexed(int indexCount); + public abstract RecordedRenderPass EndRenderPass(IRenderTarget blitTo); + public abstract RecordedRenderPass EndRenderPass(); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs index 7a1ba31..7e5bf9c 100644 --- a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs +++ b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs @@ -14,7 +14,6 @@ public interface IGraphicsDevice IPipeline CreatePipeline(PipelineDesc desc); ICommandList CreateCommandList(); - Dictionary ManagedObjects { get; } ISampler CreateSampler(SamplerDesc desc); void Submit(RecordedRenderPass cmdList); diff --git a/src/Drawie.RenderApi/Abstraction/INativeObject.cs b/src/Drawie.RenderApi/Abstraction/INativeObject.cs deleted file mode 100644 index 0dfb4a3..0000000 --- a/src/Drawie.RenderApi/Abstraction/INativeObject.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace Drawie.RenderApi.Abstraction; - -public interface INativeObject : IDisposable -{ - public int Handle { get; } - public uint NativeHandle { get; } -} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs index ee03299..8f9397a 100644 --- a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs @@ -20,11 +20,13 @@ public struct DepthDesc public enum DepthCompareType { + Never, Less, LessEqual, Equal, Greater, GreaterEqual, + NotEqual, Always } diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs index f3f7de4..fae846d 100644 --- a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProgramDesc.cs @@ -1,3 +1,5 @@ +using Drawie.Backend.Shaders.Common; + namespace Drawie.RenderApi.Abstraction.Shaders; public struct ShaderProgramDesc diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs b/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs index 6b8f0ed..3d0bf39 100644 --- a/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs +++ b/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs @@ -1,4 +1,5 @@ using System.Numerics; +using Drawie.Backend.Shaders.Common; namespace Drawie.RenderApi.Abstraction.Shaders; @@ -30,12 +31,5 @@ public struct UniformBlockLayout { public int Index { get; set; } public int Size { get; set; } - public List UniformProperties { get; set; } -} - -public struct UniformPropertyLayout -{ - public string UniformName { get; set; } - public int Offset { get; set; } - public int Size { get; set; } + public List UniformProperties { get; set; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Textures/ISampler.cs b/src/Drawie.RenderApi/Abstraction/Textures/ISampler.cs index d1745bd..6231cf4 100644 --- a/src/Drawie.RenderApi/Abstraction/Textures/ISampler.cs +++ b/src/Drawie.RenderApi/Abstraction/Textures/ISampler.cs @@ -2,5 +2,5 @@ namespace Drawie.RenderApi.Abstraction.Textures; public interface ISampler { - + public uint Handle { get; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Drawie.RenderApi.csproj b/src/Drawie.RenderApi/Drawie.RenderApi.csproj index 12925a6..1349c11 100644 --- a/src/Drawie.RenderApi/Drawie.RenderApi.csproj +++ b/src/Drawie.RenderApi/Drawie.RenderApi.csproj @@ -14,6 +14,7 @@ + diff --git a/src/Drawie.RenderApi/IBrowserWindowRenderApi.cs b/src/Drawie.RenderApi/IBrowserHostViewRenderApi.cs similarity index 52% rename from src/Drawie.RenderApi/IBrowserWindowRenderApi.cs rename to src/Drawie.RenderApi/IBrowserHostViewRenderApi.cs index af9f5d0..f9bfb12 100644 --- a/src/Drawie.RenderApi/IBrowserWindowRenderApi.cs +++ b/src/Drawie.RenderApi/IBrowserHostViewRenderApi.cs @@ -1,6 +1,6 @@ namespace Drawie.RenderApi; -public interface IBrowserWindowRenderApi : IWindowRenderApi +public interface IBrowserHostViewRenderApi : IHostViewRenderApi { public string CanvasId { get; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/IWindowRenderApi.cs b/src/Drawie.RenderApi/IHostViewRenderApi.cs similarity index 93% rename from src/Drawie.RenderApi/IWindowRenderApi.cs rename to src/Drawie.RenderApi/IHostViewRenderApi.cs index 51bb959..38a8a13 100644 --- a/src/Drawie.RenderApi/IWindowRenderApi.cs +++ b/src/Drawie.RenderApi/IHostViewRenderApi.cs @@ -3,7 +3,7 @@ namespace Drawie.RenderApi; -public interface IWindowRenderApi +public interface IHostViewRenderApi { public IGraphicsContext GraphicsContext { get; } public void CreateInstance(object contextObject, VecI framebufferSize); diff --git a/src/Drawie.RenderApi/IOpenGlWindowRenderApi.cs b/src/Drawie.RenderApi/IOpenGlHostViewRenderApi.cs similarity index 52% rename from src/Drawie.RenderApi/IOpenGlWindowRenderApi.cs rename to src/Drawie.RenderApi/IOpenGlHostViewRenderApi.cs index f5d6d95..4b5685f 100644 --- a/src/Drawie.RenderApi/IOpenGlWindowRenderApi.cs +++ b/src/Drawie.RenderApi/IOpenGlHostViewRenderApi.cs @@ -1,6 +1,6 @@ namespace Drawie.RenderApi; -public interface IOpenGlWindowRenderApi : IWindowRenderApi +public interface IOpenGlHostViewRenderApi : IHostViewRenderApi { Func GetGlInterface(); } diff --git a/src/Drawie.RenderApi/IRenderApi.cs b/src/Drawie.RenderApi/IRenderApi.cs index c433088..b15fdca 100644 --- a/src/Drawie.RenderApi/IRenderApi.cs +++ b/src/Drawie.RenderApi/IRenderApi.cs @@ -4,7 +4,7 @@ namespace Drawie.RenderApi; public interface IRenderApi { - public IReadOnlyCollection WindowRenderApis { get; } + public IReadOnlyCollection WindowRenderApis { get; } public IGraphicsDevice GraphicsDevice { get; } - public IWindowRenderApi CreateWindowRenderApi(); + public IHostViewRenderApi CreateWindowRenderApi(); } \ No newline at end of file diff --git a/src/Drawie.RenderApi/IVulkanWindowRenderApi.cs b/src/Drawie.RenderApi/IVulkanHostViewRenderApi.cs similarity index 54% rename from src/Drawie.RenderApi/IVulkanWindowRenderApi.cs rename to src/Drawie.RenderApi/IVulkanHostViewRenderApi.cs index 537106b..8929d72 100644 --- a/src/Drawie.RenderApi/IVulkanWindowRenderApi.cs +++ b/src/Drawie.RenderApi/IVulkanHostViewRenderApi.cs @@ -1,6 +1,6 @@ namespace Drawie.RenderApi; -public interface IVulkanWindowRenderApi : IWindowRenderApi +public interface IVulkanHostViewRenderApi : IHostViewRenderApi { public IVulkanContext Context { get; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/IVulkanRenderApi.cs b/src/Drawie.RenderApi/IVulkanRenderApi.cs index 2194d0c..188038e 100644 --- a/src/Drawie.RenderApi/IVulkanRenderApi.cs +++ b/src/Drawie.RenderApi/IVulkanRenderApi.cs @@ -2,6 +2,6 @@ namespace Drawie.RenderApi; public interface IVulkanRenderApi : IRenderApi { - public new IReadOnlyCollection WindowRenderApis { get; } + public new IReadOnlyCollection WindowRenderApis { get; } public IVulkanContext VulkanContext { get; } } \ No newline at end of file diff --git a/src/Drawie.ShaderCompiler/Compilation/CrossCompiler.cs b/src/Drawie.ShaderCompiler/Compilation/CrossCompiler.cs new file mode 100644 index 0000000..1805c5a --- /dev/null +++ b/src/Drawie.ShaderCompiler/Compilation/CrossCompiler.cs @@ -0,0 +1,54 @@ +using System.Reflection; +using System.Runtime.InteropServices; +using Drawie.ShaderCompiler; +using Silk.NET.SPIRV.Cross; + +namespace Drawie.Backend.Vertie.Compilation; + +public class CrossCompiler +{ + private Cross api; + private SpvContext spvContext; + + public unsafe CrossCompiler() + { + LoadNativeLibs(); + api = Cross.GetApi(); + spvContext = new SpvContext(api); + } + + private void LoadNativeLibs() + { + var location = Path.GetDirectoryName(typeof(ShaderCompilerTask).Assembly.Location); + string pathToNative = Path.Combine(location, "runtimes", RuntimeInformation.RuntimeIdentifier, "native"); + string pathToLib = Path.Combine(pathToNative, GetLibName()); + + NativeLibrary.Load(pathToLib); + } + + private string GetLibName() + { + if (RuntimeInformation.RuntimeIdentifier.StartsWith("win")) + { + return "spirv-cross.dll"; + } + + if (RuntimeInformation.RuntimeIdentifier.StartsWith("linux")) + { + return "libspirv-cross.so"; + } + + if (RuntimeInformation.RuntimeIdentifier.StartsWith("osx")) + { + return "libspirv-cross.dylib"; + } + throw new PlatformNotSupportedException(); + } + + public string CompileToGlslEs3(byte[] spirv) + { + var compiler = spvContext.CreateCompiler(Silk.NET.SPIRV.Cross.Backend.Glsl, spirv); + compiler.ConfigureGlslVersion(GlslVersion.GlslEs300); + return compiler.Compile(); + } +} \ No newline at end of file diff --git a/src/Drawie.ShaderCompiler/Compilation/GlslVersion.cs b/src/Drawie.ShaderCompiler/Compilation/GlslVersion.cs new file mode 100644 index 0000000..af17efd --- /dev/null +++ b/src/Drawie.ShaderCompiler/Compilation/GlslVersion.cs @@ -0,0 +1,9 @@ +namespace Drawie.Backend.Vertie.Compilation; + +public enum GlslVersion +{ + GlslEs100 = 100, + GlslEs300 = 300, + GlslEs310 = 310, + GlslEs320 = 320 +} \ No newline at end of file diff --git a/src/Drawie.ShaderCompiler/Compilation/ShaderCompiler.cs b/src/Drawie.ShaderCompiler/Compilation/ShaderCompiler.cs new file mode 100644 index 0000000..c4bcfb7 --- /dev/null +++ b/src/Drawie.ShaderCompiler/Compilation/ShaderCompiler.cs @@ -0,0 +1,188 @@ +using System.Text; +using System.Text.Json; +using Drawie.Backend.Shaders.Common; +using Drawie.Backend.Vertie.Compilation; +using Slangc.NET; + +namespace Drawie.ShaderCompiler.Compilation; + +public class ShaderCompiler +{ + public string OutputPath { get; set; } + public string ShaderName { get; set; } + + public ShaderCompiler(string outputPath, string shaderName) + { + OutputPath = outputPath; + ShaderName = shaderName; + } + + public void Compile(string sourceCode, CompilationTarget target) + { + var bytes = SlangCompiler.CompileWithReflection( + sourceCode, + [ + "-matrix-layout-column-major", + "-fvk-use-entrypoint-name", + "-emit-spirv-via-glsl", + "-profile", "glsl_330", + ], + out var reflection); + + File.WriteAllBytes(Path.Combine(OutputPath, $"{ShaderName}.spv"), bytes); + + if (target == CompilationTarget.GlslEs3) + { + var compiler = new CrossCompiler(); + + var glslCode = compiler.CompileToGlslEs3(bytes); + + bytes = Encoding.UTF8.GetBytes(glslCode); + } + + var outputName = + Path.GetFileNameWithoutExtension(ShaderName) + ".shader"; + + var outputReflectionName = Path.GetFileNameWithoutExtension(ShaderName) + ".reflection.json"; + + var outputPath = + Path.Combine(OutputPath, outputName); + + var outputReflectionPath = Path.Combine(OutputPath, outputReflectionName); + + File.WriteAllBytes(outputPath, bytes); + File.WriteAllText(outputReflectionPath, ToReflectionJson(reflection)); + } + + + private string ToReflectionJson(SlangReflection reflection) + { + var shaderReflection = new ShaderReflection(); + + foreach (var entryPoint in reflection.EntryPoints) + { + shaderReflection.EntryPoints.Add(new EntryPoint + { + Name = entryPoint.Name, + Type = StageToType(entryPoint.Stage) + }); + } + + foreach (var parameter in reflection.Parameters) + { + var binding = parameter.Bindings.FirstOrDefault(); + + if (binding == null) + continue; + + var shaderParameter = new ShaderParameter + { + Name = parameter.Name, + Index = (int)binding.Index, + Var = CreateShaderVar(parameter) + }; + // TODO Validate? + shaderParameter.Size = shaderParameter.Var.Layout.Size; + + shaderReflection.Parameters.Add(shaderParameter); + } + + shaderReflection.RawReflectionJson = reflection.Json; + + return JsonSerializer.Serialize(shaderReflection); + } + + private static ShaderVar CreateShaderVar(SlangParameter parameter) + { + var type = parameter.Type; + + var shaderVar = new ShaderVar + { + Layout = new PropertyLayout + { + Name = parameter.Name + }, + Fields = new List() + }; + + // ConstantBuffer -> ElementVarLayout + var elementVarLayout = type.ConstantBuffer?.ElementVarLayout; + + if (elementVarLayout != null) + { + shaderVar.Layout = CreatePropertyLayout( + elementVarLayout, + parameter.Name); + + var fields = elementVarLayout.Type.Struct?.Fields; + + if (fields != null) + { + foreach (var field in fields) + { + if (field.Binding == null) + continue; + + shaderVar.Fields.Add( + CreatePropertyLayout( + field, + field.Name)); + } + } + } + else + { + // Non-constant-buffer parameter. + // Use the parameter's own binding information. + var binding = parameter.Bindings.FirstOrDefault(); + + if (binding != null) + { + shaderVar.Layout = new PropertyLayout + { + Name = parameter.Name, + Offset = (int)binding.Offset, + Size = (int)binding.Size + }; + } + } + + return shaderVar; + } + + private static PropertyLayout CreatePropertyLayout( + SlangVar variable, + string name) + { + var binding = variable.Binding; + + return new PropertyLayout + { + Name = name, + Offset = binding != null + ? (int)binding.Offset + : 0, + Size = binding != null + ? (int)binding.Size + : 0 + }; + } + + private static ShaderType StageToType(SlangStage stage) + { + return stage switch + { + SlangStage.Vertex => ShaderType.Vertex, + SlangStage.Fragment => ShaderType.Fragment, + SlangStage.Compute => ShaderType.Compute, + _ => throw new ArgumentException( + $"Unsupported shader stage: {stage}") + }; + } +} + +public enum CompilationTarget +{ + SpirV, + GlslEs3 +} \ No newline at end of file diff --git a/src/Drawie.ShaderCompiler/Compilation/SpvCompiler.cs b/src/Drawie.ShaderCompiler/Compilation/SpvCompiler.cs new file mode 100644 index 0000000..de6b81c --- /dev/null +++ b/src/Drawie.ShaderCompiler/Compilation/SpvCompiler.cs @@ -0,0 +1,87 @@ +using System.Runtime.InteropServices; +using Drawie.Backend.Vertie.Compilation; +using Silk.NET.SPIRV.Cross; + +namespace Drawie.ShaderCompiler.Compilation; + +public class SpvCompiler +{ + private unsafe Compiler* compiler; + private unsafe CompilerOptions* options; + + private Cross api; + + public unsafe SpvCompiler(Cross api, Context* spvContext, Silk.NET.SPIRV.Cross.Backend backend, byte[] spirv) + { + this.api = api; + Compiler* crossCompiler = null; + Compiler** crossCompilerPtr = &crossCompiler; + + if (spirv.Length == 0) + throw new ArgumentException( + "SPIR-V cannot be empty.", + nameof(spirv)); + + if (spirv.Length % sizeof(uint) != 0) + throw new ArgumentException( + "SPIR-V byte length must be a multiple of 4.", + nameof(spirv)); + + + ParsedIr* parsedIr = null; + + var words = MemoryMarshal.Cast(spirv); + + var parseResult = api.ContextParseSpirv( + spvContext, + words, + (nuint)words.Length, + &parsedIr); + + if (parseResult != Result.Success) + throw new Exception( + $"SPIR-V parsing failed: {parseResult}"); + + var result = api.ContextCreateCompiler(spvContext, backend, parsedIr, + CaptureMode.TakeOwnership, crossCompilerPtr); + + if (result != Result.Success) + throw new Exception($"GLSL compiler creation failed: {result}"); + + compiler = crossCompiler; + + CompilerOptions* options = null; + var optionsResult = api.CompilerCreateCompilerOptions(crossCompiler, &options); + + if (optionsResult != Result.Success) + throw new Exception($"Failed to create compiler options: {optionsResult}"); + + this.options = options; + } + + public unsafe void ConfigureGlslVersion(GlslVersion version) + { + api.CompilerOptionsSetUint(options, CompilerOption.GlslVersion, (uint)version); + api.CompilerOptionsSetBool(options, CompilerOption.GlslES, 1); + } + + public unsafe string Compile() + { + var installResult = api.CompilerInstallCompilerOptions(compiler, options); + if (installResult != Result.Success) + { + throw new Exception($"Failed to install compiler options: {installResult}"); + } + + byte* source = null; + + var result = api.CompilerCompile(compiler, &source); + if (result != Result.Success) + { + throw new Exception($"Compilation failed: {result}"); + } + + string code = Marshal.PtrToStringUTF8((nint)source)!; + return code; + } +} \ No newline at end of file diff --git a/src/Drawie.ShaderCompiler/Compilation/SpvContext.cs b/src/Drawie.ShaderCompiler/Compilation/SpvContext.cs new file mode 100644 index 0000000..bb61060 --- /dev/null +++ b/src/Drawie.ShaderCompiler/Compilation/SpvContext.cs @@ -0,0 +1,29 @@ +using Drawie.ShaderCompiler.Compilation; +using Silk.NET.SPIRV.Cross; + +namespace Drawie.Backend.Vertie.Compilation; + +public class SpvContext +{ + private unsafe Context* spvContext; + private Cross api; + + public unsafe SpvContext(Cross api) + { + this.api = api; + Context* context = null; + + var result = api.ContextCreate(&context); + if (result != Result.Success) + { + throw new Exception($"SPIRV-Cross context creation failed: {result}"); + } + + spvContext = context; + } + + public unsafe SpvCompiler CreateCompiler(Silk.NET.SPIRV.Cross.Backend backend, byte[] spirv) + { + return new SpvCompiler(api, spvContext, backend, spirv); + } +} \ No newline at end of file diff --git a/src/Drawie.ShaderCompiler/Drawie.ShaderCompiler.csproj b/src/Drawie.ShaderCompiler/Drawie.ShaderCompiler.csproj new file mode 100644 index 0000000..6d0011a --- /dev/null +++ b/src/Drawie.ShaderCompiler/Drawie.ShaderCompiler.csproj @@ -0,0 +1,26 @@ + + + + net10.0 + enable + enable + true + true + + + + + + + + + + + + + + + + + diff --git a/src/Drawie.ShaderCompiler/Program.cs b/src/Drawie.ShaderCompiler/Program.cs new file mode 100644 index 0000000..bffaee0 --- /dev/null +++ b/src/Drawie.ShaderCompiler/Program.cs @@ -0,0 +1,67 @@ +using System.Runtime.InteropServices; +using Drawie.ShaderCompiler.Compilation; +using Microsoft.Build.Framework; +using Task = Microsoft.Build.Utilities.Task; + +namespace Drawie.ShaderCompiler; + +public sealed class ShaderCompilerTask : Task +{ + [Required] public string OutputDirectory { get; set; } = ""; + + [Required] public string ShaderRoot { get; set; } = ""; + + public bool Browser { get; set; } + + public override bool Execute() + { + try + { + Directory.CreateDirectory(OutputDirectory); + + foreach (var source in Directory.GetFiles(ShaderRoot, "*.slang", SearchOption.AllDirectories)) + { + try + { + CompileShader(source); + } + catch (Exception ex) + { + Log.LogError( + $"Failed to compile shader '{source}': {ex}"); + + return false; + } + } + + return !Log.HasLoggedErrors; + } + catch (Exception ex) + { + Log.LogErrorFromException(ex, true); + return false; + } + } + + private void CompileShader(string sourcePath) + { + var target = Browser + ? CompilationTarget.GlslEs3 + : CompilationTarget.SpirV; + + Log.LogMessage( + MessageImportance.High, + $"Compiling shader: {sourcePath}, target: {target}"); + + var sourceCode = File.ReadAllText(sourcePath); + + + Compilation.ShaderCompiler compiler = + new Compilation.ShaderCompiler(OutputDirectory, Path.GetFileNameWithoutExtension(sourcePath)); + compiler.Compile(sourceCode, target); + + Log.LogMessage( + MessageImportance.High, + $"Generated: {Path.Combine(OutputDirectory, Path.GetFileNameWithoutExtension(sourcePath) + ".shader")} and {Path.Combine(OutputDirectory, Path.GetFileNameWithoutExtension(sourcePath) + ".reflection.json")}"); + } +} \ No newline at end of file diff --git a/src/Drawie.Shaders.Common/Drawie.Shaders.Common.csproj b/src/Drawie.Shaders.Common/Drawie.Shaders.Common.csproj new file mode 100644 index 0000000..52955e5 --- /dev/null +++ b/src/Drawie.Shaders.Common/Drawie.Shaders.Common.csproj @@ -0,0 +1,10 @@ + + + + net10.0 + enable + enable + Drawie.Backend.Shaders.Common + + + diff --git a/src/Drawie.Shaders.Common/PropertyLayout.cs b/src/Drawie.Shaders.Common/PropertyLayout.cs new file mode 100644 index 0000000..7524808 --- /dev/null +++ b/src/Drawie.Shaders.Common/PropertyLayout.cs @@ -0,0 +1,8 @@ +namespace Drawie.Backend.Shaders.Common; + +public struct PropertyLayout +{ + public string Name { get; set; } + public int Offset { get; set; } + public int Size { get; set; } +} \ No newline at end of file diff --git a/src/Drawie.Shaders.Common/ShaderReflection.cs b/src/Drawie.Shaders.Common/ShaderReflection.cs new file mode 100644 index 0000000..500d4a7 --- /dev/null +++ b/src/Drawie.Shaders.Common/ShaderReflection.cs @@ -0,0 +1,33 @@ +namespace Drawie.Backend.Shaders.Common; + +[Serializable] +public class ShaderReflection +{ + public List Parameters { get; set; } = new List(); + public List EntryPoints { get; set; } = new List(); + + public string RawReflectionJson { get; set; } +} + +[Serializable] +public class EntryPoint +{ + public string Name { get; set; } + public ShaderType Type { get; set; } +} + +[Serializable] +public class ShaderParameter +{ + public string Name { get; set; } + public int Index { get; set; } + public int Size { get; set; } + public ShaderVar Var { get; set; } +} + +[Serializable] +public class ShaderVar +{ + public PropertyLayout Layout { get; set; } + public List Fields { get; set; } +} \ No newline at end of file diff --git a/src/Drawie.Shaders.Common/ShaderReflectionContext.cs b/src/Drawie.Shaders.Common/ShaderReflectionContext.cs new file mode 100644 index 0000000..afe9b1c --- /dev/null +++ b/src/Drawie.Shaders.Common/ShaderReflectionContext.cs @@ -0,0 +1,10 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Drawie.Backend.Shaders.Common; + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(ShaderReflection))] +public partial class ShaderReflectionContext : JsonSerializerContext +{ +} \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs b/src/Drawie.Shaders.Common/ShaderType.cs similarity index 57% rename from src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs rename to src/Drawie.Shaders.Common/ShaderType.cs index 925059b..6e94c77 100644 --- a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderType.cs +++ b/src/Drawie.Shaders.Common/ShaderType.cs @@ -1,4 +1,4 @@ -namespace Drawie.RenderApi.Abstraction.Shaders; +namespace Drawie.Backend.Shaders.Common; public enum ShaderType { diff --git a/src/Drawie.Windowing.Glfw/GlfwWindowingPlatform.cs b/src/Drawie.Windowing.Glfw/GlfwWindowingPlatform.cs deleted file mode 100644 index ce980f9..0000000 --- a/src/Drawie.Windowing.Glfw/GlfwWindowingPlatform.cs +++ /dev/null @@ -1,38 +0,0 @@ -using Drawie.Numerics; -using Drawie.RenderApi; -using Drawie.Windowing; -using Drawie.Windowing.Input; -using Silk.NET.Input; -using IWindow = Drawie.Windowing.IWindow; - -namespace Drawie.Silk; - -public class GlfwWindowingPlatform : IWindowingPlatform -{ - private readonly List _windows = new(); - - public IReadOnlyCollection Windows => _windows; - public IRenderApi RenderApi { get; } - - public GlfwWindowingPlatform(IRenderApi renderApi) - { - RenderApi = renderApi; - } - - public IWindow CreateWindow(string name) - { - return CreateWindow(name, VecI.Zero); - } - - public IWindow CreateWindow(string name, VecI size) - { - GlfwWindow window = new(name, size, RenderApi.CreateWindowRenderApi()); - _windows.Add(window); - return window; - } - - public override string ToString() - { - return "Glfw"; - } -} \ No newline at end of file diff --git a/src/Drawie.Windowing/ILayer.cs b/src/Drawie.Windowing/ILayer.cs deleted file mode 100644 index 604650e..0000000 --- a/src/Drawie.Windowing/ILayer.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Drawie.Rendering; - -namespace Drawie.Windowing; - -public interface ILayer -{ - void Initialize(IWindow window); -} \ No newline at end of file diff --git a/src/Drawie.Windowing/IWindowingPlatform.cs b/src/Drawie.Windowing/IWindowingPlatform.cs deleted file mode 100644 index b6f636a..0000000 --- a/src/Drawie.Windowing/IWindowingPlatform.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Drawie.Numerics; -using Drawie.RenderApi; -using Drawie.Windowing.Input; - -namespace Drawie.Windowing; - -public interface IWindowingPlatform -{ - public IRenderApi RenderApi { get; } - public IReadOnlyCollection Windows { get; } - public IWindow CreateWindow(string name); - public IWindow CreateWindow(string name, VecI size); -} \ No newline at end of file diff --git a/src/Drawie.sln b/src/Drawie.sln index e0e05fc..776c837 100644 --- a/src/Drawie.sln +++ b/src/Drawie.sln @@ -13,9 +13,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Numerics", "Drawie.N EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawiEngine", "DrawiEngine\DrawiEngine.csproj", "{C91E2EF2-BF05-49E6-91A0-53B847B38FC0}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Windowing", "Drawie.Windowing\Drawie.Windowing.csproj", "{503FADEB-B803-4B27-BE37-DDAA37C5CDA9}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Host", "Drawie.Host\Drawie.Host.csproj", "{503FADEB-B803-4B27-BE37-DDAA37C5CDA9}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Windowing.Glfw", "Drawie.Windowing.Glfw\Drawie.Windowing.Glfw.csproj", "{D4927AD1-8A67-4358-B867-EA19771D47C8}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Host.Glfw", "Drawie.Host.Glfw\Drawie.Host.Glfw.csproj", "{D4927AD1-8A67-4358-B867-EA19771D47C8}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi", "Drawie.RenderApi\Drawie.RenderApi.csproj", "{D6C22861-1F82-4032-8108-06744D3DB33D}" EndProject @@ -25,13 +25,13 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawieSample.Browser", "Dra EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Samples", "_Samples", "{239DB1B4-E66F-444A-87DA-B19775F40974}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Windowing.Browser", "Drawie.Windowing.Browser\Drawie.Windowing.Browser.csproj", "{14896E27-47BA-48E9-81D1-612582C8FF5B}" +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Host.Browser", "Drawie.Host.Browser\Drawie.Host.Browser.csproj", "{14896E27-47BA-48E9-81D1-612582C8FF5B}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RenderApis", "RenderApis", "{9A805C39-3EC4-478F-B7F2-5D54F9F35CB8}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{BE35DF1E-91E8-4F16-841D-70EDDE31CC9F}" EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Windowing", "Windowing", "{823F63C1-3DD7-4DE7-A41E-B4E0159FBCB4}" +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosts", "Hosts", "{823F63C1-3DD7-4DE7-A41E-B4E0159FBCB4}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.JSInterop", "Drawie.JSInterop\Drawie.JSInterop.csproj", "{6B57DDAF-FE9A-496C-B290-D019004B6B11}" EndProject @@ -73,6 +73,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Backend.Vertie", "Dr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShaderPlayground", "ShaderPlayground\ShaderPlayground.csproj", "{EB963B58-ECBA-400D-887E-F7598C7F7894}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compilation", "Compilation", "{0D635DD1-AF77-4B5B-9649-2F61A4884D1E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.ShaderCompiler", "Drawie.ShaderCompiler\Drawie.ShaderCompiler.csproj", "{41CC13E2-3398-4669-8B8B-23721EB35754}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Shaders.Common", "Drawie.Shaders.Common\Drawie.Shaders.Common.csproj", "{4F39C0D8-4DB8-40F1-AAB3-269450765937}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -198,6 +204,14 @@ Global {EB963B58-ECBA-400D-887E-F7598C7F7894}.Debug|Any CPU.Build.0 = Debug|Any CPU {EB963B58-ECBA-400D-887E-F7598C7F7894}.Release|Any CPU.ActiveCfg = Release|Any CPU {EB963B58-ECBA-400D-887E-F7598C7F7894}.Release|Any CPU.Build.0 = Release|Any CPU + {41CC13E2-3398-4669-8B8B-23721EB35754}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {41CC13E2-3398-4669-8B8B-23721EB35754}.Debug|Any CPU.Build.0 = Debug|Any CPU + {41CC13E2-3398-4669-8B8B-23721EB35754}.Release|Any CPU.ActiveCfg = Release|Any CPU + {41CC13E2-3398-4669-8B8B-23721EB35754}.Release|Any CPU.Build.0 = Release|Any CPU + {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {645AF54D-D58F-492E-A2A9-12F86EA8C00A} = {239DB1B4-E66F-444A-87DA-B19775F40974} @@ -223,5 +237,7 @@ Global {7CACCC0C-044C-4ACE-B018-518F8D223D4A} = {8F709A50-C8C2-46FC-8355-A96701FFC359} {154B8B31-8819-4996-B8F7-C6DE0BDC87A7} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} {EB963B58-ECBA-400D-887E-F7598C7F7894} = {239DB1B4-E66F-444A-87DA-B19775F40974} + {41CC13E2-3398-4669-8B8B-23721EB35754} = {0D635DD1-AF77-4B5B-9649-2F61A4884D1E} + {4F39C0D8-4DB8-40F1-AAB3-269450765937} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} EndGlobalSection EndGlobal diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 5146477..7dd44e0 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -10,6 +10,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -44,6 +45,8 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/Drawie2Sample/Cub.cs b/src/Drawie2Sample/Cub.cs new file mode 100644 index 0000000..dbdf281 --- /dev/null +++ b/src/Drawie2Sample/Cub.cs @@ -0,0 +1,59 @@ +using System.Numerics; +using Drawie.Backend.Vertie.Core; + +namespace Drawie2Sample; + +public class Cub : Mesh +{ + private static Vector3[] Vertices = new[] + { + new Vector3(-0.5f, -0.5f, -0.5f), + new Vector3(0.5f, -0.5f, -0.5f), + new Vector3(0.5f, 0.5f, -0.5f), + new Vector3(-0.5f, 0.5f, -0.5f), + new Vector3(-0.5f, -0.5f, 0.5f), + new Vector3(0.5f, -0.5f, 0.5f), + new Vector3(0.5f, 0.5f, 0.5f), + new Vector3(-0.5f, 0.5f, 0.5f) + }; + + private static Vector3[] Normals = new[] + { + new Vector3(0, 0, -1), + new Vector3(0, 0, 1), + new Vector3(-1, 0, 0), + new Vector3(1, 0, 0), + new Vector3(0, -1, 0), + new Vector3(0, 1, 0) + }; + + private static Vector2[] TexCoords = new Vector2[] + { + new Vector2(0, 0), + new Vector2(1, 0), + new Vector2(1, 1), + new Vector2(0, 1), + new Vector2(0, 0), + new Vector2(1, 0), + new Vector2(1, 1), + new Vector2(0, 1) + }; + + private static uint[] Indices = new uint[] + { + 0, 1, 2, 2, 3, 0, + 4, 5, 6, 6, 7, 4, + 0, 1, 5, 5, 4, 0, + 2, 3, 7, 7, 6, 2, + 0, 3, 7, 7, 4, 0, + 1, 2, 6, 6, 5, 1 + }; + + public Cub() : base(Vertices, Indices, Normals, TexCoords) + { + } + + public Cub(string path) : base(path) + { + } +} \ No newline at end of file diff --git a/src/Drawie2Sample/Drawie2Sample.csproj b/src/Drawie2Sample/Drawie2Sample.csproj index 6ddd5e0..fc9ae11 100644 --- a/src/Drawie2Sample/Drawie2Sample.csproj +++ b/src/Drawie2Sample/Drawie2Sample.csproj @@ -14,9 +14,9 @@ - + PreserveNewest - + diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 98c4094..ca10544 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -1,30 +1,24 @@ using System.Numerics; using System.Text; -using Drawie.Backend.Core; -using Drawie.Backend.Core.Bridge; using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.ColorsImpl.Paintables; -using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Core.Text; using Drawie.Backend.Vertie.Core; using Drawie.Backend.Vertie.Helpers; using Drawie.Backend.Vertie.Rendering; -using Drawie.Layer.UI.ImGui; +using Drawie.Host; +using Drawie.Host.Input; using Drawie.Numerics; using Drawie.Rendering; -using Drawie.Windowing.Input; using DrawiEngine; using ImGuiNET; -using Silk.NET.OpenGL; -using IWindow = Drawie.Windowing.IWindow; -using Texture = Drawie.Rendering.Texture; namespace Drawie2Sample; public class Drawie2SampleApp : DrawieApp { - private IWindow window; + private IHost window; private static Camera camera; private static VecD lastMousePosition; @@ -39,10 +33,10 @@ public class Drawie2SampleApp : DrawieApp private RenderOptions renderOptions = new RenderOptions(); - public override IWindow CreateMainWindow() + public override IHost CreateMainWindow() { window = Engine.WindowingPlatform.CreateWindow("Drawie 2 Sample", new VecI(1920, 1080)); - window.AddLayer(new ImGuiLayer(RenderImGui)); + //window.AddLayer(new ImGuiLayer(RenderImGui)); return window; } @@ -54,7 +48,6 @@ private void RenderImGui(double dt) renderOptions.RenderMode = (RenderMode)activeRenderMode; } ImGui.EndGroup(); - ImGui.ShowMetricsWindow(); } protected override void OnInitialize() @@ -71,24 +64,19 @@ protected override void OnInitialize() mat.AddTexture(surf); handleMovement = true; - + window.InputController.PrimaryPointer.Cursor.State = CursorState.Disabled; window.InputController.PrimaryKeyboard.KeyPressed += (keyboard, key, code) => { if (key == Key.Escape) { - window.InputController.PrimaryPointer.Cursor.State = CursorState.Normal; - handleMovement = false; - } - else if (key == Key.Enter) - { - window.InputController.PrimaryPointer.Cursor.State = CursorState.Disabled; - handleMovement = true; + window.InputController.PrimaryPointer.Cursor.State = window.InputController.PrimaryPointer.Cursor.State == CursorState.Disabled ? CursorState.Normal : CursorState.Disabled; + handleMovement = !handleMovement; } }; - + camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); - Mesh mesh = new Mesh("Assets/teapot.obj"); + Mesh mesh = new Cub(); //new Mesh("Assets/teapot.obj"); RegisterMouse(window.InputController); @@ -96,7 +84,7 @@ protected override void OnInitialize() window.Render += (targetTexture, deltaTime) => { - targetTexture.Clear(); + targetTexture.Clear(Colors.Black); targetTexture.DrawMesh(mesh, mat, camera, renderOptions); diff --git a/src/DrawieSample.Browser/DrawieSample.Browser.csproj b/src/DrawieSample.Browser/DrawieSample.Browser.csproj index c5b4e8f..c1a0db7 100644 --- a/src/DrawieSample.Browser/DrawieSample.Browser.csproj +++ b/src/DrawieSample.Browser/DrawieSample.Browser.csproj @@ -2,7 +2,7 @@ net10.0-browser true - true + true $(EmccExtraLDFlags) --js-library="$(MSBuildThisFileDirectory)\SkiaSharpGLInterop.js" true true @@ -15,12 +15,10 @@ - - PreserveNewest - + - + diff --git a/src/DrawieSample.Browser/wwwroot/scripts/drawie.js b/src/DrawieSample.Browser/wwwroot/scripts/drawie.js index 0772261..3743cf2 100644 --- a/src/DrawieSample.Browser/wwwroot/scripts/drawie.js +++ b/src/DrawieSample.Browser/wwwroot/scripts/drawie.js @@ -13,12 +13,21 @@ textureHandleIds = 0; textureHandles = {}; + samplerIds = 0; + samplerHandles = {} + + framebufferIds = 0; + framebufferHandles = {} + uniformLocationHandleIds = 0; uniformLocationHandles = {}; + + vertexArrayIds = 0; + vertexArrayHandles = {} - framebufferHandleIds = 0; - framebufferHandles = {}; - + renderbufferIds = 0; + renderbufferHandles = {} + exports = {}; addDrawieImports() { @@ -53,6 +62,40 @@ return null; }, + viewport: (handleId, x, y, width, height) => { + const gl = this.canvasContextHandles[handleId]; + gl.viewport(x, y, width, height); + }, + createFramebuffer: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + const webGlFramebuffer = gl.createFramebuffer(); + this.framebufferIds++; + this.framebufferHandles[this.framebufferIds] = webGlFramebuffer; + return this.framebufferIds; + }, + bindFramebuffer: (handleId, target, framebuffer) => { + const gl = this.canvasContextHandles[handleId]; + const fb = this.framebufferHandles[framebuffer]; + gl.bindFramebuffer(target, fb); + }, + framebufferTexture2D: (glHandle, target, attachment, textarget, texture, level) => { + const gl = this.canvasContextHandles[glHandle]; + const targetTexture = this.textureHandles[texture] + gl.framebufferTexture2D(target, attachment, textarget, targetTexture, level); + }, + checkFramebufferStatus: (glHandle, target) => { + const gl = this.canvasContextHandles[glHandle]; + return gl.checkFramebufferStatus(target); + }, + getError: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + return gl.getError(); + }, + deleteFramebuffer: (glHandle, framebuffer) => { + const gl = this.canvasContextHandles[glHandle]; + gl.deleteFramebuffer(this.framebufferHandles[framebuffer]); + delete this.framebufferHandles[framebuffer]; + }, createProgram: (glHandle) => { const gl = this.canvasContextHandles[glHandle]; @@ -95,9 +138,34 @@ const buffer = this.bufferHandles[bufferId]; gl.bindBuffer(target, buffer); }, - bufferData: (glHandle, target, data, usage) => { + bufferData: (glHandle, target, dataOrSize, usage) => { + const gl = this.canvasContextHandles[glHandle]; + if (typeof dataOrSize === 'number') { + gl.bufferData(target, dataOrSize, usage); + return; + } + + const array = target === 0x8893 ? new Uint16Array(dataOrSize) : new Float32Array(dataOrSize); + gl.bufferData(target, array, usage); + }, + bindBufferBase: (glHandle, target, index, buffer) => { const gl = this.canvasContextHandles[glHandle]; - gl.bufferData(target, new Float32Array(data), usage); + const bufferObj = this.bufferHandles[buffer]; + gl.bindBufferBase(target, index, bufferObj); + }, + + bufferSubData: (glHandle, target, dstByteOffset, srcData) => { + const gl = this.canvasContextHandles[glHandle]; + + const data = srcData instanceof Uint8Array + ? srcData + : new Uint8Array(srcData); + + gl.bufferSubData( + target, + dstByteOffset, + data + ); }, clearColor: (glHandle, r, g, b, a) => { const gl = this.canvasContextHandles[glHandle]; @@ -129,6 +197,73 @@ const program = this.programHandles[programId]; return gl.getAttribLocation(program, name); }, + enable: (glHandle, cap) => { + const gl = this.canvasContextHandles[glHandle]; + gl.enable(cap); + }, + disable: (glHandle, cap) => { + const gl = this.canvasContextHandles[glHandle]; + gl.disable(cap) + }, + depthFunc: (glHandle, func) => { + const gl = this.canvasContextHandles[glHandle]; + gl.depthFunc(func); + }, + clearDepth: (glHandle, depth) => { + const gl = this.canvasContextHandles[glHandle]; + gl.clearDepth(depth); + }, + depthMask: (glHandle, value) => { + const gl = this.canvasContextHandles[glHandle]; + gl.depthMask(value); + }, + getParameter: (glHandle, param) => { + const gl = this.canvasContextHandles[glHandle]; + const foundParam = gl.getParameter(param); + return foundParam.name; + }, + bindVertexArray: (glHandle, vertexArray) => { + const gl = this.canvasContextHandles[glHandle]; + const vao = this.vertexArrayHandles[vertexArray]; + gl.bindVertexArray(vao); + }, + bindSampler: (glHandle, slot, sampler) => { + const gl = this.canvasContextHandles[glHandle]; + const wglSampler = this.samplerHandles[sampler]; + gl.bindSampler(slot, wglSampler); + }, + uniformBlockBinding: (glHandle, program, blockIndex, bindingPoint) => { + const gl = this.canvasContextHandles[glHandle]; + const wglProgram = this.programHandles[program]; + gl.uniformBlockBinding(wglProgram, blockIndex, bindingPoint); + }, + createRenderbuffer: (glHandle) => { + const gl = this.canvasContextHandles[glHandle]; + const rb = gl.createRenderbuffer() + this.renderbufferIds++; + this.renderbufferHandles[this.renderbufferIds] = rb; + return this.renderbufferIds; + }, + bindRenderbuffer: (glHandle, target, renderbufferId) => { + const gl = this.canvasContextHandles[glHandle]; + const rb = this.renderbufferHandles[renderbufferId]; + gl.bindRenderbuffer(target, rb); + }, + renderbufferStorage: (glHandle, target, internalFormat, width, height) => { + const gl = this.canvasContextHandles[glHandle]; + gl.renderbufferStorage(target, internalFormat, width, height); + }, + deleteRenderbuffer: (glHandle, renderbufferId) => { + const gl = this.canvasContextHandles[glHandle]; + const rb = this.renderbufferHandles[renderbufferId]; + gl.deleteRenderbuffer(rb); + delete this.renderbufferHandles[renderbufferId]; + }, + framebufferRenderbuffer: (glHandle, target, attachment, renderbufferTarget, renderbuffer) => { + const gl = this.canvasContextHandles[glHandle]; + const rb = this.renderbufferHandles[renderbuffer]; + gl.framebufferRenderbuffer(target, attachment, renderbufferTarget, rb); + }, openSkiaContext: (canvasId) => { const contextAttributes = { alpha: 1, @@ -176,7 +311,7 @@ }, activeTexture: (glHandle, textureUnit) => { const gl = this.canvasContextHandles[glHandle]; - gl.activeTexture(gl.TEXTURE0 + textureUnit); + gl.activeTexture(textureUnit); }, uniform1i: (glHandle, location, value) => { const gl = this.canvasContextHandles[glHandle]; @@ -200,55 +335,46 @@ delete this.textureHandles[textureId]; }, - viewport: (glHandle, x, y, width, height) => { + drawElements: (glHandle, mode, count, type, offset) => { const gl = this.canvasContextHandles[glHandle]; - gl.viewport(x, y, width, height); + gl.drawElements(mode, count, type, offset); }, - bindFramebuffer: (glHandle, framebuffer) => { + blitFramebuffer: (glHandle, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter) => { const gl = this.canvasContextHandles[glHandle]; - gl.bindFramebuffer(gl.FRAMEBUFFER, this.framebufferHandles[framebuffer]); + gl.blitFramebuffer(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); }, - createFramebuffer: (glHandle) => { + createSampler: (glHandle) => { const gl = this.canvasContextHandles[glHandle]; - const fb = gl.createFramebuffer(); - this.framebufferHandleIds++; - this.framebufferHandles[this.framebufferHandleIds] = fb; - - return this.framebufferHandleIds; + const sampler = gl.createSampler(); + this.samplerIds++; + this.samplerHandles[this.samplerIds] = sampler; + return this.samplerIds; }, - framebufferTexture2D: (glHandle, target, attachment, textarget, texture, level) => { - const gl = this.canvasContextHandles[glHandle]; - const targetTexture = this.textureHandles[texture] - gl.framebufferTexture2D(target, attachment, textarget, targetTexture, level); - }, - checkFramebufferStatus: (glHandle, target) => { - const gl = this.canvasContextHandles[glHandle]; - return gl.checkFramebufferStatus(target); - }, - getError: (glHandle) => { - const gl = this.canvasContextHandles[glHandle]; - return gl.getError(); - }, - deleteFramebuffer: (glHandle, framebuffer) => { + createVertexArray: (glHandle) => { const gl = this.canvasContextHandles[glHandle]; - gl.deleteFramebuffer(this.framebufferHandles[framebuffer]); - delete this.framebufferHandles[framebuffer]; + const vao = gl.createVertexArray(); + this.vertexArrayIds++; + this.vertexArrayHandles[this.vertexArrayIds] = vao; + return this.vertexArrayIds; } }, window: { innerWidth: () => window.innerWidth, innerHeight: () => window.innerHeight, requestAnimationFrame: () => this.invokeRequestAnimationFrame(), - subscribeWindowResize: () => window.addEventListener('resize', (evt) => this.exports.Drawie.JSInterop.JSRuntime.WindowResized(window.innerWidth, window.innerHeight)) - + subscribeWindowResize: () => window.addEventListener('resize', this.invokeWindowResize) }, input: { subscribeKeyDown: () => { - window.addEventListener('keydown', (evt) => this.exports.Drawie.JSInterop.JSRuntime.OnKeyDown(evt.code)); + document.addEventListener('keydown', (event) => { + this.exports.Drawie.JSInterop.JSRuntime.OnKeyDown(event.key); + }); }, subscribeKeyUp: () => { - window.addEventListener('keyup', (evt) => this.exports.Drawie.JSInterop.JSRuntime.OnKeyUp(evt.code)); - } + document.addEventListener('keyup', (event) => { + this.exports.Drawie.JSInterop.JSRuntime.OnKeyUp(event.key); + }); + }, } }); } @@ -264,6 +390,13 @@ return requestId; } + invokeWindowResize() { + if (this.exports) { + this.exports.Drawie.JSInterop.JSRuntime.WindowResized(window.innerWidth, window.innerHeight); + } + } + async addDrawieExports() { this.exports = await globalThis.getDotnetRuntime(0).getAssemblyExports("Drawie.JSInterop"); - }} \ No newline at end of file + } +} \ No newline at end of file diff --git a/src/ShaderPlayground/Program.cs b/src/ShaderPlayground/Program.cs index c15c4d7..133a9dc 100644 --- a/src/ShaderPlayground/Program.cs +++ b/src/ShaderPlayground/Program.cs @@ -1,94 +1,59 @@ -using Drawie.Backend.Vertie.Rendering; +using Drawie.ShaderCompiler.Compilation; string code = """ - [__AttributeUsage(_AttributeTargets.Var)] - struct DragFloatAttribute + struct VertexInput { - string Description; - - float MinValue; - - float MaxValue; - - float Speed; + float3 vPos : POSITION; + float3 vNormal : NORMAL; + float2 vTexCoords : TEXCOORD0; }; - - struct Constants - { - float4x4 Projection; - - float4x4 View; - - float4x4 Model; - }; - - struct VSInput - { - float2 Position : POSITION0; - - float2 UV : TEXCOORD0; - - float4 Color : COLOR0; - }; - - struct VSOutput + + struct VertexOutput { - float4 Position : SV_POSITION; - - float2 UV : TEXCOORD0; - - float4 Color : COLOR0; + float4 position : SV_Position; + float3 fNormal : TEXCOORD0; + float3 fPos : TEXCOORD1; + float2 fTexCoords : TEXCOORD2; }; - - struct Block + + [[vk::binding(0, 0)]] + cbuffer Transform { - Constants Constants; - - Texture2D Texture; - - SamplerState Sampler; - - RWTexture2D OutputTexture; + float4x4 uModel; + float4x4 uView; + float4x4 uProjection; }; - - uniform ParameterBlock block; - - [DragFloat("Gamma", 0.0, 3.0, 0.1)] - uniform float Gamma; - - float3 SrgbToLinear(float3 srgb) - { - return srgb * (srgb * (srgb * 0.305306011 + 0.682171111) + 0.012522878); - } - + [shader("vertex")] - VSOutput VSMain(VSInput input) + VertexOutput VSMain(VertexInput input) { - float4x4 mvp = block.Constants.Projection * block.Constants.View * block.Constants.Model; - - VSOutput output; - - output.Position = mul(mvp, float4(input.Position, 0.0f, 1.0f)); - output.UV = input.UV; - output.Color = input.Color; - output.Color.rgb = SrgbToLinear(output.Color.rgb); - + VertexOutput output; + + output.position = mul( + mul( + mul(uProjection, uView), + uModel + ), + float4(input.vPos, 1.0) + ); + + output.fPos = mul( + uModel, + float4(input.vPos, 1.0) + ).xyz; + + float3x3 model3x3 = float3x3(uModel); + + output.fNormal = mul( + float3x3(uModel), + input.vNormal + ); + + output.fTexCoords = input.vTexCoords; + return output; } - - [shader("pixel")] - float4 PSMain(VSOutput input) : SV_TARGET - { - return input.Color * block.Texture.Sample(block.Sampler, input.UV); - } - - [shader("compute")] - [numthreads(8, 8, 1)] - void CSMain(uint3 DTid: SV_DispatchThreadID) - { - block.OutputTexture[DTid.xy] = float4(1.0f, 0.0f, 0.0f, 1.0f); - } """; -ShaderDefinition shaderDefinition = new ShaderDefinition(code); -shaderDefinition.Compile(); \ No newline at end of file +ShaderCompiler compiler = new ShaderCompiler("", "shader.slang"); +compiler.Compile(code, CompilationTarget.GlslEs3); \ No newline at end of file diff --git a/src/ShaderPlayground/ShaderPlayground.csproj b/src/ShaderPlayground/ShaderPlayground.csproj index 51ee286..132d643 100644 --- a/src/ShaderPlayground/ShaderPlayground.csproj +++ b/src/ShaderPlayground/ShaderPlayground.csproj @@ -9,6 +9,7 @@ + From fbcdb4e60aa7623386132d35845a2baca19bfd07 Mon Sep 17 00:00:00 2001 From: flabbet Date: Fri, 14 Aug 2026 13:10:03 +0200 Subject: [PATCH 17/55] some changes to webgl, but ill stop now --- src/Drawie.JSInterop/JSRuntime.WebGl.cs | 3 +++ src/Drawie.JSInterop/drawie.js | 16 ++++++++++++++++ src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs | 3 ++- .../WebGlRenderTarget.cs | 8 ++++++++ .../WebGlVertexArray.cs | 2 +- src/Drawie.sln.DotSettings.user | 2 ++ .../wwwroot/scripts/drawie.js | 19 +++++++++++++++++-- 7 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/Drawie.JSInterop/JSRuntime.WebGl.cs b/src/Drawie.JSInterop/JSRuntime.WebGl.cs index 4b433ad..36d6368 100644 --- a/src/Drawie.JSInterop/JSRuntime.WebGl.cs +++ b/src/Drawie.JSInterop/JSRuntime.WebGl.cs @@ -172,4 +172,7 @@ public static partial void BlitFramebuffer(int gl, int srcX0, int srcY0, int src [JSImport("webgl.framebufferRenderbuffer", "drawie.js")] public static partial void FramebufferRenderbuffer(int gl, int target, int attachment, int renderbufferTarget, int renderbuffer); + + [JSImport("webgl.getContext", "drawie.js")] + public static partial int GetContext(string canvasId, string ctx); } diff --git a/src/Drawie.JSInterop/drawie.js b/src/Drawie.JSInterop/drawie.js index 8872e00..35dc97d 100644 --- a/src/Drawie.JSInterop/drawie.js +++ b/src/Drawie.JSInterop/drawie.js @@ -1,5 +1,6 @@ export class Drawie { canvasContextHandles = {}; + canvasContextIds = 0; shaderHandleIds = 0; shaderHandles = {}; @@ -75,6 +76,10 @@ }, bindFramebuffer: (handleId, target, framebuffer) => { const gl = this.canvasContextHandles[handleId]; + if(framebuffer === 0) { + gl.bindFramebuffer(target, null); + return; + } const fb = this.framebufferHandles[framebuffer]; gl.bindFramebuffer(target, fb); }, @@ -263,6 +268,17 @@ const rb = this.renderbufferHandles[renderbuffer]; gl.framebufferRenderbuffer(target, attachment, renderbufferTarget, rb); }, + getContext: (canvasId, contextType) => { + const canvas = document.getElementById(canvasId); + if (!canvas) { + return null; + } + + const handle = canvas.getContext(contextType); + this.canvasContextIds++; + this.canvasContextHandles[this.canvasContextIds] = handle; + return this.canvasContextIds; + }, openSkiaContext: (canvasId) => { const contextAttributes = { alpha: 1, diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs index 12df03f..53ae8ce 100644 --- a/src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlCap.cs @@ -9,5 +9,6 @@ public enum WebGlCap SampleAlphaToCoverage = 0x809E, SampleCoverage = 0x80A0, ScissorTest = 0x0C11, - StencilTest = 0x0B90 + StencilTest = 0x0B90, + CullFace = 0x0B44, } \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlRenderTarget.cs b/src/Drawie.RenderApi.WebGl/WebGlRenderTarget.cs index 5ba5151..98c695a 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlRenderTarget.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlRenderTarget.cs @@ -16,6 +16,13 @@ public class WebGlRenderTarget : IRenderTarget, IWebGlTexture, IDisposable private WebGlTexture texture; private WebGlDepthBuffer depthBuffer; + public WebGlRenderTarget(int gl, int id, VecI framebufferSize) + { + Gl = gl; + FramebufferId = (uint)id; + Size = framebufferSize; + } + public WebGlRenderTarget(int gl, int width, int height, DepthFormat depth) { Gl = gl; @@ -59,6 +66,7 @@ public WebGlRenderTarget(int gl, int width, int height, DepthFormat depth) public void Dispose() { texture.Dispose(); + depthBuffer.Dispose(); JSRuntime.DeleteFramebuffer(Gl, (int)FramebufferId); } diff --git a/src/Drawie.RenderApi.WebGl/WebGlVertexArray.cs b/src/Drawie.RenderApi.WebGl/WebGlVertexArray.cs index 9690307..305beb2 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlVertexArray.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlVertexArray.cs @@ -20,7 +20,7 @@ public void Open(Action list) { JSRuntime.BindVertexArray(Gl, (int)Handle); list(bufferList); - JSRuntime.BindVertexArray(Gl, 0); + //JSRuntime.BindVertexArray(Gl, 0); } } diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 7dd44e0..ea88462 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -33,10 +33,12 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/DrawieSample.Browser/wwwroot/scripts/drawie.js b/src/DrawieSample.Browser/wwwroot/scripts/drawie.js index 3743cf2..35218df 100644 --- a/src/DrawieSample.Browser/wwwroot/scripts/drawie.js +++ b/src/DrawieSample.Browser/wwwroot/scripts/drawie.js @@ -1,5 +1,6 @@ export class Drawie { canvasContextHandles = {}; + canvasContextIds = 0; shaderHandleIds = 0; shaderHandles = {}; @@ -75,6 +76,10 @@ }, bindFramebuffer: (handleId, target, framebuffer) => { const gl = this.canvasContextHandles[handleId]; + if(framebuffer === 0) { + gl.bindFramebuffer(target, null); + return; + } const fb = this.framebufferHandles[framebuffer]; gl.bindFramebuffer(target, fb); }, @@ -145,7 +150,7 @@ return; } - const array = target === 0x8893 ? new Uint16Array(dataOrSize) : new Float32Array(dataOrSize); + const array = target === 0x8893 ? new Uint8Array(dataOrSize) : new Float32Array(dataOrSize); gl.bufferData(target, array, usage); }, bindBufferBase: (glHandle, target, index, buffer) => { @@ -153,7 +158,6 @@ const bufferObj = this.bufferHandles[buffer]; gl.bindBufferBase(target, index, bufferObj); }, - bufferSubData: (glHandle, target, dstByteOffset, srcData) => { const gl = this.canvasContextHandles[glHandle]; @@ -264,6 +268,17 @@ const rb = this.renderbufferHandles[renderbuffer]; gl.framebufferRenderbuffer(target, attachment, renderbufferTarget, rb); }, + getContext: (canvasId, contextType) => { + const canvas = document.getElementById(canvasId); + if (!canvas) { + return null; + } + + const handle = canvas.getContext(contextType); + this.canvasContextIds++; + this.canvasContextHandles[this.canvasContextIds] = handle; + return this.canvasContextIds; + }, openSkiaContext: (canvasId) => { const contextAttributes = { alpha: 1, From 46e15025b94a5f273608d7b37d2430ede1f7158f Mon Sep 17 00:00:00 2001 From: flabbet Date: Fri, 14 Aug 2026 21:46:12 +0200 Subject: [PATCH 18/55] vulkan first draft --- .../Bridge/Operations/IImageImplementation.cs | 3 +- src/Drawie.Backend.Core/NativeTexture.cs | 4 +- .../Surfaces/DrawingSurface.cs | 5 - .../Surfaces/IFramebufferInfo.cs | 2 +- .../Surfaces/ImageData/Image.cs | 2 + .../SkiaImageImplementation.cs | 12 +- .../SkiaSurfaceImplementation.cs | 1 + .../SkiaFramebufferInfo.cs | 2 +- src/Drawie.Backend.Vertie/Core/Mesh.cs | 2 +- .../Directory.Build.props | 2 +- .../Helpers/TextureFramebufferExtensions.cs | 10 +- .../Shaders/BasicVertex.slang | 52 +- .../Shaders/BasicVertex.slang.bak | 52 ++ src/Drawie.Backend.Vertie/Shaders/Unlit.slang | 15 +- .../Shaders/Unlit.slang.bak | 15 + src/Drawie.Host.Glfw/GlfwHost.cs | 2 +- .../Vk/VulkanContent.cs | 6 +- src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs | 2 +- .../OpenGlCommandList.cs | 6 +- src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 5 +- .../OpenGlGraphicsContext.cs | 9 +- .../OpenGlRenderTarget.cs | 8 +- .../Buffers/BufferObject.cs | 10 +- .../Buffers/IndexBuffer.cs | 5 +- .../Buffers/StagingBuffer.cs | 5 +- .../Buffers/UniformBuffer.cs | 5 +- .../Buffers/VertexBuffer.cs | 5 +- .../Buffers/VulkanImageAttachment.cs | 283 +++++++++++ .../Buffers/VulkanTexture.cs | 268 ++++------- .../Builders/GraphicsPipelineBuilder.cs | 29 +- .../Builders/GraphicsPipelineStageBuilder.cs | 25 +- .../VulkanBufferGroup.cs | 18 + .../VulkanBufferGroupList.cs | 16 + .../VulkanCommandList.cs | 455 ++++++++++++++++++ src/Drawie.RenderApi.Vulkan/VulkanContext.cs | 24 +- .../VulkanGraphicsDevice.cs | 198 ++++++++ .../VulkanHostViewRenderApi.cs | 23 +- src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs | 62 +++ .../VulkanRecordedRenderPass.cs | 71 +++ .../VulkanRenderApi.cs | 15 +- .../VulkanRenderTarget.cs | 17 + src/Drawie.RenderApi.Vulkan/VulkanSampler.cs | 65 +++ .../VulkanShaderProgram.cs | 182 +++++++ .../VulkanStorageBuffer.cs | 14 + src/Drawie.RenderApi.WebGl/WebGlBuffer.cs | 2 +- .../Abstraction/Buffers/BufferUsage.cs | 2 + .../Abstraction/Buffers/IBuffer.cs | 2 +- .../CommandRecording/CommandList.cs | 9 +- .../CommandRecording/RecordedRenderPass.cs | 11 +- .../RenderTargets/IRenderTarget.cs | 2 +- src/Drawie.RenderApi/IGraphicsContext.cs | 1 - src/Drawie.RenderApi/IVulkanRenderApi.cs | 2 + src/Drawie.Rendering/IGraphicsStore.cs | 5 - src/Drawie.Rendering/Texture.cs | 27 +- src/Drawie.Rendering/TextureFramebuffer.cs | 2 +- src/Drawie.sln.DotSettings.user | 3 + src/Drawie2Sample/Cub.cs | 59 --- src/Drawie2Sample/Drawie2SampleApp.cs | 3 +- src/DrawieSample.Desktop/Program.cs | 2 +- 59 files changed, 1734 insertions(+), 410 deletions(-) create mode 100644 src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang.bak create mode 100644 src/Drawie.Backend.Vertie/Shaders/Unlit.slang.bak create mode 100644 src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanBufferGroup.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanBufferGroupList.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanRecordedRenderPass.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanSampler.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanStorageBuffer.cs delete mode 100644 src/Drawie2Sample/Cub.cs diff --git a/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs b/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs index b1a2b24..1f4b0de 100644 --- a/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs +++ b/src/Drawie.Backend.Core/Bridge/Operations/IImageImplementation.cs @@ -10,7 +10,6 @@ public interface IImageImplementation { public Image Snapshot(DrawingSurface drawingSurface); public Image Snapshot(DrawingSurface drawingSurface, RectI bounds); - public Image? TextureSnapshot(DrawingSurface drawingSurface); public void DisposeImage(Image image); public Image? FromEncodedData(string path); public Image? FromEncodedData(byte[] dataBytes); @@ -31,6 +30,8 @@ public Shader ToShader(IntPtr objectPointer, TileMode tileX, TileMode tileY, Sam public Shader ToRawShader(IntPtr objectPointer); public Shader? ToShader(IntPtr objectPointer, TileMode clamp, TileMode tileMode, Matrix3X3 fillMatrixValue); public uint GetUniqueId(IntPtr objectPointer); + /* public ulong? GetTextureId(IntPtr objectPointer); + */ } } diff --git a/src/Drawie.Backend.Core/NativeTexture.cs b/src/Drawie.Backend.Core/NativeTexture.cs index 0ac1fb0..cf913f4 100644 --- a/src/Drawie.Backend.Core/NativeTexture.cs +++ b/src/Drawie.Backend.Core/NativeTexture.cs @@ -1,6 +1,5 @@ using Drawie.Backend.Core.Bridge; using Drawie.Backend.Core.ColorsImpl; -using Drawie.Backend.Core.ColorsImpl.Paintables; using Drawie.Backend.Core.Surfaces; using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; @@ -412,8 +411,7 @@ public void SaveToDesktop() } #endif - public uint FramebufferId => + public ulong FramebufferId => DrawingBackendApi.Current.SurfaceImplementation.GetFramebufferInfo(DrawingSurface.ObjectPointer) ?.FramebufferId ?? throw new Exception("Framebuffer info not available."); - } \ No newline at end of file diff --git a/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs b/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs index 54a0e76..ec410bd 100644 --- a/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs +++ b/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs @@ -46,11 +46,6 @@ public Image Snapshot() return DrawingBackendApi.Current.ImageImplementation.Snapshot(this); } - public Image? TextureSnapshot() - { - return DrawingBackendApi.Current.ImageImplementation.TextureSnapshot(this); - } - public Image Snapshot(RectI bounds) { return DrawingBackendApi.Current.ImageImplementation.Snapshot(this, bounds); diff --git a/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs b/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs index 2933d01..661f783 100644 --- a/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs +++ b/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs @@ -2,5 +2,5 @@ namespace Drawie.Backend.Core.Surfaces; public interface IFramebufferInfo { - public uint FramebufferId { get; } + public ulong FramebufferId { get; } } \ No newline at end of file diff --git a/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs b/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs index 4725ea0..4f47b74 100644 --- a/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs +++ b/src/Drawie.Backend.Core/Surfaces/ImageData/Image.cs @@ -27,7 +27,9 @@ public class Image : NativeObject, ICloneable, IPixelsMap public VecI Size => new VecI(Width, Height); public bool IsDisposed => isDisposed; + /* public ulong TextureId => DrawingBackendApi.Current.ImageImplementation.GetTextureId(ObjectPointer).Value; + */ private bool isDisposed; diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs index b821312..c135bdb 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs @@ -20,7 +20,9 @@ public class SkiaImageImplementation : SkObjectImplementation, IImageIm private readonly SkiaPixmapImplementation _pixmapImplementation; private SkiaSurfaceImplementation _surfaceImplementation; private SkiaShaderImplementation shaderImpl; + /* private Dictionary textureInfos = new Dictionary(); + */ private Dictionary nonSkiaEncoders = new Dictionary() { @@ -58,7 +60,7 @@ public Image Snapshot(DrawingSurface drawingSurface, RectI bounds) return new Image(snapshot.Handle); } - public Image? TextureSnapshot(DrawingSurface drawingSurface) + /*public Image? TextureSnapshot(DrawingSurface drawingSurface) { var surface = _surfaceImplementation![drawingSurface.ObjectPointer]; @@ -73,7 +75,7 @@ public Image Snapshot(DrawingSurface drawingSurface, RectI bounds) } SKImage? snapshot = CreateFromFramebuffer(skiaFramebufferInfo, size, SurfaceOrigin.BottomLeft, out var textureInfo); - if (snapshot == null) return null;*/ + if (snapshot == null) return null;#1# var nativeTexture =_surfaceImplementation.GraphicsDevice.CreateTexture(new TextureDesc() { @@ -132,7 +134,7 @@ public Image Snapshot(DrawingSurface drawingSurface, RectI bounds) (GRSurfaceOrigin)origin, SKColorType.Rgba8888, SKAlphaType.Premul); - } + }*/ internal SKImage? CreateFromFramebuffer(SkiaFramebufferInfo skiaFramebufferInfo, VecI size, SurfaceOrigin surfaceOrigin, out ITexture fbInfo) { @@ -179,7 +181,9 @@ public Image Snapshot(DrawingSurface drawingSurface, RectI bounds) public void DisposeImage(Image image) { UnmanageAndDispose(image.ObjectPointer); + /* textureInfos.Remove(image.ObjectPointer); + */ } public Image? FromEncodedData(string path) @@ -322,6 +326,7 @@ public uint GetUniqueId(IntPtr objectPointer) return this[objectPointer].UniqueId; } + /* public ulong? GetTextureId(IntPtr objectPointer) { if (textureInfos.TryGetValue(objectPointer, out var info)) @@ -331,6 +336,7 @@ public uint GetUniqueId(IntPtr objectPointer) return null; } + */ public object GetNativeImage(IntPtr objectPointer) { diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index a34ea73..b16ee5b 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -32,6 +32,7 @@ public SkiaSurfaceImplementation(GRContext context, SurfaceOrigin surfaceOrigin, _canvasImplementation = canvasImplementation; _paintImplementation = paintImplementation; GrContext = context; + defaultSurfaceOrigin = surfaceOrigin; } public Pixmap PeekPixels(DrawingSurface drawingSurface) diff --git a/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs b/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs index c406a0d..33856fd 100644 --- a/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs +++ b/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs @@ -21,5 +21,5 @@ public SkiaFramebufferInfo(GRBackendRenderTarget backendRenderTarget, GRGlFrameb GlFramebufferInfo = grGlFramebufferInfo; } - public uint FramebufferId => target.GetGlFramebufferInfo().FramebufferObjectId; + public ulong FramebufferId => VkImageInfo?.Image ?? target.GetGlFramebufferInfo().FramebufferObjectId; } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Core/Mesh.cs b/src/Drawie.Backend.Vertie/Core/Mesh.cs index 4912193..9dfd06a 100644 --- a/src/Drawie.Backend.Vertie/Core/Mesh.cs +++ b/src/Drawie.Backend.Vertie/Core/Mesh.cs @@ -51,7 +51,7 @@ internal void GenerateBuffers(IGraphicsDevice device) { list.Buffers.AddRange( device.CreateBuffer(BufferUsage.Vertex, CreateVertexData()), - device.CreateBuffer(BufferUsage.Index, indicies)); + device.CreateBuffer(BufferUsage.Index, indicies)); } ); diff --git a/src/Drawie.Backend.Vertie/Directory.Build.props b/src/Drawie.Backend.Vertie/Directory.Build.props index e78a491..da53da9 100644 --- a/src/Drawie.Backend.Vertie/Directory.Build.props +++ b/src/Drawie.Backend.Vertie/Directory.Build.props @@ -1,7 +1,7 @@ $(ProjectDir)Shaders - true + false diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index a4261ba..82bbc64 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -70,12 +70,12 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came cmdList.SetBuffers(mesh.Buffers); - material.Use(camera); - material.PrepareForObject(mesh.Transform); + //material.Use(camera); + //material.PrepareForObject(mesh.Transform); - shader.UpdateUniforms(material.Properties.Values.ToList()); + //shader.UpdateUniforms(material.Properties.Values.ToList()); - for (var i = 0; i < material.Textures.Count; i++) + /*for (var i = 0; i < material.Textures.Count; i++) { var materialTexture = material.Textures[i]; var sampler = cachedSamplers.GetValueOrDefault(materialTexture); @@ -86,7 +86,7 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came } cmdList.BindTexture(materialTexture, sampler); - } + }*/ cmdList.DrawIndexed(mesh.IndexCount); var recordedRenderPass = cmdList.EndRenderPass(fb); diff --git a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang index 46a3771..28b540e 100644 --- a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang +++ b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang @@ -1,52 +1,20 @@ -struct VertexInput -{ - float3 vPos : POSITION; - float3 vNormal : NORMAL; - float2 vTexCoords : TEXCOORD0; -}; - struct VertexOutput { - float4 position : SV_Position; - float3 fNormal : TEXCOORD0; - float3 fPos : TEXCOORD1; - float2 fTexCoords : TEXCOORD2; -}; - -[[vk::binding(0, 0)]] -cbuffer Transform -{ - float4x4 uModel; - float4x4 uView; - float4x4 uProjection; + float4 position : SV_Position; }; [shader("vertex")] -VertexOutput VSMain(VertexInput input) +VertexOutput VSMain(uint vertexId : SV_VertexID) { - VertexOutput output; - - output.position = mul( - mul( - mul(uProjection, uView), - uModel - ), - float4(input.vPos, 1.0) - ); - - output.fPos = mul( - uModel, - float4(input.vPos, 1.0) - ).xyz; + float2 positions[3] = + { + float2(-0.5, -0.5), + float2( 0.5, -0.5), + float2( 0.0, 0.5) + }; - float3x3 model3x3 = float3x3(uModel); - - output.fNormal = mul( - float3x3(uModel), - input.vNormal - ); - - output.fTexCoords = input.vTexCoords; + VertexOutput output; + output.position = float4(positions[vertexId], 0.0, 1.0); return output; } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang.bak b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang.bak new file mode 100644 index 0000000..46a3771 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang.bak @@ -0,0 +1,52 @@ +struct VertexInput +{ + float3 vPos : POSITION; + float3 vNormal : NORMAL; + float2 vTexCoords : TEXCOORD0; +}; + +struct VertexOutput +{ + float4 position : SV_Position; + float3 fNormal : TEXCOORD0; + float3 fPos : TEXCOORD1; + float2 fTexCoords : TEXCOORD2; +}; + +[[vk::binding(0, 0)]] +cbuffer Transform +{ + float4x4 uModel; + float4x4 uView; + float4x4 uProjection; +}; + +[shader("vertex")] +VertexOutput VSMain(VertexInput input) +{ + VertexOutput output; + + output.position = mul( + mul( + mul(uProjection, uView), + uModel + ), + float4(input.vPos, 1.0) + ); + + output.fPos = mul( + uModel, + float4(input.vPos, 1.0) + ).xyz; + + float3x3 model3x3 = float3x3(uModel); + + output.fNormal = mul( + float3x3(uModel), + input.vNormal + ); + + output.fTexCoords = input.vTexCoords; + + return output; +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang index 841504d..254fd2d 100644 --- a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang +++ b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang @@ -1,16 +1,5 @@ -struct FragmentInput -{ - float3 fNormal : TEXCOORD0; - float3 fPos : TEXCOORD1; - float2 fTexCoords : TEXCOORD2; -}; - -[[vk::binding(0, 0)]] -Sampler2D uTexture; - [shader("fragment")] -float4 PSMain(FragmentInput input) : SV_Target +float4 PSMain() : SV_Target { - return float4(1, 0, 0, 1); - //return uTexture.Sample(input.fTexCoords); + return float4(1.0, 0.0, 1.0, 1.0); } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang.bak b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang.bak new file mode 100644 index 0000000..3691d88 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang.bak @@ -0,0 +1,15 @@ +struct FragmentInput +{ + float3 fNormal : TEXCOORD0; + float3 fPos : TEXCOORD1; + float2 fTexCoords : TEXCOORD2; +}; + +[[vk::binding(0, 0)]] +Sampler2D uTexture; + +[shader("fragment")] +float4 PSMain(FragmentInput input) : SV_Target +{ + return uTexture.Sample(input.fTexCoords); +} \ No newline at end of file diff --git a/src/Drawie.Host.Glfw/GlfwHost.cs b/src/Drawie.Host.Glfw/GlfwHost.cs index 9480382..2a8ac85 100644 --- a/src/Drawie.Host.Glfw/GlfwHost.cs +++ b/src/Drawie.Host.Glfw/GlfwHost.cs @@ -184,7 +184,7 @@ private void RenderApiOnFramebufferResized() private void CreateRenderTarget(VecI size, ITexture nativeRenderTexture) { - renderTexture = store.CreateNativeRenderSurface(size, nativeRenderTexture, SurfaceOrigin.BottomLeft); + renderTexture = store.CreateNativeRenderSurface(size, nativeRenderTexture, RenderApi is IVulkanHostViewRenderApi ? SurfaceOrigin.TopLeft : SurfaceOrigin.BottomLeft); } private void WindowOnFramebufferResize(Vector2D newSize) diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs index cc238f5..21ec76e 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs @@ -30,8 +30,7 @@ public void Render(VulkanImage image) var commandBuffer = context.Pool.CreateCommandBuffer(); commandBuffer.BeginRecording(); - texture.TransitionLayoutTo(commandBuffer.InternalHandle, ImageLayout.ColorAttachmentOptimal, - ImageLayout.TransferSrcOptimal); + texture.ColorAttachment.TransitionLayout(ImageLayout.TransferSrcOptimal, commandBuffer.InternalHandle); image.TransitionLayout(commandBuffer.InternalHandle, ImageLayout.TransferDstOptimal, AccessFlags.TransferWriteBit); @@ -65,8 +64,7 @@ public void Render(VulkanImage image) commandBuffer.Submit(); - texture.TransitionLayoutTo((uint)ImageLayout.TransferSrcOptimal, - (uint)ImageLayout.ColorAttachmentOptimal); + texture.ColorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal, commandBuffer.InternalHandle); } public void CreateTextureImage(VecI size) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs b/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs index dbc7e04..5923985 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlBuffer.cs @@ -9,7 +9,7 @@ public class OpenGlBuffer : IBuffer where TData : unmanaged { public uint NativeHandle => openglHandle; public BufferUsage Usage { get; } - public uint Size { get; } + public ulong Size { get; } private uint openglHandle; private GL api; diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index b67d0f9..4f66d20 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -26,7 +26,7 @@ public override void BeginRenderPass(IRenderTarget fb) RecordInstruction(() => { originalFb = (uint)Api.GetInteger(GLEnum.FramebufferBinding); - Api.BindFramebuffer(FramebufferTarget.Framebuffer, fb.FramebufferId); + Api.BindFramebuffer(FramebufferTarget.Framebuffer, (uint)fb.FramebufferId); }); } @@ -61,8 +61,8 @@ public override RecordedRenderPass EndRenderPass(IRenderTarget blitTo) { RecordInstruction(() => { - Api.BindFramebuffer(FramebufferTarget.ReadFramebuffer, source.FramebufferId); - Api.BindFramebuffer(FramebufferTarget.DrawFramebuffer, blitTo.FramebufferId); + Api.BindFramebuffer(FramebufferTarget.ReadFramebuffer, (uint)source.FramebufferId); + Api.BindFramebuffer(FramebufferTarget.DrawFramebuffer, (uint)blitTo.FramebufferId); Api.BlitFramebuffer( 0, 0, source.Size.X, source.Size.Y, 0, 0, blitTo.Size.X, blitTo.Size.Y, diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index 41e32b8..636017b 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -50,10 +50,7 @@ public ISampler CreateSampler(SamplerDesc desc) public void Submit(RecordedRenderPass recordedRenderPass) { - foreach (var instruction in recordedRenderPass.Instructions) - { - instruction.Invoke(); - } + recordedRenderPass.Execute(); } public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs index 42ca087..d9ba368 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs @@ -8,11 +8,11 @@ public class OpenGlGraphicsContext(GL api, IGLContext glContext) : IGraphicsCont { public readonly IGLContext GlContext = glContext; public readonly GL Api = api; - private HashSet ownedTextures = new HashSet(); + private Dictionary ownedTextures = new Dictionary(); public bool OwnsTexture(ITexture nativeTexture) { - return nativeTexture is OpenGlTexture glTexture && ownedTextures.Contains(glTexture.TextureId); + return nativeTexture is OpenGlTexture glTexture && ownedTextures.ContainsKey(glTexture.TextureId); } public void MakeCurrent() @@ -22,7 +22,8 @@ public void MakeCurrent() public OpenGlTexture CreateTexture(uint id, int width, int height) { - ownedTextures.Add(id); - return new OpenGlTexture(id, Api, width, height); + var tex = new OpenGlTexture(id, Api, width, height); + ownedTextures.Add(id, tex); + return tex; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs index 3e89eda..b95c873 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs @@ -10,7 +10,7 @@ public sealed class OpenGlRenderTarget : IDisposable, IRenderTarget public OpenGlTexture Color { get; } public OpenGlDepthBuffer? Depth { get; } - public uint FramebufferId { get; } + public ulong FramebufferId { get; } public VecI Size => new VecI(Width, Height); public int Width => Color.Width; @@ -41,7 +41,7 @@ public OpenGlRenderTarget( Api.BindFramebuffer( FramebufferTarget.Framebuffer, - FramebufferId); + (uint)FramebufferId); Api.FramebufferTexture2D( FramebufferTarget.Framebuffer, @@ -77,12 +77,12 @@ public void Bind() { Api.BindFramebuffer( FramebufferTarget.Framebuffer, - FramebufferId); + (uint)FramebufferId); } public void Dispose() { - Api.DeleteFramebuffer(FramebufferId); + Api.DeleteFramebuffer((uint)FramebufferId); Depth?.Dispose(); Color.Dispose(); diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/BufferObject.cs b/src/Drawie.RenderApi.Vulkan/Buffers/BufferObject.cs index 09219f8..79b8beb 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/BufferObject.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/BufferObject.cs @@ -1,15 +1,17 @@ -using Drawie.RenderApi.Vulkan.Exceptions; +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Vulkan.Exceptions; using Silk.NET.Vulkan; using Buffer = Silk.NET.Vulkan.Buffer; namespace Drawie.RenderApi.Vulkan.Buffers; -public class BufferObject : IDisposable +public class BufferObject : IDisposable, IBuffer { public ulong Size { get; set; } public Buffer VkBuffer => vkBuffer; public DeviceMemory VkBufferMemory => vkBufferMemory; + public BufferUsage Usage { get; } private Silk.NET.Vulkan.Buffer vkBuffer = default; private DeviceMemory vkBufferMemory = default; @@ -20,12 +22,13 @@ public class BufferObject : IDisposable protected unsafe BufferObject(Vk vk, Device device, PhysicalDevice physicalDevice, ulong size, BufferUsageFlags usage, - MemoryPropertyFlags properties) + MemoryPropertyFlags properties, BufferUsage purpose) { Size = size; this.vk = vk; this.device = device; this.physicalDevice = physicalDevice; + Usage = purpose; BufferCreateInfo bufferInfo = new() { @@ -87,4 +90,5 @@ public unsafe void Dispose() vk!.DestroyBuffer(device, vkBuffer, null); vk!.FreeMemory(device, vkBufferMemory, null); } + } \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/IndexBuffer.cs b/src/Drawie.RenderApi.Vulkan/Buffers/IndexBuffer.cs index 5d812a6..64499fc 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/IndexBuffer.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/IndexBuffer.cs @@ -1,11 +1,12 @@ -using Silk.NET.Vulkan; +using Drawie.RenderApi.Abstraction.Buffers; +using Silk.NET.Vulkan; namespace Drawie.RenderApi.Vulkan.Buffers; public class IndexBuffer : BufferObject { public IndexBuffer(Vk vk, Device device, PhysicalDevice physicalDevice, ulong size) - : base(vk, device, physicalDevice, size, BufferUsageFlags.TransferDstBit | BufferUsageFlags.IndexBufferBit, MemoryPropertyFlags.DeviceLocalBit) + : base(vk, device, physicalDevice, size, BufferUsageFlags.TransferDstBit | BufferUsageFlags.IndexBufferBit, MemoryPropertyFlags.DeviceLocalBit, BufferUsage.Index) { } diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/StagingBuffer.cs b/src/Drawie.RenderApi.Vulkan/Buffers/StagingBuffer.cs index 3bf0c74..63958d8 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/StagingBuffer.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/StagingBuffer.cs @@ -1,4 +1,5 @@ -using Silk.NET.Vulkan; +using Drawie.RenderApi.Abstraction.Buffers; +using Silk.NET.Vulkan; namespace Drawie.RenderApi.Vulkan.Buffers; @@ -9,7 +10,7 @@ public StagingBuffer(VulkanContext context, ulong size) : this(context.Api!, con } public StagingBuffer(Vk vk, Device device, PhysicalDevice physicalDevice, ulong size) : base(vk, device, physicalDevice, size, BufferUsageFlags.TransferSrcBit, -MemoryPropertyFlags.HostVisibleBit | MemoryPropertyFlags.HostCoherentBit) +MemoryPropertyFlags.HostVisibleBit | MemoryPropertyFlags.HostCoherentBit, BufferUsage.Transfer) { } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/UniformBuffer.cs b/src/Drawie.RenderApi.Vulkan/Buffers/UniformBuffer.cs index 9dc4339..05a079d 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/UniformBuffer.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/UniformBuffer.cs @@ -1,10 +1,11 @@ -using Silk.NET.Vulkan; +using Drawie.RenderApi.Abstraction.Buffers; +using Silk.NET.Vulkan; namespace Drawie.RenderApi.Vulkan.Buffers; public class UniformBuffer : BufferObject { - public UniformBuffer(Vk vk, Device device, PhysicalDevice physicalDevice, ulong size) : base(vk, device, physicalDevice, size, BufferUsageFlags.UniformBufferBit, MemoryPropertyFlags.HostVisibleBit | MemoryPropertyFlags.HostCoherentBit) + public UniformBuffer(Vk vk, Device device, PhysicalDevice physicalDevice, ulong size) : base(vk, device, physicalDevice, size, BufferUsageFlags.UniformBufferBit, MemoryPropertyFlags.HostVisibleBit | MemoryPropertyFlags.HostCoherentBit, BufferUsage.Uniform) { } diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VertexBuffer.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VertexBuffer.cs index 4bc26d5..2fe54b5 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VertexBuffer.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VertexBuffer.cs @@ -1,10 +1,11 @@ -using Silk.NET.Vulkan; +using Drawie.RenderApi.Abstraction.Buffers; +using Silk.NET.Vulkan; namespace Drawie.RenderApi.Vulkan.Buffers; public class VertexBuffer : BufferObject { - public VertexBuffer(Vk vk, Device device, PhysicalDevice physicalDevice, ulong size) : base(vk, device, physicalDevice, size, BufferUsageFlags.TransferDstBit | BufferUsageFlags.VertexBufferBit, MemoryPropertyFlags.DeviceLocalBit) + public VertexBuffer(Vk vk, Device device, PhysicalDevice physicalDevice, ulong size) : base(vk, device, physicalDevice, size, BufferUsageFlags.TransferDstBit | BufferUsageFlags.VertexBufferBit, MemoryPropertyFlags.DeviceLocalBit, BufferUsage.Vertex) { } diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs new file mode 100644 index 0000000..d6d5441 --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs @@ -0,0 +1,283 @@ +using Drawie.RenderApi.Vulkan.Exceptions; +using Drawie.RenderApi.Vulkan.Helpers; +using Silk.NET.Vulkan; +using Image = Silk.NET.Vulkan.Image; + +namespace Drawie.RenderApi.Vulkan.Buffers; + +public sealed unsafe class VulkanImageAttachment : IDisposable +{ + private readonly Vk vk; + private readonly Device device; + private readonly PhysicalDevice physicalDevice; + private readonly CommandPool commandPool; + private readonly Queue graphicsQueue; + + public Image Image { get; private set; } + public DeviceMemory Memory { get; private set; } + public ImageView View { get; private set; } + + public Format Format { get; } + public uint Width { get; } + public uint Height { get; } + public ImageAspectFlags AspectMask { get; } + public ImageUsageFlags Usage { get; } + + public ImageLayout Layout { get; private set; } = ImageLayout.Undefined; + + public VulkanImageAttachment( + Vk vk, + Device device, + PhysicalDevice physicalDevice, + CommandPool commandPool, + Queue graphicsQueue, + uint width, + uint height, + Format format, + ImageUsageFlags usage, + ImageAspectFlags aspectMask) + { + this.vk = vk; + this.device = device; + this.physicalDevice = physicalDevice; + this.commandPool = commandPool; + this.graphicsQueue = graphicsQueue; + + Width = width; + Height = height; + Format = format; + Usage = usage; + AspectMask = aspectMask; + + CreateImage(); + AllocateMemory(); + CreateView(); + } + + private void CreateImage() + { + ImageCreateInfo imageInfo = new() + { + SType = StructureType.ImageCreateInfo, + ImageType = ImageType.Type2D, + Extent = new Extent3D(Width, Height, 1), + MipLevels = 1, + ArrayLayers = 1, + Format = Format, + Tiling = ImageTiling.Optimal, + InitialLayout = ImageLayout.Undefined, + Usage = Usage, + Samples = SampleCountFlags.Count1Bit, + SharingMode = SharingMode.Exclusive + }; + + if (vk.CreateImage(device, &imageInfo, null, out var img) != Result.Success) + throw new VulkanException("Failed to create image attachment."); + + Image = img; + } + + private void AllocateMemory() + { + vk.GetImageMemoryRequirements(device, Image, out var requirements); + + MemoryAllocateInfo allocInfo = new() + { + SType = StructureType.MemoryAllocateInfo, + AllocationSize = requirements.Size, + MemoryTypeIndex = BufferObject.FindMemoryType( + vk, + physicalDevice, + requirements.MemoryTypeBits, + MemoryPropertyFlags.DeviceLocalBit) + }; + + if (vk.AllocateMemory(device, &allocInfo, null, out var memory) != Result.Success) + throw new VulkanException("Failed to allocate image attachment memory."); + + Memory = memory; + + if (vk.BindImageMemory(device, Image, Memory, 0) != Result.Success) + throw new VulkanException("Failed to bind image attachment memory."); + } + + private void CreateView() + { + ImageViewCreateInfo viewInfo = new() + { + SType = StructureType.ImageViewCreateInfo, + Image = Image, + ViewType = ImageViewType.Type2D, + Format = Format, + SubresourceRange = new ImageSubresourceRange + { + AspectMask = AspectMask, + BaseMipLevel = 0, + LevelCount = 1, + BaseArrayLayer = 0, + LayerCount = 1 + } + }; + + if (vk.CreateImageView(device, &viewInfo, null, out var view) != Result.Success) + throw new VulkanException("Failed to create image attachment view."); + + View = view; + } + + public void TransitionLayout( + ImageLayout newLayout, + CommandBuffer? commandBuffer = null) + { + if (commandBuffer.HasValue) + { + TransitionLayout( + commandBuffer.Value, + Layout, + newLayout); + + Layout = newLayout; + return; + } + + using var session = new SingleTimeCommandBufferSession( + vk, + commandPool, + device, + graphicsQueue); + + TransitionLayout( + session.CommandBuffer, + Layout, + newLayout); + + Layout = newLayout; + } + + private void TransitionLayout( + CommandBuffer commandBuffer, + ImageLayout oldLayout, + ImageLayout newLayout) + { + var barrier = new ImageMemoryBarrier + { + SType = StructureType.ImageMemoryBarrier, + OldLayout = oldLayout, + NewLayout = newLayout, + SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, + DstQueueFamilyIndex = Vk.QueueFamilyIgnored, + Image = Image, + SubresourceRange = new ImageSubresourceRange + { + AspectMask = AspectMask, + BaseMipLevel = 0, + LevelCount = 1, + BaseArrayLayer = 0, + LayerCount = 1 + } + }; + + PipelineStageFlags sourceStage; + PipelineStageFlags destinationStage; + + switch (oldLayout) + { + case ImageLayout.Undefined: + barrier.SrcAccessMask = 0; + sourceStage = PipelineStageFlags.TopOfPipeBit; + break; + + case ImageLayout.ColorAttachmentOptimal: + barrier.SrcAccessMask = + AccessFlags.ColorAttachmentWriteBit; + sourceStage = + PipelineStageFlags.ColorAttachmentOutputBit; + break; + + case ImageLayout.DepthStencilAttachmentOptimal: + barrier.SrcAccessMask = + AccessFlags.DepthStencilAttachmentWriteBit; + sourceStage = + PipelineStageFlags.EarlyFragmentTestsBit | + PipelineStageFlags.LateFragmentTestsBit; + break; + + case ImageLayout.ShaderReadOnlyOptimal: + barrier.SrcAccessMask = + AccessFlags.ShaderReadBit; + sourceStage = + PipelineStageFlags.FragmentShaderBit; + break; + + default: + barrier.SrcAccessMask = AccessFlags.MemoryReadBit; + sourceStage = PipelineStageFlags.BottomOfPipeBit; + break; + } + + switch (newLayout) + { + case ImageLayout.ColorAttachmentOptimal: + barrier.DstAccessMask = + AccessFlags.ColorAttachmentWriteBit; + destinationStage = + PipelineStageFlags.ColorAttachmentOutputBit; + break; + + case ImageLayout.DepthStencilAttachmentOptimal: + barrier.DstAccessMask = + AccessFlags.DepthStencilAttachmentReadBit | + AccessFlags.DepthStencilAttachmentWriteBit; + + destinationStage = + PipelineStageFlags.EarlyFragmentTestsBit | + PipelineStageFlags.LateFragmentTestsBit; + break; + + case ImageLayout.ShaderReadOnlyOptimal: + barrier.DstAccessMask = + AccessFlags.ShaderReadBit; + destinationStage = + PipelineStageFlags.FragmentShaderBit; + break; + + default: + barrier.DstAccessMask = AccessFlags.MemoryReadBit; + destinationStage = PipelineStageFlags.BottomOfPipeBit; + break; + } + + vk.CmdPipelineBarrier( + commandBuffer, + sourceStage, + destinationStage, + 0, + 0, + null, + 0, + null, + 1, + &barrier); + } + + public void Dispose() + { + if (View.Handle != 0) + { + vk.DestroyImageView(device, View, null); + View = default; + } + + if (Image.Handle != 0) + { + vk.DestroyImage(device, Image, null); + Image = default; + } + + if (Memory.Handle != 0) + { + vk.FreeMemory(device, Memory, null); + Memory = default; + } + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index 3ae9d93..69252e6 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -1,4 +1,5 @@ using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.Vulkan.Exceptions; using Drawie.RenderApi.Vulkan.Helpers; using Silk.NET.Vulkan; @@ -9,9 +10,8 @@ namespace Drawie.RenderApi.Vulkan.Buffers; public class VulkanTexture : IDisposable, IVkTexture { - public ImageView ImageView { get; private set; } public Sampler Sampler => sampler; - public Image VkImage => textureImage; + public Image VkImage => colorAttachment.Image; private Vk Vk { get; } private Device LogicalDevice { get; } private PhysicalDevice PhysicalDevice { get; } @@ -21,21 +21,32 @@ public class VulkanTexture : IDisposable, IVkTexture private Queue GraphicsQueue { get; } public uint QueueFamily { get; } = 0; public uint ImageFormat { get; private set; } - public ulong ImageHandle => textureImage.Handle; + public ulong ImageHandle => colorAttachment.Image.Handle; public uint Tiling { get; } public uint UsageFlags { get; set; } - public uint Layout => ColorAttachmentOptimal; + public uint Layout => (uint)ImageLayout.ColorAttachmentOptimal; public uint TargetSharingMode { get; } = (uint)SharingMode.Exclusive; - public static uint ColorAttachmentOptimal => (uint)ImageLayout.ColorAttachmentOptimal; - public static uint ShaderReadOnlyOptimal => (uint)ImageLayout.ShaderReadOnlyOptimal; - public ulong TextureId => ImageHandle; + ulong ITexture.TextureId => ImageHandle; + public uint Width { get; } + public uint Height { get; } - private Image textureImage; - private DeviceMemory textureImageMemory; + public VulkanImageAttachment ColorAttachment => colorAttachment; + public VulkanImageAttachment? DepthAttachment => depthAttachment; + + private VulkanImageAttachment colorAttachment; + private VulkanImageAttachment? depthAttachment; private Sampler sampler; - public unsafe VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CommandPool commandPool, - Queue graphicsQueue, uint queueFamily, VecI size) + public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CommandPool commandPool, + Queue graphicsQueue, uint queueFamily, VecI size) : this(vk, logicalDevice, physicalDevice, commandPool, graphicsQueue, queueFamily, new TextureDesc() + { + Format = TextureFormat.RGBA8_Unorm, Depth = DepthFormat.NoDepth, Width = size.X, Height = size.Y, + }) + { + } + + public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CommandPool commandPool, + Queue graphicsQueue, uint queueFamily, TextureDesc desc) { Vk = vk; LogicalDevice = logicalDevice; @@ -43,44 +54,93 @@ public unsafe VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physical CommandPool = commandPool; GraphicsQueue = graphicsQueue; QueueFamily = queueFamily; - - /*var imageSize = (ulong)size.X * (ulong)size.Y * 4; - - using var stagingBuffer = new StagingBuffer(vk, logicalDevice, physicalDevice, imageSize); - - void* data; - vk!.MapMemory(LogicalDevice, stagingBuffer.VkBufferMemory, 0, imageSize, 0, &data); - image.CopyPixelDataTo(new Span(data, (int)imageSize)); - vk!.UnmapMemory(LogicalDevice, stagingBuffer.VkBufferMemory);*/ - - ImageFormat = (uint)Format.R8G8B8A8Unorm; + ImageFormat = (uint)ToVkFormat(desc.Format); Tiling = (uint)ImageTiling.Optimal; UsageFlags = (uint)(ImageUsageFlags.SampledBit | ImageUsageFlags.TransferSrcBit | ImageUsageFlags.TransferDstBit | ImageUsageFlags.ColorAttachmentBit); - - CreateImage((uint)size.X, (uint)size.Y, (Format)ImageFormat, (ImageTiling)Tiling, - (ImageUsageFlags)UsageFlags, MemoryPropertyFlags.DeviceLocalBit); - - /*TransitionImageLayout(textureImage, Format.R8G8B8A8Srgb, ImageLayout.Undefined, ImageLayout.TransferDstOptimal); - CopyBufferToImage(stagingBuffer.VkBuffer, textureImage, (uint)size.X, (uint)size.Y); - TransitionImageLayout(textureImage, Format.R8G8B8A8Srgb, ImageLayout.TransferDstOptimal, - ImageLayout.ShaderReadOnlyOptimal);*/ - - TransitionImageLayout(textureImage, (Format)ImageFormat, ImageLayout.Undefined, ImageLayout.ColorAttachmentOptimal); - - ImageView = ImageUtility.CreateViewForImage(Vk, LogicalDevice, textureImage, Format.R8G8B8A8Unorm); + Width = (uint)desc.Width; + Height = (uint)desc.Height; + + colorAttachment = new VulkanImageAttachment( + Vk, + LogicalDevice, + PhysicalDevice, + CommandPool, + GraphicsQueue, + (uint)desc.Width, + (uint)desc.Height, + ToVkFormat(desc.Format), + ImageUsageFlags.SampledBit | + ImageUsageFlags.TransferSrcBit | + ImageUsageFlags.TransferDstBit | + ImageUsageFlags.ColorAttachmentBit, + ImageAspectFlags.ColorBit); + + colorAttachment.TransitionLayout( + ImageLayout.ColorAttachmentOptimal); + + if (desc.Depth != DepthFormat.NoDepth) + { + var depthFormat = ToVkDepthFormat(desc.Depth); + + depthAttachment = new VulkanImageAttachment( + Vk, + LogicalDevice, + PhysicalDevice, + CommandPool, + GraphicsQueue, + (uint)desc.Width, + (uint)desc.Height, + depthFormat, + ImageUsageFlags.DepthStencilAttachmentBit, + ImageAspectFlags.DepthBit | ImageAspectFlags.StencilBit); + + depthAttachment.TransitionLayout(ImageLayout.DepthStencilAttachmentOptimal); + } CreateSampler(); } - - + + private Format ToVkDepthFormat(DepthFormat descDepth) + { + switch (descDepth) + { + case DepthFormat.NoDepth: + throw new ArgumentException("No depth is not supported depth format."); + case DepthFormat.Depth24Stencil8: + return Format.D24UnormS8Uint; + default: + throw new ArgumentOutOfRangeException(nameof(descDepth), descDepth, null); + } + } + + private Format ToVkFormat(TextureFormat descFormat) + { + return descFormat switch + { + TextureFormat.RGBA8_Unorm => Format.R8G8B8A8Unorm, + _ => throw new ArgumentOutOfRangeException(nameof(descFormat), descFormat, null) + }; + } + + public void MakeReadOnly() { - TransitionLayoutTo(ColorAttachmentOptimal, ShaderReadOnlyOptimal); + colorAttachment.TransitionLayout(ImageLayout.ShaderReadOnlyOptimal); + } + + public void MakeReadOnly(CommandBuffer cmdBuffer) + { + colorAttachment.TransitionLayout(ImageLayout.ShaderReadOnlyOptimal, cmdBuffer); } public void MakeWriteable() { - TransitionLayoutTo(ShaderReadOnlyOptimal, ColorAttachmentOptimal); + colorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal); + } + + public void MakeWriteable(CommandBuffer cmdBuffer) + { + colorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal, cmdBuffer); } private unsafe void CreateSampler() @@ -112,121 +172,6 @@ private unsafe void CreateSampler() } } - private unsafe void CreateImage(uint width, uint height, Format format, ImageTiling tiling, ImageUsageFlags usage, - MemoryPropertyFlags properties) - { - ImageCreateInfo imageInfo = new() - { - SType = StructureType.ImageCreateInfo, - ImageType = ImageType.Type2D, - Extent = new Extent3D(width, height, 1), - MipLevels = 1, - ArrayLayers = 1, - Format = format, - Tiling = tiling, - InitialLayout = ImageLayout.Undefined, - Usage = usage, - Samples = SampleCountFlags.Count1Bit, - SharingMode = SharingMode.Exclusive - }; - - fixed (Image* imagePtr = &textureImage) - { - if (Vk.CreateImage(LogicalDevice, &imageInfo, null, imagePtr) != Result.Success) - throw new VulkanException("Failed to create an image."); - } - - Vk.GetImageMemoryRequirements(LogicalDevice, textureImage, out var memRequirements); - - MemoryAllocateInfo allocInfo = new() - { - SType = StructureType.MemoryAllocateInfo, - AllocationSize = memRequirements.Size, - MemoryTypeIndex = - BufferObject.FindMemoryType(Vk, PhysicalDevice, memRequirements.MemoryTypeBits, properties) - }; - - fixed (DeviceMemory* memoryPtr = &textureImageMemory) - { - if (Vk.AllocateMemory(LogicalDevice, &allocInfo, null, memoryPtr) != Result.Success) - throw new VulkanException("Failed to allocate image memory."); - } - - Vk.BindImageMemory(LogicalDevice, textureImage, textureImageMemory, 0); - } - - private unsafe void TransitionImageLayout(Image image, Format format, ImageLayout oldLayout, ImageLayout newLayout) - { - using var commandBuffer = new SingleTimeCommandBufferSession(Vk, CommandPool, LogicalDevice, GraphicsQueue); - - TransitionImageLayout(image, oldLayout, newLayout, commandBuffer.CommandBuffer); - } - - private unsafe void TransitionImageLayout(Image image, ImageLayout oldLayout, ImageLayout newLayout, - CommandBuffer commandBuffer) - { - var barrier = new ImageMemoryBarrier() - { - SType = StructureType.ImageMemoryBarrier, - OldLayout = oldLayout, - NewLayout = newLayout, - SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, - DstQueueFamilyIndex = Vk.QueueFamilyIgnored, - Image = image, - SubresourceRange = new ImageSubresourceRange() - { - AspectMask = ImageAspectFlags.ColorBit, - BaseMipLevel = 0, - LevelCount = 1, - BaseArrayLayer = 0, - LayerCount = 1 - } - }; - - PipelineStageFlags sourceStage; - PipelineStageFlags destinationStage; - - if (oldLayout == ImageLayout.Undefined) - { - barrier.SrcAccessMask = 0; - sourceStage = PipelineStageFlags.TopOfPipeBit; - } - else if (oldLayout == ImageLayout.ColorAttachmentOptimal) - { - barrier.SrcAccessMask = AccessFlags.ColorAttachmentWriteBit; - sourceStage = PipelineStageFlags.ColorAttachmentOutputBit; - } - else if (oldLayout == ImageLayout.ShaderReadOnlyOptimal) - { - barrier.SrcAccessMask = AccessFlags.ShaderReadBit; - sourceStage = PipelineStageFlags.FragmentShaderBit; - } - else - { - barrier.SrcAccessMask = AccessFlags.MemoryReadBit; - sourceStage = PipelineStageFlags.BottomOfPipeBit; - } - - if (newLayout == ImageLayout.ColorAttachmentOptimal) - { - barrier.DstAccessMask = AccessFlags.ColorAttachmentWriteBit; - destinationStage = PipelineStageFlags.ColorAttachmentOutputBit; - } - else if (newLayout == ImageLayout.ShaderReadOnlyOptimal) - { - barrier.DstAccessMask = AccessFlags.ShaderReadBit; - destinationStage = PipelineStageFlags.FragmentShaderBit; - } - else - { - barrier.DstAccessMask = AccessFlags.MemoryReadBit; - destinationStage = PipelineStageFlags.BottomOfPipeBit; - } - - Vk.CmdPipelineBarrier(commandBuffer, sourceStage, destinationStage, 0, 0, null, 0, null, 1, - barrier); - } - private unsafe void CopyBufferToImage(Buffer buffer, Image image, uint width, uint height) { using var commandBuffer = new SingleTimeCommandBufferSession(Vk, CommandPool, LogicalDevice, GraphicsQueue); @@ -253,20 +198,7 @@ private unsafe void CopyBufferToImage(Buffer buffer, Image image, uint width, ui public unsafe void Dispose() { Vk.DestroySampler(LogicalDevice, sampler, null); - Vk.DestroyImageView(LogicalDevice, ImageView, null); - - Vk.DestroyImage(LogicalDevice, textureImage, null); - Vk.FreeMemory(LogicalDevice, textureImageMemory, null); + ColorAttachment.Dispose(); + DepthAttachment?.Dispose(); } - - public void TransitionLayoutTo(uint from, uint to) - { - TransitionImageLayout(textureImage, (Format)ImageFormat, (ImageLayout)from, (ImageLayout)to); - } - - public void TransitionLayoutTo(CommandBuffer buffer, ImageLayout from, ImageLayout to) - { - TransitionImageLayout(textureImage, from, to, buffer); - } - } diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs index 27eeb49..ccae395 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs @@ -11,6 +11,8 @@ public class GraphicsPipelineBuilder public List Stages { get; } = new(); public RenderPassBuilder RenderPassBuilder { get; set; } + public bool HasDepthStencil { get; set; } + public GraphicsPipelineBuilder(Vk vk, Device logicalDevice) { Vk = vk; @@ -26,7 +28,7 @@ public GraphicsPipelineBuilder AddStage(Action sta Stages.Add(stage); return this; } - + public GraphicsPipelineBuilder WithRenderPass(Action renderPassBuilder) { RenderPassBuilder = new(Vk, LogicalDevice); @@ -34,25 +36,31 @@ public GraphicsPipelineBuilder WithRenderPass(Action renderPa return this; } + public GraphicsPipelineBuilder WithDepth() + { + HasDepthStencil = true; + return this; + } + public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChainImageFormat, ImageLayout finalLayout, ref DescriptorSetLayout descriptorSetLayout) { if (Stages.Count == 0) throw new GraphicsPipelineBuilderException("No stages were added to the pipeline."); - if (RenderPassBuilder == null) throw new GraphicsPipelineBuilderException("No render pass was added to the pipeline."); + if (RenderPassBuilder == null) + throw new GraphicsPipelineBuilderException("No render pass was added to the pipeline."); RenderPass renderPass = RenderPassBuilder.Create(swapChainImageFormat, finalLayout); var stages = stackalloc PipelineShaderStageCreateInfo[Stages.Count]; for (var i = 0; i < Stages.Count; i++) stages[i] = Stages[i].Build(); - + var bindingDescription = Vertex.GetBindingDescription(); var attributeDescriptions = Vertex.GetAttributeDescriptions(); fixed (VertexInputAttributeDescription* attributeDescriptionsPtr = attributeDescriptions) fixed (DescriptorSetLayout* descriptorPtr = &descriptorSetLayout) { - PipelineVertexInputStateCreateInfo vertexInputInfo = new() { SType = StructureType.PipelineVertexInputStateCreateInfo, @@ -107,6 +115,18 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain DepthBiasEnable = false }; + PipelineDepthStencilStateCreateInfo depthStencil = new() + { + SType = StructureType.PipelineDepthStencilStateCreateInfo, + + DepthTestEnable = HasDepthStencil, + DepthWriteEnable = HasDepthStencil, + DepthCompareOp = CompareOp.Less, + + DepthBoundsTestEnable = false, + StencilTestEnable = false + }; + PipelineMultisampleStateCreateInfo multisampling = new() { SType = StructureType.PipelineMultisampleStateCreateInfo, @@ -158,6 +178,7 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain PRasterizationState = &rasterizer, PMultisampleState = &multisampling, PColorBlendState = &colorBlending, + PDepthStencilState = &depthStencil, Layout = pipelineLayout, RenderPass = renderPass, Subpass = 0, diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineStageBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineStageBuilder.cs index 243d1ae..e280298 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineStageBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineStageBuilder.cs @@ -12,7 +12,8 @@ public class GraphicsPipelineStageBuilder : IDisposable public Device LogicalDevice { get; set; } public GraphicsPipelineStageType Type { get; set; } - public string ShaderPath { get; set; } + public string? ShaderPath { get; set; } + public byte[]? ShaderBytes { get; set; } public string EntryName { get; set; } = "main"; @@ -37,17 +38,21 @@ public unsafe PipelineShaderStageCreateInfo Build() throw new GraphicsPipelineBuilderException("Stage was already created"); } - using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ShaderPath); - if (stream == null) + byte[] code = ShaderBytes ?? Array.Empty(); + if (ShaderBytes == null) { - throw new GraphicsPipelineBuilderException("Shader file not found"); - } + using var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(ShaderPath); + if (stream == null) + { + throw new GraphicsPipelineBuilderException("Shader file not found"); + } - byte[] code = new byte[stream.Length]; - var read = stream.Read(code, 0, code.Length); - if (read != code.Length) - { - throw new GraphicsPipelineBuilderException("Failed to read shader file"); + code = new byte[stream.Length]; + var read = stream.Read(code, 0, code.Length); + if (read != code.Length) + { + throw new GraphicsPipelineBuilderException("Failed to read shader file"); + } } shaderModule = CreateShaderModule(code); diff --git a/src/Drawie.RenderApi.Vulkan/VulkanBufferGroup.cs b/src/Drawie.RenderApi.Vulkan/VulkanBufferGroup.cs new file mode 100644 index 0000000..a9082a8 --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanBufferGroup.cs @@ -0,0 +1,18 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Vulkan.Buffers; + +namespace Drawie.RenderApi.Vulkan; + +internal sealed class VulkanBufferGroup : IBufferGroup +{ + private static uint counter; + + public uint Handle { get; } = counter++; + + private VulkanBufferGroupList buffers = new VulkanBufferGroupList(); + + public void Open(Action list) + { + list(buffers); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanBufferGroupList.cs b/src/Drawie.RenderApi.Vulkan/VulkanBufferGroupList.cs new file mode 100644 index 0000000..c460ea5 --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanBufferGroupList.cs @@ -0,0 +1,16 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Vulkan.Buffers; + +namespace Drawie.RenderApi.Vulkan; + +internal sealed class VulkanBufferGroupList : IBufferGroupList +{ + public List Buffers { get; } = new(); + + public IVkBuffer? IndexBuffer => Buffers.FirstOrDefault(x => x.Usage == BufferUsage.Index) as IVkBuffer; + public IVkBuffer? VertexBuffer => Buffers.FirstOrDefault(x => x.Usage == BufferUsage.Vertex) as IVkBuffer; + + public VulkanBufferGroupList() + { + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs new file mode 100644 index 0000000..10899ed --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -0,0 +1,455 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.CommandRecording; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Textures; +using Drawie.RenderApi.Vulkan.Buffers; +using Drawie.RenderApi.Vulkan.Exceptions; +using Silk.NET.Vulkan; + +namespace Drawie.RenderApi.Vulkan; + +internal sealed class VulkanCommandList : CommandList, IDisposable +{ + private readonly VulkanContext context; + private readonly CommandPool commandPool; + + private CommandBuffer commandBuffer; + private bool recording; + + private VulkanRenderTarget? renderTarget; + private VulkanPipeline? pipeline; + private VulkanBufferGroup? buffers; + + public VulkanCommandList( + VulkanContext context, + CommandPool commandPool) + { + this.context = context; + this.commandPool = commandPool; + } + + public override void BeginRenderPass(IRenderTarget fb) + { + if (recording) + throw new InvalidOperationException( + "A Vulkan render pass is already being recorded."); + + if (fb is not VulkanRenderTarget target) + throw new ArgumentException( + "Render target must be a Vulkan render target.", + nameof(fb)); + + renderTarget = target; + + commandBuffer = AllocateCommandBuffer(); + + BeginCommandBuffer(commandBuffer); + + recording = true; + + BeginRendering(target); + } + + public override void SetPipeline(IPipeline pipeline) + { + if (!recording) + throw new InvalidOperationException( + "BeginRenderPass must be called first."); + + if (pipeline is not VulkanPipeline vkPipeline) + throw new ArgumentException( + "Pipeline must be a Vulkan pipeline.", + nameof(pipeline)); + + this.pipeline = vkPipeline; + + context.Api!.CmdBindPipeline( + commandBuffer, + PipelineBindPoint.Graphics, + vkPipeline.Pipeline); + } + + public override void SetBuffers(IBufferGroup bufferGroup) + { + if (!recording) + throw new InvalidOperationException( + "BeginRenderPass must be called first."); + + if (bufferGroup is not VulkanBufferGroup vkBuffers) + throw new ArgumentException( + "Buffer group must be a Vulkan buffer group.", + nameof(bufferGroup)); + + buffers = vkBuffers; + + BindBuffers(vkBuffers); + } + + public override void BindTexture( + ITexture texture, + ISampler sampler) + { + if (!recording) + throw new InvalidOperationException( + "BeginRenderPass must be called first."); + + if (sampler is not VulkanSampler vkSampler) + throw new ArgumentException( + "Sampler must be a Vulkan sampler.", + nameof(sampler)); + + var vkTex = context.ManagedTextures[texture.TextureId]; + + if (vkTex is not VulkanTexture vkTexture) throw new ArgumentException("Only IVkTexture's are valid"); + + vkTexture.MakeReadOnly(commandBuffer); + + BindTextureDescriptor( + vkTexture, + vkSampler); + } + + public override void DrawIndexed(int indexCount) + { + if (!recording) + throw new InvalidOperationException( + "BeginRenderPass must be called first."); + + context.Api!.CmdDrawIndexed(commandBuffer, (uint)indexCount, 1, 0, 0, 0); + } + + public override RecordedRenderPass EndRenderPass() + { + EnsureRecording(); + + context.Api!.CmdEndRendering(commandBuffer); + + EndCommandBuffer(commandBuffer); + + recording = false; + + return new VulkanRecordedRenderPass(context, commandBuffer, commandPool); + } + + public override RecordedRenderPass EndRenderPass( + IRenderTarget blitTo) + { + EnsureRecording(); + + var vkTex = context.ManagedTextures[blitTo.FramebufferId]; + + if (vkTex is not VulkanTexture destination) + throw new ArgumentException( + "Destination must be a Vulkan render target.", + nameof(blitTo)); + + context.Api!.CmdEndRendering(commandBuffer); + + Blit(renderTarget!.Texture, destination); + + EndCommandBuffer(commandBuffer); + + recording = false; + + return new VulkanRecordedRenderPass(context, commandBuffer, commandPool); + } + + private void EnsureRecording() + { + if (!recording) + throw new InvalidOperationException( + "No Vulkan render pass is currently being recorded."); + } + + private unsafe CommandBuffer AllocateCommandBuffer() + { + CommandBufferAllocateInfo info = new() + { + SType = StructureType.CommandBufferAllocateInfo, + CommandPool = commandPool, + Level = CommandBufferLevel.Primary, + CommandBufferCount = 1 + }; + + if (context.Api!.AllocateCommandBuffers( + context.LogicalDevice.Device, + in info, + out var result) != Result.Success) + { + throw new VulkanException( + "Failed to allocate Vulkan command buffer."); + } + + return result; + } + + private void BeginCommandBuffer(CommandBuffer buffer) + { + CommandBufferBeginInfo info = new() + { + SType = StructureType.CommandBufferBeginInfo, + Flags = CommandBufferUsageFlags.OneTimeSubmitBit + }; + + if (context.Api!.BeginCommandBuffer( + buffer, + in info) != Result.Success) + { + throw new VulkanException( + "Failed to begin Vulkan command buffer."); + } + } + + private void EndCommandBuffer(CommandBuffer buffer) + { + if (context.Api!.EndCommandBuffer(buffer) != Result.Success) + throw new VulkanException( + "Failed to end Vulkan command buffer."); + } + + private unsafe void BeginRendering(VulkanRenderTarget target) + { + target.Texture.MakeWriteable(commandBuffer); + + RenderingAttachmentInfo colorAttachment = new() + { + SType = StructureType.RenderingAttachmentInfo, + ImageView = target.Texture.ColorAttachment.View, + ImageLayout = ImageLayout.ColorAttachmentOptimal, + LoadOp = AttachmentLoadOp.Clear, + StoreOp = AttachmentStoreOp.Store, + ClearValue = new ClearValue + { + Color = new ClearColorValue(0f, 0f, 0f, 1f) + } + }; + + RenderingAttachmentInfo depthAttachment = default; + + if (target.Texture.DepthAttachment is not null) + { + //target.Texture.DepthAttachment.MakeDepthAttachment(commandBuffer); + + depthAttachment = new RenderingAttachmentInfo + { + SType = StructureType.RenderingAttachmentInfo, + ImageView = target.Texture.DepthAttachment.View, + ImageLayout = ImageLayout.DepthAttachmentOptimal, + LoadOp = AttachmentLoadOp.Clear, + StoreOp = AttachmentStoreOp.Store, + ClearValue = new ClearValue + { + DepthStencil = new ClearDepthStencilValue(1f, 0) + } + }; + } + + Rect2D renderArea = new() + { + Offset = new Offset2D(0, 0), + Extent = new Extent2D( + (uint)target.Size.X, + (uint)target.Size.Y) + }; + + RenderingInfo renderingInfo = new() + { + SType = StructureType.RenderingInfo, + RenderArea = renderArea, + LayerCount = 1, + ColorAttachmentCount = 1, + PColorAttachments = &colorAttachment + }; + + if (target.Texture.DepthAttachment is not null) + renderingInfo.PDepthAttachment = &depthAttachment; + + context.Api!.CmdBeginRendering( + commandBuffer, + in renderingInfo); + } + + private unsafe void BindBuffers(VulkanBufferGroup group) + { + group.Open((list) => + { + var bufList = list as VulkanBufferGroupList; + if (bufList.VertexBuffer != null) + { + var buffer = bufList.VertexBuffer.NativeBuffer.VkBuffer; + ulong offset = 0; + + context.Api!.CmdBindVertexBuffers( + commandBuffer, + 0, + 1, + &buffer, + &offset); + } + + if (bufList.IndexBuffer is not null) + { + context.Api!.CmdBindIndexBuffer( + commandBuffer, + bufList.IndexBuffer.NativeBuffer.VkBuffer, + 0, + IndexType.Uint32); + } + }); + } + + private void BindTextureDescriptor( + VulkanTexture texture, + VulkanSampler sampler) + { + // TODO: Implement + /*context.Api!.CmdBindDescriptorSets( + commandBuffer, + PipelineBindPoint.Graphics, + pipeline.GraphicsPipeline.VkPipelineLayout, + 0, + 1, + in descriptorSet, + 0, + null);*/ + + } + + private void Blit( + VulkanTexture source, + VulkanTexture destination) + { + /* + TransitionForBlitSource(source); + TransitionForBlitDestination(destination, ImageLayout.TransferDstOptimal); + */ + + source.ColorAttachment.TransitionLayout(ImageLayout.TransferSrcOptimal, commandBuffer); + destination.ColorAttachment.TransitionLayout(ImageLayout.TransferDstOptimal, commandBuffer); + + ImageBlit region = new() + { + SrcSubresource = new ImageSubresourceLayers + { + AspectMask = ImageAspectFlags.ColorBit, + MipLevel = 0, + BaseArrayLayer = 0, + LayerCount = 1 + }, + + DstSubresource = new ImageSubresourceLayers + { + AspectMask = ImageAspectFlags.ColorBit, + MipLevel = 0, + BaseArrayLayer = 0, + LayerCount = 1 + } + }; + + region.SrcOffsets[0] = new Offset3D(0, 0, 0); + region.SrcOffsets[1] = new Offset3D( + (int)source.Width, + (int)source.Height, + 1); + + region.DstOffsets[0] = new Offset3D(0, 0, 0); + region.DstOffsets[1] = new Offset3D( + (int)destination.Width, + (int)destination.Height, + 1); + + context.Api!.CmdBlitImage( + commandBuffer, + source.VkImage, + ImageLayout.TransferSrcOptimal, + destination.VkImage, + ImageLayout.TransferDstOptimal, + 1, + in region, + Filter.Nearest); + + destination.ColorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal, commandBuffer); + } + + /*private unsafe void TransitionForBlitSource(VulkanTexture texture) + { + ImageMemoryBarrier barrier = new() + { + SType = StructureType.ImageMemoryBarrier, + + OldLayout = ImageLayout.ColorAttachmentOptimal, + NewLayout = ImageLayout.TransferSrcOptimal, + + SrcAccessMask = AccessFlags.ColorAttachmentWriteBit, + DstAccessMask = AccessFlags.TransferReadBit, + + SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, + DstQueueFamilyIndex = Vk.QueueFamilyIgnored, + + Image = texture.VkImage, + + SubresourceRange = new ImageSubresourceRange + { + AspectMask = ImageAspectFlags.ColorBit, + BaseMipLevel = 0, + LevelCount = 1, + BaseArrayLayer = 0, + LayerCount = 1 + } + }; + + context.Api!.CmdPipelineBarrier( + commandBuffer, + PipelineStageFlags.ColorAttachmentOutputBit, + PipelineStageFlags.TransferBit, + DependencyFlags.None, + 0, null, + 0, null, + 1, &barrier); + } + + private unsafe void TransitionForBlitDestination( + VulkanTexture texture, + ImageLayout oldLayout) + { + ImageMemoryBarrier barrier = new() + { + SType = StructureType.ImageMemoryBarrier, + + OldLayout = oldLayout, + NewLayout = ImageLayout.TransferDstOptimal, + + SrcAccessMask = AccessFlags.MemoryReadBit, + DstAccessMask = AccessFlags.TransferWriteBit, + + SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, + DstQueueFamilyIndex = Vk.QueueFamilyIgnored, + + Image = texture.VkImage, + + SubresourceRange = new ImageSubresourceRange + { + AspectMask = ImageAspectFlags.ColorBit, + BaseMipLevel = 0, + LevelCount = 1, + BaseArrayLayer = 0, + LayerCount = 1 + } + }; + + context.Api!.CmdPipelineBarrier( + commandBuffer, + PipelineStageFlags.AllCommandsBit, + PipelineStageFlags.TransferBit, + DependencyFlags.None, + 0, null, + 0, null, + 1, &barrier); + }*/ + + public void Dispose() + { + + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs index 7742bc1..14da417 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs @@ -1,18 +1,17 @@ -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; +using System.Runtime.InteropServices; +using Drawie.RenderApi.Abstraction.Textures; +using Drawie.RenderApi.Vulkan.Buffers; using Drawie.RenderApi.Vulkan.ContextObjects; using Drawie.RenderApi.Vulkan.Exceptions; using Drawie.RenderApi.Vulkan.Extensions; -using Drawie.RenderApi.Vulkan.Helpers; using Silk.NET.Core; using Silk.NET.Core.Native; using Silk.NET.Vulkan; using Silk.NET.Vulkan.Extensions.EXT; -using Silk.NET.Vulkan.Extensions.KHR; namespace Drawie.RenderApi.Vulkan; -public abstract class VulkanContext : IDisposable, IVulkanContext +public abstract class VulkanContext : IDisposable, IVulkanContext, IGraphicsContext { public Vk? Api { get; protected set; } @@ -38,6 +37,10 @@ public Instance Instance public GpuInfo GpuInfo { get; set; } + public IReadOnlyDictionary ManagedTextures => managedTextures; + + private Dictionary managedTextures = new Dictionary(); + private Instance instance; protected List validationLayers = new List(); @@ -63,6 +66,17 @@ public VulkanContext() public abstract void Initialize(IVulkanContextInfo contextInfo); + void IGraphicsContext.MakeCurrent() + { + // no op + } + + public void AddManagedTexture(ITexture texture, ulong handle) + { + if (texture is not IVkTexture vkTexture) throw new ArgumentException("Can't manage non IVkTexture"); + managedTextures[handle] = vkTexture; + } + protected unsafe void SetupInstance(IVulkanContextInfo contextInfo) { ThrowIfValidationLayersNotSupported(); diff --git a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs new file mode 100644 index 0000000..76eba76 --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs @@ -0,0 +1,198 @@ +using System.Runtime.CompilerServices; +using Drawie.Numerics; +using Drawie.RenderApi.Abstraction; +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Abstraction.CommandRecording; +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Abstraction.Textures; +using Drawie.RenderApi.Vulkan.Buffers; +using Drawie.RenderApi.Vulkan.Exceptions; +using Drawie.RenderApi.Vulkan.Helpers; +using Silk.NET.Vulkan; +using Buffer = Silk.NET.Vulkan.Buffer; +using IAbstractionTexture = Drawie.RenderApi.Abstraction.Textures.ITexture; + +namespace Drawie.RenderApi.Vulkan; + +public sealed class VulkanGraphicsDevice : IGraphicsDevice, IDisposable +{ + private readonly VulkanContext context; + private readonly CommandPool commandPool; + + public VulkanGraphicsDevice(VulkanContext context) + { + if (context.Api is null) + throw new InvalidOperationException( + "Vulkan context must be initialized before creating a graphics device."); + + this.context = context; + commandPool = CreateCommandPool(); + } + + private unsafe CommandPool CreateCommandPool() + { + var queueFamilyIndices = SetupUtility.FindQueueFamilies(context.Api, context.PhysicalDevice, null, null); + + CommandPoolCreateInfo poolInfo = new() + { + SType = StructureType.CommandPoolCreateInfo, + QueueFamilyIndex = queueFamilyIndices.GraphicsFamily!.Value + }; + + if (context.Api!.CreateCommandPool(context.LogicalDevice.Device, in poolInfo, null, out var cmdPool) != + Result.Success) + throw new VulkanException("Failed to create command pool."); + + return cmdPool; + } + + public IBuffer CreateBuffer( + BufferUsage usage, + TData[]? data) + where TData : unmanaged + { + return new VulkanBuffer( + context, + commandPool, + usage, + data); + } + + public IAbstractionTexture CreateTexture(TextureDesc desc) + { + var vkTex = new VulkanTexture( + context.Api!, + context.LogicalDevice.Device, + context.PhysicalDevice, + commandPool, + context.GraphicsQueue, + context.GraphicsQueueFamilyIndex, + desc); + + context.AddManagedTexture(vkTex, vkTex.ImageHandle); + return vkTex; + } + + private VulkanPipeline? pipeline; + public IPipeline CreatePipeline(PipelineDesc desc) + { + context.Api!.DeviceWaitIdle(context.LogicalDevice.Device); + + return pipeline ??= new VulkanPipeline(context, desc); + } + + public ICommandList CreateCommandList() + { + return new VulkanCommandList(context, commandPool); + } + + public ISampler CreateSampler(SamplerDesc desc) + { + return new VulkanSampler(context, desc); + } + + public void Submit(RecordedRenderPass cmdList) + { + cmdList.Execute.Invoke(); + } + + public IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) + { + return new VulkanShaderProgram(context, desc); + } + + public IRenderTarget CreateRenderTarget(TextureDesc textureDesc) + { + var texture = (VulkanTexture)CreateTexture(textureDesc); + + return new VulkanRenderTarget(texture, new VecI(textureDesc.Width, textureDesc.Height)); + } + + public IBufferGroup CreateBufferGroup() + { + return new VulkanBufferGroup(); + } + + public unsafe void Dispose() + { + context.Api!.DestroyCommandPool( + context.LogicalDevice.Device, + commandPool, + null); + } +} + +internal interface IVkBuffer : IBuffer +{ + public BufferObject NativeBuffer { get; } +} + +internal sealed class VulkanBuffer : IVkBuffer, IBuffer, IDisposable where T : unmanaged +{ + private readonly VulkanContext context; + private readonly CommandPool commandPool; + + public BufferUsage Usage { get; } + public ulong Size { get; } + public BufferObject NativeBuffer { get; } + + public VulkanBuffer(VulkanContext context, CommandPool commandPool, BufferUsage usage, T[] data) + { + this.context = context; + this.commandPool = commandPool; + Usage = usage; + Size = (ulong)Unsafe.SizeOf() * (ulong)data.Length; + NativeBuffer = CreateNativeBuffer(Size, usage); + + if (data is { Length: > 0 }) + Upload(data); + } + + public unsafe void Dispose() + { + NativeBuffer.Dispose(); + } + + private BufferObject CreateNativeBuffer(ulong size, BufferUsage usage) + { + return usage switch + { + BufferUsage.Vertex => new VertexBuffer(context, size), + BufferUsage.Index => new IndexBuffer(context, size), + BufferUsage.Uniform => new UniformBuffer(context.Api!, context.LogicalDevice.Device, context.PhysicalDevice, size), + BufferUsage.Storage => new VulkanStorageBuffer(context, size), + _ => throw new ArgumentOutOfRangeException(nameof(usage), usage, null) + }; + } + + private void Upload(T[] data) + { + switch (Usage) + { + case BufferUsage.Vertex: + case BufferUsage.Index: + { + using var stagingBuffer = new StagingBuffer(context, Size); + stagingBuffer.SetData(data); + CopyBuffer(stagingBuffer, NativeBuffer, Size); + break; + } + case BufferUsage.Uniform: + case BufferUsage.Storage: + NativeBuffer.SetData(data); + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + private unsafe void CopyBuffer(BufferObject srcBuffer, BufferObject dstBuffer, ulong size) + { + using var session = new SingleTimeCommandBufferSession(context, commandPool); + + BufferCopy copyRegion = new() { Size = size }; + context.Api!.CmdCopyBuffer(session.CommandBuffer, srcBuffer.VkBuffer, dstBuffer.VkBuffer, 1, copyRegion); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs index 0080a13..ae84bac 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs @@ -1,6 +1,7 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction; using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.Vulkan.Buffers; using Drawie.RenderApi.Vulkan.Exceptions; @@ -8,7 +9,6 @@ using Drawie.RenderApi.Vulkan.Stages; using Drawie.RenderApi.Vulkan.Stages.Builders; using Drawie.RenderApi.Vulkan.Structs; -using Silk.NET.Maths; using Silk.NET.Vulkan; using Silk.NET.Vulkan.Extensions.KHR; using Buffer = Silk.NET.Vulkan.Buffer; @@ -57,7 +57,9 @@ public class VulkanHostViewRenderApi : IVulkanHostViewRenderApi public event Action? FramebufferResized; ITexture IHostViewRenderApi.RenderTexture => texture; - public VulkanWindowContext Context => context; + public VulkanWindowContext Context => context; + + public event Action Initialized; IVulkanContext IVulkanHostViewRenderApi.Context => context; @@ -73,10 +75,10 @@ public void UpdateFramebufferSize(int width, int height) public void PrepareTextureToWrite() { - texture.TransitionLayoutTo(VulkanTexture.ShaderReadOnlyOptimal, VulkanTexture.ColorAttachmentOptimal); + texture.MakeWriteable(); } - public IGraphicsContext GraphicsContext { get; } + public IGraphicsContext GraphicsContext { get; private set; } public void CreateInstance(object contextObject, VecI framebufferSize) { @@ -108,6 +110,9 @@ public void CreateInstance(object contextObject, VecI framebufferSize) CreateSyncObjects(); lastFramebufferSize = framebufferSize; + + GraphicsContext = context; + Initialized?.Invoke(); } public unsafe void DestroyInstance() @@ -195,8 +200,8 @@ private unsafe void CreateDescriptorSetLayout() public void CreateTextureImage() { - texture = new VulkanTexture(context.Api!, context.LogicalDevice.Device, context.PhysicalDevice, commandPool, - context.GraphicsQueue, context.GraphicsQueueFamilyIndex, framebufferSize); + texture = new VulkanTexture(context.Api!, context.LogicalDevice.Device, context.PhysicalDevice, commandPool, context.GraphicsQueue, context.GraphicsQueueFamilyIndex, framebufferSize); + context.AddManagedTexture(texture, texture.ImageHandle); texture.MakeReadOnly(); } @@ -252,7 +257,7 @@ private unsafe void CreateDescriptorSets() DescriptorImageInfo imageInfo = new() { Sampler = texture.Sampler, - ImageView = texture.ImageView, + ImageView = texture.ColorAttachment.View, ImageLayout = ImageLayout.ShaderReadOnlyOptimal }; @@ -423,7 +428,7 @@ public unsafe void Render(double deltaTime) private void UpdateTextureLayout() { - texture.TransitionLayoutTo(VulkanTexture.ColorAttachmentOptimal, VulkanTexture.ShaderReadOnlyOptimal); + texture.MakeReadOnly(); } private unsafe void CreateCommandPool() @@ -706,4 +711,4 @@ private void CopyBuffer(BufferObject srcBuffer, BufferObject dstBuffer, ulong si context.Api!.CmdCopyBuffer(commandBuffer.CommandBuffer, srcBuffer.VkBuffer, dstBuffer.VkBuffer, 1, copyRegion); } -} +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs new file mode 100644 index 0000000..794d2ee --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs @@ -0,0 +1,62 @@ +using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Vulkan.Exceptions; +using Drawie.RenderApi.Vulkan.Extensions; +using Drawie.RenderApi.Vulkan.Stages; +using Drawie.RenderApi.Vulkan.Stages.Builders; +using Silk.NET.Core.Native; +using Silk.NET.Vulkan; + +namespace Drawie.RenderApi.Vulkan; + +internal sealed class VulkanPipeline : IPipeline, IDisposable +{ + private readonly VulkanContext context; + + public PipelineDesc Description { get; } + + public Pipeline Pipeline { get; } + public GraphicsPipeline GraphicsPipeline => graphicsPipeline; + + public GraphicsPipelineBuilder Builder { get; } + + private VulkanShaderProgram program; + + private GraphicsPipeline graphicsPipeline; + + public VulkanPipeline( + VulkanContext context, + PipelineDesc desc) + { + this.context = context; + Description = desc; + if (desc.ShaderProgram is not VulkanShaderProgram vulkanShaderProgram) + throw new ArgumentException("Invalid Shader Program type"); + program = vulkanShaderProgram; + + Builder = new GraphicsPipelineBuilder(context.Api, context.LogicalDevice.Device); + graphicsPipeline = CreatePipeline(); + Pipeline = graphicsPipeline.VkPipeline; + } + + public void Apply() + { + // Vulkan pipelines are explicitly bound by VulkanCommandList. + } + + private GraphicsPipeline CreatePipeline() + { + Builder.Stages.Add(program.VertexStageBuilder); + Builder.Stages.Add(program.FragmentStageBuilder); + Builder.WithRenderPass(builder => {}); + var descriptorSetLayout = program.DescriptorSetLayout; + var pipeline = Builder.Create(new Extent2D((uint)Description.Viewport.Width, (uint)Description.Viewport.Height), + Format.R8G8B8A8Unorm, ImageLayout.PresentSrcKhr, ref descriptorSetLayout); + + return pipeline; + } + + public void Dispose() + { + graphicsPipeline.Dispose(); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanRecordedRenderPass.cs b/src/Drawie.RenderApi.Vulkan/VulkanRecordedRenderPass.cs new file mode 100644 index 0000000..c9ce075 --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanRecordedRenderPass.cs @@ -0,0 +1,71 @@ +using Drawie.RenderApi.Abstraction.CommandRecording; +using Drawie.RenderApi.Vulkan.Exceptions; +using Silk.NET.Vulkan; + +namespace Drawie.RenderApi.Vulkan; + +internal sealed class VulkanRecordedRenderPass : RecordedRenderPass +{ + public CommandBuffer CommandBuffer { get; } + public VulkanContext Context { get; } + public CommandPool Pool { get; } + + private bool submitted; + + public VulkanRecordedRenderPass( + VulkanContext context, + CommandBuffer commandBuffer, + CommandPool commandPool) + { + CommandBuffer = commandBuffer; + Context = context; + Pool = commandPool; + + Execute = Submit; + } + + private unsafe void Submit() + { + if (submitted) + throw new InvalidOperationException( + "This Vulkan render pass has already been submitted."); + + submitted = true; + + var commandBuffer = CommandBuffer; + + SubmitInfo submitInfo = new() + { + SType = StructureType.SubmitInfo, + CommandBufferCount = 1, + PCommandBuffers = &commandBuffer + }; + + var result = Context.Api!.QueueSubmit( + Context.GraphicsQueue, + 1, + in submitInfo, + default); + + if (result != Result.Success) + { + submitted = false; + + throw new VulkanException( + $"Failed to submit Vulkan command buffer: {result}"); + } + + result = Context.Api.QueueWaitIdle( + Context.GraphicsQueue); + + if (result != Result.Success) + throw new VulkanException( + $"Failed waiting for Vulkan queue: {result}"); + + Context.Api.FreeCommandBuffers( + Context.LogicalDevice.Device, + Pool, + 1, + in commandBuffer); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs index fecf961..3ffe3d5 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs @@ -20,6 +20,7 @@ public VulkanRenderApi() public VulkanRenderApi(IVulkanContext vulkanContext) { VulkanContext = vulkanContext; + GraphicsDevice = CreateGraphicsDevice(vulkanContext); } public IHostViewRenderApi CreateWindowRenderApi() @@ -29,8 +30,10 @@ public IHostViewRenderApi CreateWindowRenderApi() { var context = new VulkanWindowContext(); VulkanContext = context; - + hostViewRenderApi = new VulkanHostViewRenderApi(context); + + hostViewRenderApi.Initialized += () => { GraphicsDevice = CreateGraphicsDevice(context); }; windowRenderApis.Add(hostViewRenderApi); return hostViewRenderApi; } @@ -43,8 +46,10 @@ public IHostViewRenderApi CreateWindowRenderApi() return hostViewRenderApi; } - private void CreateGraphicsDevice(IVulkanContext context) + private static IGraphicsDevice CreateGraphicsDevice(IVulkanContext context) { - throw new NotImplementedException(); - } -} + if (context is not VulkanContext vulkanContext || vulkanContext.Api is null) + throw new InvalidOperationException("Vulkan graphics device is available only after the Vulkan context is initialized."); + + return new VulkanGraphicsDevice(vulkanContext); + }} diff --git a/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs b/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs new file mode 100644 index 0000000..5c8606c --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs @@ -0,0 +1,17 @@ +using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.RenderTargets; + +namespace Drawie.RenderApi.Vulkan; + +internal sealed class VulkanRenderTarget(Buffers.VulkanTexture texture, VecI size) : IRenderTarget, IDisposable +{ + //TODO: It's not exactly framebuffer id, validate if ImageHandle is correct. + public ulong FramebufferId => Texture.ImageHandle; + public VecI Size { get; } = size; + public Buffers.VulkanTexture Texture { get; } = texture; + + public void Dispose() + { + Texture.Dispose(); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanSampler.cs b/src/Drawie.RenderApi.Vulkan/VulkanSampler.cs new file mode 100644 index 0000000..d42fd79 --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanSampler.cs @@ -0,0 +1,65 @@ +using Drawie.RenderApi.Abstraction.Textures; +using Drawie.RenderApi.Vulkan.Exceptions; +using Silk.NET.Vulkan; + +namespace Drawie.RenderApi.Vulkan; + +internal sealed class VulkanSampler : ISampler, IDisposable +{ + private readonly VulkanContext context; + private readonly Sampler sampler; + + public uint Handle => unchecked((uint)sampler.Handle); + + public VulkanSampler(VulkanContext context, SamplerDesc desc) + { + this.context = context; + sampler = CreateSampler(desc); + } + + public unsafe void Dispose() + { + context.Api!.DestroySampler( + context.LogicalDevice.Device, + sampler, + null); + } + + private unsafe Sampler CreateSampler(SamplerDesc desc) + { + SamplerCreateInfo info = new() + { + SType = StructureType.SamplerCreateInfo, + + MagFilter = Filter.Linear, + MinFilter = Filter.Linear, + + AddressModeU = SamplerAddressMode.Repeat, + AddressModeV = SamplerAddressMode.Repeat, + AddressModeW = SamplerAddressMode.Repeat, + + AnisotropyEnable = false, + MaxAnisotropy = 1, + + BorderColor = BorderColor.IntOpaqueBlack, + + UnnormalizedCoordinates = false, + + CompareEnable = false, + CompareOp = CompareOp.Always, + + MipmapMode = SamplerMipmapMode.Linear + }; + + if (context.Api!.CreateSampler( + context.LogicalDevice.Device, + &info, + null, + out var result) != Result.Success) + { + throw new VulkanException("Failed to create Vulkan sampler."); + } + + return result; + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs b/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs new file mode 100644 index 0000000..6f1ef76 --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs @@ -0,0 +1,182 @@ +using System.Numerics; +using System.Runtime.InteropServices; +using Drawie.Backend.Shaders.Common; +using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Vulkan.Exceptions; +using Drawie.RenderApi.Vulkan.Stages.Builders; +using Silk.NET.Vulkan; +using Buffer = System.Buffer; + +namespace Drawie.RenderApi.Vulkan; + +internal sealed class VulkanShaderProgram : IShaderProgram +{ + public VulkanContext Context { get; } + public ShaderProgramDesc Description { get; } + public List UniformBlocks { get; private set; } = new(); + + public GraphicsPipelineStageBuilder VertexStageBuilder { get; } + public GraphicsPipelineStageBuilder FragmentStageBuilder { get; } + public DescriptorSetLayout DescriptorSetLayout { get; set; } + + public VulkanShaderProgram(VulkanContext context, ShaderProgramDesc desc) + { + Context = context; + Description = desc; + + foreach (var shader in desc.Shaders) + { + GraphicsPipelineStageBuilder stageBuilder = + new GraphicsPipelineStageBuilder(Context.Api, Context.LogicalDevice.Device); + + stageBuilder.ShaderBytes = shader.Bytes; + stageBuilder.EntryName = shader.EntryName; + if (shader.Type == ShaderType.Vertex) + { + VertexStageBuilder = stageBuilder; + stageBuilder.Type = GraphicsPipelineStageType.Vertex; + } + else if (shader.Type == ShaderType.Fragment) + { + FragmentStageBuilder = stageBuilder; + stageBuilder.Type = GraphicsPipelineStageType.Fragment; + } + else + { + throw new NotImplementedException("Unsupported shader type."); + } + } + + DescriptorSetLayout = CreateDescriptorSetLayout(); + } + + public void Use() + { + } + + public void UpdateUniforms(List blocks) + { + UniformBlocks = new List(blocks); + foreach (var uniformBlock in UniformBlocks) + { + Serialize(uniformBlock); + } + } + + private void Serialize(UniformBlock block) + { + var data = new byte[block.ShaderLayout.Size]; + + foreach (var property in block.Properties) + { + var layout = block.ShaderLayout.UniformProperties + .FirstOrDefault(x => x.Name == property.UniformName); + + Write( + data, + layout.Offset, + property.ObjValue); + } + + // TODO: Write to shader + } + + private void Write( + byte[] destination, + int offset, + object value) + { + switch (value) + { + case float v: + BitConverter.TryWriteBytes( + destination.AsSpan(offset, sizeof(float)), + v); + break; + + case int v: + BitConverter.TryWriteBytes( + destination.AsSpan(offset, sizeof(int)), + v); + break; + + case uint v: + BitConverter.TryWriteBytes( + destination.AsSpan(offset, sizeof(uint)), + v); + break; + + case Vector2 v: + MemoryMarshal.Write( + destination.AsSpan(offset), + in v); + break; + + case Vector3 v: + MemoryMarshal.Write( + destination.AsSpan(offset), + in v); + break; + + case Vector4 v: + MemoryMarshal.Write( + destination.AsSpan(offset), + in v); + break; + + case Matrix4x4 v: + MemoryMarshal.Write( + destination.AsSpan(offset), + in v); + break; + + default: + throw new NotSupportedException( + $"Cannot serialize uniform value of type {value.GetType()}."); + } + } + + private unsafe DescriptorSetLayout CreateDescriptorSetLayout() + { + DescriptorSetLayoutBinding[] bindings = + [ + new() + { + Binding = 0, + DescriptorType = DescriptorType.UniformBuffer, + DescriptorCount = 1, + StageFlags = ShaderStageFlags.VertexBit + }, + + new() + { + Binding = 1, + DescriptorType = DescriptorType.CombinedImageSampler, + DescriptorCount = 1, + StageFlags = ShaderStageFlags.FragmentBit + } + ]; + + fixed (DescriptorSetLayoutBinding* bindingPtr = bindings) + { + DescriptorSetLayoutCreateInfo info = new() + { + SType = StructureType.DescriptorSetLayoutCreateInfo, + BindingCount = (uint)bindings.Length, + PBindings = bindingPtr + }; + + if (Context.Api!.CreateDescriptorSetLayout( + Context.LogicalDevice.Device, + in info, + null, + out var layout) != Result.Success) + { + throw new VulkanException( + "Failed to create Vulkan descriptor set layout."); + } + + return layout; + } + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanStorageBuffer.cs b/src/Drawie.RenderApi.Vulkan/VulkanStorageBuffer.cs new file mode 100644 index 0000000..2ae1b7f --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanStorageBuffer.cs @@ -0,0 +1,14 @@ +using Drawie.RenderApi.Abstraction.Buffers; +using Drawie.RenderApi.Vulkan.Buffers; +using Silk.NET.Vulkan; + +namespace Drawie.RenderApi.Vulkan; + +internal sealed class VulkanStorageBuffer : BufferObject +{ + public VulkanStorageBuffer(VulkanContext context, ulong size) + : base(context.Api!, context.LogicalDevice.Device, context.PhysicalDevice, size, BufferUsageFlags.StorageBufferBit, + MemoryPropertyFlags.HostVisibleBit | MemoryPropertyFlags.HostCoherentBit, BufferUsage.Storage) + { + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/WebGlBuffer.cs b/src/Drawie.RenderApi.WebGl/WebGlBuffer.cs index 575c65f..0cf62ac 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlBuffer.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlBuffer.cs @@ -11,7 +11,7 @@ public class WebGlBuffer : IBuffer where TData : unmanaged public int Id { get; } public int Gl { get; } public BufferUsage Usage { get; } - public uint Size { get; } + public ulong Size { get; } public WebGlBuffer(int gl, BufferUsage usage, TData[]? data = null) { diff --git a/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs b/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs index 465ffcf..80d6cf0 100644 --- a/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs +++ b/src/Drawie.RenderApi/Abstraction/Buffers/BufferUsage.cs @@ -6,4 +6,6 @@ public enum BufferUsage Index, Uniform, Storage, + Transfer, + Other, } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs b/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs index 61b3187..253a18c 100644 --- a/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs +++ b/src/Drawie.RenderApi/Abstraction/Buffers/IBuffer.cs @@ -7,5 +7,5 @@ public interface IBuffer public interface IBuffer : IBuffer where T : unmanaged { - public uint Size { get; } + public ulong Size { get; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs index 05c5af0..258544e 100644 --- a/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs @@ -16,7 +16,14 @@ protected void RecordInstruction(Action instruction) protected RecordedRenderPass ToRenderPass() { - return new RecordedRenderPass(instructions.ToArray()); + var execute = () => + { + foreach (var instruction in instructions) + { + instruction.Invoke(); + } + }; + return new RecordedRenderPass(execute); } protected void ClearInstructions() diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/RecordedRenderPass.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/RecordedRenderPass.cs index 9432d51..0f08ec3 100644 --- a/src/Drawie.RenderApi/Abstraction/CommandRecording/RecordedRenderPass.cs +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/RecordedRenderPass.cs @@ -2,10 +2,15 @@ namespace Drawie.RenderApi.Abstraction.CommandRecording; public class RecordedRenderPass { - public Action[] Instructions { get; } + public Action Execute { get; init; } - public RecordedRenderPass(Action[] instructions) + public RecordedRenderPass() { - Instructions = instructions; + + } + + public RecordedRenderPass(Action execute) + { + Execute = execute; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs b/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs index bae658b..a242ed1 100644 --- a/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs +++ b/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs @@ -4,6 +4,6 @@ namespace Drawie.RenderApi.Abstraction.RenderTargets; public interface IRenderTarget { - uint FramebufferId { get; } + ulong FramebufferId { get; } VecI Size { get; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/IGraphicsContext.cs b/src/Drawie.RenderApi/IGraphicsContext.cs index 4163e7f..1230ed0 100644 --- a/src/Drawie.RenderApi/IGraphicsContext.cs +++ b/src/Drawie.RenderApi/IGraphicsContext.cs @@ -4,6 +4,5 @@ namespace Drawie.RenderApi; public interface IGraphicsContext { - public bool OwnsTexture(ITexture nativeTexture); public void MakeCurrent(); } \ No newline at end of file diff --git a/src/Drawie.RenderApi/IVulkanRenderApi.cs b/src/Drawie.RenderApi/IVulkanRenderApi.cs index 188038e..33b6c31 100644 --- a/src/Drawie.RenderApi/IVulkanRenderApi.cs +++ b/src/Drawie.RenderApi/IVulkanRenderApi.cs @@ -1,3 +1,5 @@ +using Drawie.RenderApi.Abstraction; + namespace Drawie.RenderApi; public interface IVulkanRenderApi : IRenderApi diff --git a/src/Drawie.Rendering/IGraphicsStore.cs b/src/Drawie.Rendering/IGraphicsStore.cs index 06bb871..6ad5e78 100644 --- a/src/Drawie.Rendering/IGraphicsStore.cs +++ b/src/Drawie.Rendering/IGraphicsStore.cs @@ -37,11 +37,6 @@ public Texture Create(VecI size) public Texture CreateNativeRenderSurface(VecI size, ITexture nativeTexture, SurfaceOrigin origin) { - if (!GraphicsContext.OwnsTexture(nativeTexture)) - { - throw new ArgumentException("The given native texture is not owned by this graphics store."); - } - textures.Add(new Texture( NativeTexture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, nativeTexture, origin)))); return textures[^1]; diff --git a/src/Drawie.Rendering/Texture.cs b/src/Drawie.Rendering/Texture.cs index 3b565c5..ca3fcf9 100644 --- a/src/Drawie.Rendering/Texture.cs +++ b/src/Drawie.Rendering/Texture.cs @@ -15,27 +15,8 @@ public class Texture : ITexture public int Width { get; } public int Height { get; } public VecI Size => new VecI(Width, Height); - public ulong TextureId - { - get - { - if(lastSnapshot == null) Snapshot(true); - - return lastSnapshot.TextureId; - } - } + public ulong TextureId => NativeTexture.TextureId; - public Image Image - { - get - { - if(lastSnapshot == null) Snapshot(true); - - return lastSnapshot; - } - } - - private Image? lastSnapshot; internal Texture(NativeTexture native) { @@ -43,10 +24,4 @@ internal Texture(NativeTexture native) Width = native.Size.X; Height = native.Size.Y; } - - public void Snapshot(bool force = false) - { - if(lastSnapshot != null || force) - lastSnapshot = NativeTexture.DrawingSurface.TextureSnapshot(); - } } \ No newline at end of file diff --git a/src/Drawie.Rendering/TextureFramebuffer.cs b/src/Drawie.Rendering/TextureFramebuffer.cs index e8ca995..5db8b7e 100644 --- a/src/Drawie.Rendering/TextureFramebuffer.cs +++ b/src/Drawie.Rendering/TextureFramebuffer.cs @@ -68,7 +68,7 @@ public void Dispose() syncSurf.DrawingSurface.Canvas.DrawSurface(UnderlyingTexture.NativeTexture.DrawingSurface, 0, 0); } - uint IRenderTarget.FramebufferId => UnderlyingTexture.NativeTexture.FramebufferId; + ulong IRenderTarget.FramebufferId => UnderlyingTexture.NativeTexture.FramebufferId; private static NativeTexture syncSurf = new NativeTexture(new VecI(1, 1)); } \ No newline at end of file diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index ea88462..7b20496 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -26,6 +26,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -53,6 +54,8 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/Drawie2Sample/Cub.cs b/src/Drawie2Sample/Cub.cs deleted file mode 100644 index dbdf281..0000000 --- a/src/Drawie2Sample/Cub.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Numerics; -using Drawie.Backend.Vertie.Core; - -namespace Drawie2Sample; - -public class Cub : Mesh -{ - private static Vector3[] Vertices = new[] - { - new Vector3(-0.5f, -0.5f, -0.5f), - new Vector3(0.5f, -0.5f, -0.5f), - new Vector3(0.5f, 0.5f, -0.5f), - new Vector3(-0.5f, 0.5f, -0.5f), - new Vector3(-0.5f, -0.5f, 0.5f), - new Vector3(0.5f, -0.5f, 0.5f), - new Vector3(0.5f, 0.5f, 0.5f), - new Vector3(-0.5f, 0.5f, 0.5f) - }; - - private static Vector3[] Normals = new[] - { - new Vector3(0, 0, -1), - new Vector3(0, 0, 1), - new Vector3(-1, 0, 0), - new Vector3(1, 0, 0), - new Vector3(0, -1, 0), - new Vector3(0, 1, 0) - }; - - private static Vector2[] TexCoords = new Vector2[] - { - new Vector2(0, 0), - new Vector2(1, 0), - new Vector2(1, 1), - new Vector2(0, 1), - new Vector2(0, 0), - new Vector2(1, 0), - new Vector2(1, 1), - new Vector2(0, 1) - }; - - private static uint[] Indices = new uint[] - { - 0, 1, 2, 2, 3, 0, - 4, 5, 6, 6, 7, 4, - 0, 1, 5, 5, 4, 0, - 2, 3, 7, 7, 6, 2, - 0, 3, 7, 7, 4, 0, - 1, 2, 6, 6, 5, 1 - }; - - public Cub() : base(Vertices, Indices, Normals, TexCoords) - { - } - - public Cub(string path) : base(path) - { - } -} \ No newline at end of file diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index ca10544..eae994a 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -9,6 +9,7 @@ using Drawie.Backend.Vertie.Rendering; using Drawie.Host; using Drawie.Host.Input; +using Drawie.Layer.UI.ImGui; using Drawie.Numerics; using Drawie.Rendering; using DrawiEngine; @@ -76,7 +77,7 @@ protected override void OnInitialize() }; camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); - Mesh mesh = new Cub(); //new Mesh("Assets/teapot.obj"); + Mesh mesh = new Mesh("Assets/teapot.obj"); RegisterMouse(window.InputController); diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index eaa24cb..444e8e4 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(); Drawie2SampleApp app = new Drawie2SampleApp(); From b2acf62128d13a709a538a544f1caed4fbf9cb7e Mon Sep 17 00:00:00 2001 From: flabbet Date: Fri, 14 Aug 2026 21:56:04 +0200 Subject: [PATCH 19/55] some progress --- .../Helpers/TextureFramebufferExtensions.cs | 10 ++-- .../Shaders/BasicVertex.slang | 52 +++++++++++++++---- .../Shaders/BasicVertex.slang.bak | 52 ------------------- src/Drawie.Backend.Vertie/Shaders/Unlit.slang | 15 +++++- .../Shaders/Unlit.slang.bak | 15 ------ .../Compilation/ShaderCompiler.cs | 3 +- 6 files changed, 61 insertions(+), 86 deletions(-) delete mode 100644 src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang.bak delete mode 100644 src/Drawie.Backend.Vertie/Shaders/Unlit.slang.bak diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 82bbc64..a4261ba 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -70,12 +70,12 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came cmdList.SetBuffers(mesh.Buffers); - //material.Use(camera); - //material.PrepareForObject(mesh.Transform); + material.Use(camera); + material.PrepareForObject(mesh.Transform); - //shader.UpdateUniforms(material.Properties.Values.ToList()); + shader.UpdateUniforms(material.Properties.Values.ToList()); - /*for (var i = 0; i < material.Textures.Count; i++) + for (var i = 0; i < material.Textures.Count; i++) { var materialTexture = material.Textures[i]; var sampler = cachedSamplers.GetValueOrDefault(materialTexture); @@ -86,7 +86,7 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came } cmdList.BindTexture(materialTexture, sampler); - }*/ + } cmdList.DrawIndexed(mesh.IndexCount); var recordedRenderPass = cmdList.EndRenderPass(fb); diff --git a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang index 28b540e..46a3771 100644 --- a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang +++ b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang @@ -1,20 +1,52 @@ +struct VertexInput +{ + float3 vPos : POSITION; + float3 vNormal : NORMAL; + float2 vTexCoords : TEXCOORD0; +}; + struct VertexOutput { - float4 position : SV_Position; + float4 position : SV_Position; + float3 fNormal : TEXCOORD0; + float3 fPos : TEXCOORD1; + float2 fTexCoords : TEXCOORD2; }; -[shader("vertex")] -VertexOutput VSMain(uint vertexId : SV_VertexID) +[[vk::binding(0, 0)]] +cbuffer Transform { - float2 positions[3] = - { - float2(-0.5, -0.5), - float2( 0.5, -0.5), - float2( 0.0, 0.5) - }; + float4x4 uModel; + float4x4 uView; + float4x4 uProjection; +}; +[shader("vertex")] +VertexOutput VSMain(VertexInput input) +{ VertexOutput output; - output.position = float4(positions[vertexId], 0.0, 1.0); + + output.position = mul( + mul( + mul(uProjection, uView), + uModel + ), + float4(input.vPos, 1.0) + ); + + output.fPos = mul( + uModel, + float4(input.vPos, 1.0) + ).xyz; + + float3x3 model3x3 = float3x3(uModel); + + output.fNormal = mul( + float3x3(uModel), + input.vNormal + ); + + output.fTexCoords = input.vTexCoords; return output; } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang.bak b/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang.bak deleted file mode 100644 index 46a3771..0000000 --- a/src/Drawie.Backend.Vertie/Shaders/BasicVertex.slang.bak +++ /dev/null @@ -1,52 +0,0 @@ -struct VertexInput -{ - float3 vPos : POSITION; - float3 vNormal : NORMAL; - float2 vTexCoords : TEXCOORD0; -}; - -struct VertexOutput -{ - float4 position : SV_Position; - float3 fNormal : TEXCOORD0; - float3 fPos : TEXCOORD1; - float2 fTexCoords : TEXCOORD2; -}; - -[[vk::binding(0, 0)]] -cbuffer Transform -{ - float4x4 uModel; - float4x4 uView; - float4x4 uProjection; -}; - -[shader("vertex")] -VertexOutput VSMain(VertexInput input) -{ - VertexOutput output; - - output.position = mul( - mul( - mul(uProjection, uView), - uModel - ), - float4(input.vPos, 1.0) - ); - - output.fPos = mul( - uModel, - float4(input.vPos, 1.0) - ).xyz; - - float3x3 model3x3 = float3x3(uModel); - - output.fNormal = mul( - float3x3(uModel), - input.vNormal - ); - - output.fTexCoords = input.vTexCoords; - - return output; -} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang index 254fd2d..31d00b8 100644 --- a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang +++ b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang @@ -1,5 +1,16 @@ +struct FragmentInput +{ + float3 fNormal : TEXCOORD0; + float3 fPos : TEXCOORD1; + float2 fTexCoords : TEXCOORD2; +}; + +[[vk::binding(0, 0)]] +Sampler2D uTexture; + [shader("fragment")] -float4 PSMain() : SV_Target +float4 PSMain(FragmentInput input) : SV_Target { - return float4(1.0, 0.0, 1.0, 1.0); + return float4(1, 0, 0, 1); + return uTexture.Sample(input.fTexCoords); } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang.bak b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang.bak deleted file mode 100644 index 3691d88..0000000 --- a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang.bak +++ /dev/null @@ -1,15 +0,0 @@ -struct FragmentInput -{ - float3 fNormal : TEXCOORD0; - float3 fPos : TEXCOORD1; - float2 fTexCoords : TEXCOORD2; -}; - -[[vk::binding(0, 0)]] -Sampler2D uTexture; - -[shader("fragment")] -float4 PSMain(FragmentInput input) : SV_Target -{ - return uTexture.Sample(input.fTexCoords); -} \ No newline at end of file diff --git a/src/Drawie.ShaderCompiler/Compilation/ShaderCompiler.cs b/src/Drawie.ShaderCompiler/Compilation/ShaderCompiler.cs index c4bcfb7..dd314c5 100644 --- a/src/Drawie.ShaderCompiler/Compilation/ShaderCompiler.cs +++ b/src/Drawie.ShaderCompiler/Compilation/ShaderCompiler.cs @@ -24,8 +24,7 @@ public void Compile(string sourceCode, CompilationTarget target) [ "-matrix-layout-column-major", "-fvk-use-entrypoint-name", - "-emit-spirv-via-glsl", - "-profile", "glsl_330", + "-target", "spirv", ], out var reflection); From d0322829dade5b3425ca40709a538b0e8d4e9407 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 15 Aug 2026 10:53:34 +0200 Subject: [PATCH 20/55] Got vulkan to render correctly --- src/Drawie.Backend.Vertie/Shaders/Unlit.slang | 1 - .../OpenGlCommandList.cs | 2 +- src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs | 4 +- src/Drawie.RenderApi.Vulkan/Primitives.cs | 2 +- .../Builders/GraphicsPipelineBuilder.cs | 19 ++- .../GraphicsPipelineVertexLayoutBuilder.cs | 64 ++++++++ .../Structs/{Vertex.cs => Vertex2D.cs} | 10 +- .../VulkanCommandList.cs | 141 +++++------------- .../VulkanHostViewRenderApi.cs | 3 +- src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs | 16 +- src/Drawie.RenderApi.Vulkan/VulkanSampler.cs | 9 +- .../VulkanShaderProgram.cs | 121 +++++++++++++-- .../Enums/WebGlCommandList.cs | 2 +- src/Drawie.RenderApi.WebGl/WebGlPipeline.cs | 2 +- .../Abstraction/Pipeline/IPipeline.cs | 3 +- src/Drawie.sln.DotSettings.user | 1 + src/DrawieSample.Desktop/Program.cs | 2 +- 17 files changed, 265 insertions(+), 137 deletions(-) create mode 100644 src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineVertexLayoutBuilder.cs rename src/Drawie.RenderApi.Vulkan/Structs/{Vertex.cs => Vertex2D.cs} (79%) diff --git a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang index 31d00b8..3691d88 100644 --- a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang +++ b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang @@ -11,6 +11,5 @@ Sampler2D uTexture; [shader("fragment")] float4 PSMain(FragmentInput input) : SV_Target { - return float4(1, 0, 0, 1); return uTexture.Sample(input.fTexCoords); } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index 4f66d20..36e9c34 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -32,7 +32,7 @@ public override void BeginRenderPass(IRenderTarget fb) public override void SetPipeline(IPipeline pipeline) { - RecordInstruction(pipeline.Apply); + RecordInstruction(() => pipeline.Apply(this)); } public override void SetBuffers(IBufferGroup bufferGroup) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs index a859a8e..3db6539 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs @@ -1,5 +1,7 @@ using System.Drawing; +using System.Windows.Input; using Drawie.Backend.Vertie.Core; +using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; using Silk.NET.OpenGL; @@ -16,7 +18,7 @@ public OpenGlPipeline(PipelineDesc description, GL api) Api = api; } - public void Apply() + public void Apply(ICommandList list) { Api.Viewport(new Rectangle(Description.Viewport.X, Description.Viewport.Y, Description.Viewport.Width, Description.Viewport.Height)); diff --git a/src/Drawie.RenderApi.Vulkan/Primitives.cs b/src/Drawie.RenderApi.Vulkan/Primitives.cs index 6dfbfa8..cce21c6 100644 --- a/src/Drawie.RenderApi.Vulkan/Primitives.cs +++ b/src/Drawie.RenderApi.Vulkan/Primitives.cs @@ -5,7 +5,7 @@ namespace Drawie.RenderApi.Vulkan; public static class Primitives { - public static Vertex[] Vertices = new Vertex[] + public static Vertex2D[] Vertices = new Vertex2D[] { new() { diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs index ccae395..ad81337 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs @@ -10,6 +10,7 @@ public class GraphicsPipelineBuilder public Device LogicalDevice { get; set; } public List Stages { get; } = new(); public RenderPassBuilder RenderPassBuilder { get; set; } + public GraphicsPipelineVertexLayoutBuilder VertexLayoutBuilder { get; set; } public bool HasDepthStencil { get; set; } @@ -29,6 +30,16 @@ public GraphicsPipelineBuilder AddStage(Action sta return this; } + public GraphicsPipelineBuilder WithVertexLayout(Action vertexLayoutBuilder) + { + GraphicsPipelineVertexLayoutBuilder builder = new GraphicsPipelineVertexLayoutBuilder(); + + vertexLayoutBuilder(builder); + + VertexLayoutBuilder = builder; + return this; + } + public GraphicsPipelineBuilder WithRenderPass(Action renderPassBuilder) { RenderPassBuilder = new(Vk, LogicalDevice); @@ -49,14 +60,14 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain if (Stages.Count == 0) throw new GraphicsPipelineBuilderException("No stages were added to the pipeline."); if (RenderPassBuilder == null) throw new GraphicsPipelineBuilderException("No render pass was added to the pipeline."); + if(VertexLayoutBuilder == null) throw new GraphicsPipelineBuilderException("No vertex layout was added to the pipeline."); RenderPass renderPass = RenderPassBuilder.Create(swapChainImageFormat, finalLayout); var stages = stackalloc PipelineShaderStageCreateInfo[Stages.Count]; for (var i = 0; i < Stages.Count; i++) stages[i] = Stages[i].Build(); - var bindingDescription = Vertex.GetBindingDescription(); - var attributeDescriptions = Vertex.GetAttributeDescriptions(); + var (bindingDescription, attributeDescriptions) = VertexLayoutBuilder.Build(); fixed (VertexInputAttributeDescription* attributeDescriptionsPtr = attributeDescriptions) fixed (DescriptorSetLayout* descriptorPtr = &descriptorSetLayout) @@ -81,8 +92,8 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain { X = 0.0f, Y = 0.0f, - Width = (float)swapChainExtent.Width, - Height = (float)swapChainExtent.Height, + Width = swapChainExtent.Width, + Height = swapChainExtent.Height, MinDepth = 0.0f, MaxDepth = 1.0f }; diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineVertexLayoutBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineVertexLayoutBuilder.cs new file mode 100644 index 0000000..31f1cc0 --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineVertexLayoutBuilder.cs @@ -0,0 +1,64 @@ +using Silk.NET.Vulkan; + +namespace Drawie.RenderApi.Vulkan.Stages.Builders; + +public class GraphicsPipelineVertexLayoutBuilder +{ + public List Components { get; set; } = new(); + public uint Binding { get; set; } = 0; + + + public GraphicsPipelineVertexLayoutBuilder WithVec2() + { + Components.Add(new VertexAttributeLayout { ComponentCount = 2, Format = Format.R32G32Sfloat }); + return this; + } + + public GraphicsPipelineVertexLayoutBuilder WithVec3() + { + Components.Add(new VertexAttributeLayout() { ComponentCount = 3, Format = Format.R32G32B32Sfloat }); + return this; + } + + public unsafe (VertexInputBindingDescription, VertexInputAttributeDescription[]) Build() + { + int stride = 0; + foreach (var component in Components) + { + stride += component.Size; + } + + var bindingDesc = new VertexInputBindingDescription + { + Binding = Binding, + Stride = (uint)stride, + InputRate = VertexInputRate.Vertex + }; + + var descriptions = new VertexInputAttributeDescription[Components.Count]; + int offset = 0; + for (var index = 0; index < Components.Count; index++) + { + var component = Components[index]; + descriptions[index] = new VertexInputAttributeDescription() + { + Binding = Binding, + Location = (uint)index, + Format = component.Format, + Offset = (uint)offset, + }; + + offset += component.ComponentCount * sizeof(float); + } + + return (bindingDesc, descriptions); + } +} + +public struct VertexAttributeLayout +{ + public Format Format { get; set; } + public int ComponentCount { get; set; } + + public int Size => ComponentCount * sizeof(float); +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/Structs/Vertex.cs b/src/Drawie.RenderApi.Vulkan/Structs/Vertex2D.cs similarity index 79% rename from src/Drawie.RenderApi.Vulkan/Structs/Vertex.cs rename to src/Drawie.RenderApi.Vulkan/Structs/Vertex2D.cs index bc26a4a..aba56ba 100644 --- a/src/Drawie.RenderApi.Vulkan/Structs/Vertex.cs +++ b/src/Drawie.RenderApi.Vulkan/Structs/Vertex2D.cs @@ -5,7 +5,7 @@ namespace Drawie.RenderApi.Vulkan.Structs; -public struct Vertex +public struct Vertex2D { public Vector2D Position; public Vector3D Color; @@ -16,7 +16,7 @@ public static VertexInputBindingDescription GetBindingDescription() return new VertexInputBindingDescription { Binding = 0, - Stride = (uint)Unsafe.SizeOf(), + Stride = (uint)Unsafe.SizeOf(), InputRate = VertexInputRate.Vertex }; } @@ -30,21 +30,21 @@ public static VertexInputAttributeDescription[] GetAttributeDescriptions() Binding = 0, Location = 0, Format = Format.R32G32Sfloat, - Offset = (uint)Marshal.OffsetOf(nameof(Position)) + Offset = (uint)Marshal.OffsetOf(nameof(Position)) }, new VertexInputAttributeDescription { Binding = 0, Location = 1, Format = Format.R32G32B32Sfloat, - Offset = (uint)Marshal.OffsetOf(nameof(Color)) + Offset = (uint)Marshal.OffsetOf(nameof(Color)) }, new VertexInputAttributeDescription() { Binding = 0, Location = 2, Format = Format.R32G32Sfloat, - Offset = (uint)Marshal.OffsetOf(nameof(TexCoord)) + Offset = (uint)Marshal.OffsetOf(nameof(TexCoord)) } }; } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 10899ed..57e2afe 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -11,6 +11,7 @@ namespace Drawie.RenderApi.Vulkan; internal sealed class VulkanCommandList : CommandList, IDisposable { + public CommandBuffer CommandBuffer => commandBuffer; private readonly VulkanContext context; private readonly CommandPool commandPool; @@ -19,7 +20,6 @@ internal sealed class VulkanCommandList : CommandList, IDisposable private VulkanRenderTarget? renderTarget; private VulkanPipeline? pipeline; - private VulkanBufferGroup? buffers; public VulkanCommandList( VulkanContext context, @@ -40,6 +40,7 @@ public override void BeginRenderPass(IRenderTarget fb) "Render target must be a Vulkan render target.", nameof(fb)); + pipeline = null; renderTarget = target; commandBuffer = AllocateCommandBuffer(); @@ -57,17 +58,10 @@ public override void SetPipeline(IPipeline pipeline) throw new InvalidOperationException( "BeginRenderPass must be called first."); - if (pipeline is not VulkanPipeline vkPipeline) - throw new ArgumentException( - "Pipeline must be a Vulkan pipeline.", - nameof(pipeline)); - + if (pipeline is not VulkanPipeline vkPipeline) throw new ArgumentException("Only VulkanPipeline is supported"); + + pipeline.Apply(this); this.pipeline = vkPipeline; - - context.Api!.CmdBindPipeline( - commandBuffer, - PipelineBindPoint.Graphics, - vkPipeline.Pipeline); } public override void SetBuffers(IBufferGroup bufferGroup) @@ -81,8 +75,6 @@ public override void SetBuffers(IBufferGroup bufferGroup) "Buffer group must be a Vulkan buffer group.", nameof(bufferGroup)); - buffers = vkBuffers; - BindBuffers(vkBuffers); } @@ -229,8 +221,6 @@ private unsafe void BeginRendering(VulkanRenderTarget target) if (target.Texture.DepthAttachment is not null) { - //target.Texture.DepthAttachment.MakeDepthAttachment(commandBuffer); - depthAttachment = new RenderingAttachmentInfo { SType = StructureType.RenderingAttachmentInfo, @@ -299,20 +289,45 @@ private unsafe void BindBuffers(VulkanBufferGroup group) }); } - private void BindTextureDescriptor( + private unsafe void BindTextureDescriptor( VulkanTexture texture, VulkanSampler sampler) { - // TODO: Implement - /*context.Api!.CmdBindDescriptorSets( + var imageInfo = new DescriptorImageInfo + { + Sampler = sampler.VkSampler, + ImageView = texture.ColorAttachment.View, + ImageLayout = ImageLayout.ShaderReadOnlyOptimal + }; + + var write = new WriteDescriptorSet + { + SType = StructureType.WriteDescriptorSet, + DstSet = pipeline.DescriptorSet, + DstBinding = 1, + DstArrayElement = 0, + DescriptorCount = 1, + DescriptorType = DescriptorType.CombinedImageSampler, + PImageInfo = &imageInfo + }; + + context.Api!.UpdateDescriptorSets( + context.LogicalDevice.Device, + 1, + &write, + 0, + null); + + var set = pipeline.DescriptorSet; + context.Api!.CmdBindDescriptorSets( commandBuffer, PipelineBindPoint.Graphics, pipeline.GraphicsPipeline.VkPipelineLayout, 0, 1, - in descriptorSet, + in set, 0, - null);*/ + null); } @@ -320,11 +335,6 @@ private void Blit( VulkanTexture source, VulkanTexture destination) { - /* - TransitionForBlitSource(source); - TransitionForBlitDestination(destination, ImageLayout.TransferDstOptimal); - */ - source.ColorAttachment.TransitionLayout(ImageLayout.TransferSrcOptimal, commandBuffer); destination.ColorAttachment.TransitionLayout(ImageLayout.TransferDstOptimal, commandBuffer); @@ -353,10 +363,11 @@ private void Blit( (int)source.Height, 1); - region.DstOffsets[0] = new Offset3D(0, 0, 0); + // Y is flipped at blit level + region.DstOffsets[0] = new Offset3D(0, (int)destination.Height, 0); region.DstOffsets[1] = new Offset3D( (int)destination.Width, - (int)destination.Height, + 0, 1); context.Api!.CmdBlitImage( @@ -372,82 +383,6 @@ private void Blit( destination.ColorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal, commandBuffer); } - /*private unsafe void TransitionForBlitSource(VulkanTexture texture) - { - ImageMemoryBarrier barrier = new() - { - SType = StructureType.ImageMemoryBarrier, - - OldLayout = ImageLayout.ColorAttachmentOptimal, - NewLayout = ImageLayout.TransferSrcOptimal, - - SrcAccessMask = AccessFlags.ColorAttachmentWriteBit, - DstAccessMask = AccessFlags.TransferReadBit, - - SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, - DstQueueFamilyIndex = Vk.QueueFamilyIgnored, - - Image = texture.VkImage, - - SubresourceRange = new ImageSubresourceRange - { - AspectMask = ImageAspectFlags.ColorBit, - BaseMipLevel = 0, - LevelCount = 1, - BaseArrayLayer = 0, - LayerCount = 1 - } - }; - - context.Api!.CmdPipelineBarrier( - commandBuffer, - PipelineStageFlags.ColorAttachmentOutputBit, - PipelineStageFlags.TransferBit, - DependencyFlags.None, - 0, null, - 0, null, - 1, &barrier); - } - - private unsafe void TransitionForBlitDestination( - VulkanTexture texture, - ImageLayout oldLayout) - { - ImageMemoryBarrier barrier = new() - { - SType = StructureType.ImageMemoryBarrier, - - OldLayout = oldLayout, - NewLayout = ImageLayout.TransferDstOptimal, - - SrcAccessMask = AccessFlags.MemoryReadBit, - DstAccessMask = AccessFlags.TransferWriteBit, - - SrcQueueFamilyIndex = Vk.QueueFamilyIgnored, - DstQueueFamilyIndex = Vk.QueueFamilyIgnored, - - Image = texture.VkImage, - - SubresourceRange = new ImageSubresourceRange - { - AspectMask = ImageAspectFlags.ColorBit, - BaseMipLevel = 0, - LevelCount = 1, - BaseArrayLayer = 0, - LayerCount = 1 - } - }; - - context.Api!.CmdPipelineBarrier( - commandBuffer, - PipelineStageFlags.AllCommandsBit, - PipelineStageFlags.TransferBit, - DependencyFlags.None, - 0, null, - 0, null, - 1, &barrier); - }*/ - public void Dispose() { diff --git a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs index ae84bac..9048008 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs @@ -553,6 +553,7 @@ private void CreateGraphicsPipeline() builder .AddStage(stage => stage.OfType(GraphicsPipelineStageType.Vertex).WithShader("Drawie.RenderApi.Vulkan.Shaders.vert.spv")) .AddStage(stage => stage.OfType(GraphicsPipelineStageType.Fragment).WithShader("Drawie.RenderApi.Vulkan.Shaders.frag.spv")) + .WithVertexLayout(layout => layout.WithVec2().WithVec3().WithVec2()) .WithRenderPass(renderPass => { /*TODO: Add some meaningful stuff*/ @@ -689,7 +690,7 @@ private unsafe void CreateIndexBuffer() private void CreateVertexBuffer() { - var bufferSize = (ulong)Marshal.SizeOf() * (ulong)Primitives.Vertices.Length; + var bufferSize = (ulong)Marshal.SizeOf() * (ulong)Primitives.Vertices.Length; using StagingBuffer stagingBuffer = new(context, bufferSize); diff --git a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs index 794d2ee..6004355 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs @@ -1,3 +1,4 @@ +using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; using Drawie.RenderApi.Vulkan.Exceptions; using Drawie.RenderApi.Vulkan.Extensions; @@ -16,6 +17,7 @@ internal sealed class VulkanPipeline : IPipeline, IDisposable public Pipeline Pipeline { get; } public GraphicsPipeline GraphicsPipeline => graphicsPipeline; + public DescriptorSet DescriptorSet => program.DescriptorSet; public GraphicsPipelineBuilder Builder { get; } @@ -38,16 +40,26 @@ public VulkanPipeline( Pipeline = graphicsPipeline.VkPipeline; } - public void Apply() + public unsafe void Apply(ICommandList cmdList) { - // Vulkan pipelines are explicitly bound by VulkanCommandList. + if(cmdList is not VulkanCommandList commandList) throw new ArgumentNullException("Only vulkan command list is supported"); + + context.Api!.CmdBindPipeline( + commandList.CommandBuffer, + PipelineBindPoint.Graphics, + Pipeline); + + var descriptorSet = program.DescriptorSet; + context.Api.CmdBindDescriptorSets(commandList.CommandBuffer, PipelineBindPoint.Graphics, GraphicsPipeline.VkPipelineLayout, 0, 1, &descriptorSet, 0, null); } private GraphicsPipeline CreatePipeline() { + Builder.WithVertexLayout(layout => layout.WithVec3().WithVec3().WithVec2()); Builder.Stages.Add(program.VertexStageBuilder); Builder.Stages.Add(program.FragmentStageBuilder); Builder.WithRenderPass(builder => {}); + Builder.WithDepth(); var descriptorSetLayout = program.DescriptorSetLayout; var pipeline = Builder.Create(new Extent2D((uint)Description.Viewport.Width, (uint)Description.Viewport.Height), Format.R8G8B8A8Unorm, ImageLayout.PresentSrcKhr, ref descriptorSetLayout); diff --git a/src/Drawie.RenderApi.Vulkan/VulkanSampler.cs b/src/Drawie.RenderApi.Vulkan/VulkanSampler.cs index d42fd79..9ca8129 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanSampler.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanSampler.cs @@ -7,21 +7,22 @@ namespace Drawie.RenderApi.Vulkan; internal sealed class VulkanSampler : ISampler, IDisposable { private readonly VulkanContext context; - private readonly Sampler sampler; + private readonly Sampler _vkSampler; - public uint Handle => unchecked((uint)sampler.Handle); + public uint Handle => unchecked((uint)_vkSampler.Handle); + public Sampler VkSampler => _vkSampler; public VulkanSampler(VulkanContext context, SamplerDesc desc) { this.context = context; - sampler = CreateSampler(desc); + _vkSampler = CreateSampler(desc); } public unsafe void Dispose() { context.Api!.DestroySampler( context.LogicalDevice.Device, - sampler, + _vkSampler, null); } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs b/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs index 6f1ef76..cc857ad 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs @@ -2,14 +2,16 @@ using System.Runtime.InteropServices; using Drawie.Backend.Shaders.Common; using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Vulkan.Buffers; using Drawie.RenderApi.Vulkan.Exceptions; +using Drawie.RenderApi.Vulkan.Extensions; using Drawie.RenderApi.Vulkan.Stages.Builders; using Silk.NET.Vulkan; using Buffer = System.Buffer; namespace Drawie.RenderApi.Vulkan; -internal sealed class VulkanShaderProgram : IShaderProgram +internal sealed class VulkanShaderProgram : IShaderProgram, IDisposable { public VulkanContext Context { get; } public ShaderProgramDesc Description { get; } @@ -18,6 +20,11 @@ internal sealed class VulkanShaderProgram : IShaderProgram public GraphicsPipelineStageBuilder VertexStageBuilder { get; } public GraphicsPipelineStageBuilder FragmentStageBuilder { get; } public DescriptorSetLayout DescriptorSetLayout { get; set; } + + public DescriptorPool DescriptorPool { get; set; } + public DescriptorSet DescriptorSet { get; set; } + + private Dictionary uniformBuffers = new Dictionary(); public VulkanShaderProgram(VulkanContext context, ShaderProgramDesc desc) { @@ -48,6 +55,8 @@ public VulkanShaderProgram(VulkanContext context, ShaderProgramDesc desc) } DescriptorSetLayout = CreateDescriptorSetLayout(); + DescriptorPool = CreateDescriptorPool(); + DescriptorSet = AllocateDescriptorSet(); } public void Use() @@ -57,16 +66,28 @@ public void Use() public void UpdateUniforms(List blocks) { UniformBlocks = new List(blocks); + foreach (var uniformBlock in UniformBlocks) { Serialize(uniformBlock); } } - + private void Serialize(UniformBlock block) { var data = new byte[block.ShaderLayout.Size]; + UniformBuffer? buffer = null; + if (uniformBuffers.TryGetValue(block.Name, out var uniformBuffer)) + { + buffer = uniformBuffer; + } + else + { + buffer = new UniformBuffer(Context.Api, Context.LogicalDevice.Device, Context.PhysicalDevice, + (ulong)block.ShaderLayout.Size); + } + foreach (var property in block.Properties) { var layout = block.ShaderLayout.UniformProperties @@ -78,7 +99,36 @@ private void Serialize(UniformBlock block) property.ObjValue); } - // TODO: Write to shader + buffer.SetData(data); + UpdateUniformDescriptor(buffer, (ulong)block.ShaderLayout.Size); + } + + private unsafe void UpdateUniformDescriptor(UniformBuffer buffer, ulong size) + { + DescriptorBufferInfo bufferInfo = new() + { + Buffer = buffer.VkBuffer, + Offset = 0, + Range = size + }; + + WriteDescriptorSet write = new() + { + SType = StructureType.WriteDescriptorSet, + DstSet = DescriptorSet, + DstBinding = 0, + DstArrayElement = 0, + DescriptorCount = 1, + DescriptorType = DescriptorType.UniformBuffer, + PBufferInfo = &bufferInfo + }; + + Context.Api.UpdateDescriptorSets( + Context.LogicalDevice.Device, + 1, + &write, + 0, + null); } private void Write( @@ -93,49 +143,89 @@ private void Write( destination.AsSpan(offset, sizeof(float)), v); break; - case int v: BitConverter.TryWriteBytes( destination.AsSpan(offset, sizeof(int)), v); break; - case uint v: BitConverter.TryWriteBytes( destination.AsSpan(offset, sizeof(uint)), v); break; - case Vector2 v: MemoryMarshal.Write( destination.AsSpan(offset), in v); break; - case Vector3 v: MemoryMarshal.Write( destination.AsSpan(offset), in v); break; - case Vector4 v: MemoryMarshal.Write( destination.AsSpan(offset), in v); break; - case Matrix4x4 v: MemoryMarshal.Write( destination.AsSpan(offset), in v); break; - default: throw new NotSupportedException( $"Cannot serialize uniform value of type {value.GetType()}."); } } + private unsafe DescriptorSet AllocateDescriptorSet() + { + DescriptorSetLayout layout = DescriptorSetLayout; + + DescriptorSetAllocateInfo allocInfo = new() + { + SType = StructureType.DescriptorSetAllocateInfo, + DescriptorPool = DescriptorPool, + DescriptorSetCount = 1, + PSetLayouts = &layout + }; + + DescriptorSet descriptorSet; + + var result = Context.Api.AllocateDescriptorSets( + Context.LogicalDevice.Device, + in allocInfo, + &descriptorSet); + + if (result != Result.Success) + throw new VulkanException( + $"Failed to allocate descriptor set: {result}"); + + return descriptorSet; + } + + private unsafe DescriptorPool CreateDescriptorPool() + { + DescriptorPoolSize poolSize = new DescriptorPoolSize() + { + Type = DescriptorType.UniformBuffer, + DescriptorCount = 1, + }; + + DescriptorPoolCreateInfo poolInfo = new() + { + SType = StructureType.DescriptorPoolCreateInfo, + PoolSizeCount = 1, + MaxSets = 2,// TODO: Check this + PPoolSizes = &poolSize + }; + + Context.Api.CreateDescriptorPool(Context.LogicalDevice.Device, &poolInfo, null, out var descriptorPool).ThrowOnError("Failed to create descriptor pool."); + + return descriptorPool; + } + private unsafe DescriptorSetLayout CreateDescriptorSetLayout() { DescriptorSetLayoutBinding[] bindings = @@ -179,4 +269,15 @@ private unsafe DescriptorSetLayout CreateDescriptorSetLayout() return layout; } } + + public unsafe void Dispose() + { + foreach (var uniformBuffer in uniformBuffers) + { + uniformBuffer.Value.Dispose(); + } + + Context.Api.DestroyDescriptorSetLayout(Context.LogicalDevice.Device, DescriptorSetLayout, null); + Context.Api.DestroyDescriptorPool(Context.LogicalDevice.Device, DescriptorPool, null); + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs index cefa6d5..59784c8 100644 --- a/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs @@ -35,7 +35,7 @@ public override void BeginRenderPass(IRenderTarget fb) public override void SetPipeline(IPipeline pipeline) { - RecordInstruction(pipeline.Apply); + RecordInstruction(() => pipeline.Apply()); } public override void SetBuffers(IBufferGroup bufferGroup) diff --git a/src/Drawie.RenderApi.WebGl/WebGlPipeline.cs b/src/Drawie.RenderApi.WebGl/WebGlPipeline.cs index 2e555d4..708c595 100644 --- a/src/Drawie.RenderApi.WebGl/WebGlPipeline.cs +++ b/src/Drawie.RenderApi.WebGl/WebGlPipeline.cs @@ -16,7 +16,7 @@ public WebGlPipeline(PipelineDesc description, int gl) Gl = gl; } - public void Apply() + public void Apply(VulkanCommandList vulkanCommandList) { JSRuntime.Viewport(Gl, Description.Viewport.X, Description.Viewport.Y, Description.Viewport.Width, Description.Viewport.Height); diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/IPipeline.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/IPipeline.cs index 21f8e20..07ba7ca 100644 --- a/src/Drawie.RenderApi/Abstraction/Pipeline/IPipeline.cs +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/IPipeline.cs @@ -1,9 +1,10 @@ using System.Collections; +using Drawie.RenderApi.Abstraction.CommandRecording; namespace Drawie.RenderApi.Abstraction.Pipeline; public interface IPipeline { PipelineDesc Description { get; } - void Apply(); + void Apply(ICommandList cmdList); } \ No newline at end of file diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 7b20496..ba2bf45 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -61,6 +61,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index 444e8e4..eaa24cb 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); Drawie2SampleApp app = new Drawie2SampleApp(); From bbf1fd36ad721d441ce6c77346dd8da2c7dc2818 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 15 Aug 2026 11:13:30 +0200 Subject: [PATCH 21/55] Fixed bindings --- src/Drawie.Backend.Vertie/Shaders/Unlit.slang | 2 +- src/Drawie2Sample/Drawie2SampleApp.cs | 2 +- src/DrawieSample.Desktop/Program.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang index 3691d88..171eb35 100644 --- a/src/Drawie.Backend.Vertie/Shaders/Unlit.slang +++ b/src/Drawie.Backend.Vertie/Shaders/Unlit.slang @@ -5,7 +5,7 @@ struct FragmentInput float2 fTexCoords : TEXCOORD2; }; -[[vk::binding(0, 0)]] +[[vk::binding(1, 0)]] Sampler2D uTexture; [shader("fragment")] diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index eae994a..84d78ea 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -59,7 +59,7 @@ protected override void OnInitialize() RenderingContext context = new RenderingContext(GraphicsStore.Global.GraphicsContext); var ctx = context.Open(); var fb = context.Edit(surf); - fb.DrawRectangle(0, 0, 512, 512, new ColorPaintable(Colors.Red)); + fb.DrawRectangle(0, 0, 512, 512, new ColorPaintable(Colors.Blue)); fb.Dispose(); ctx.Dispose(); diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index eaa24cb..444e8e4 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(); Drawie2SampleApp app = new Drawie2SampleApp(); From cbaa21b769a37df88e330775ad980091b71db628 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 15 Aug 2026 12:17:02 +0200 Subject: [PATCH 22/55] Fixed opengl skia textures and bindings --- .../Operations/ISurfaceImplementation.cs | 2 +- src/Drawie.Backend.Core/NativeTexture.cs | 8 +-- .../Surfaces/IFramebufferInfo.cs | 2 +- .../SkiaImageImplementation.cs | 10 +-- .../SkiaSurfaceImplementation.cs | 62 +++++++++++++------ src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 2 +- .../SkiaFramebufferInfo.cs | 25 -------- .../SkiaNativeSurfaceInfo.cs | 35 +++++++++++ .../OpenGlCommandList.cs | 21 ++++--- src/Drawie.RenderApi.OpenGl/OpenGlContext.cs | 12 ++-- src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 12 ++-- .../OpenGlGraphicsContext.cs | 10 +-- .../OpenGlRenderApi.cs | 2 +- .../OpenGlRenderTarget.cs | 10 +-- src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs | 2 +- .../VulkanCommandList.cs | 2 +- .../VulkanRenderTarget.cs | 2 +- .../Enums/WebGlCommandList.cs | 6 +- .../RenderTargets/IRenderTarget.cs | 2 +- src/Drawie.RenderApi/IOpenGlContext.cs | 1 + src/Drawie.Rendering/Texture.cs | 2 - src/Drawie.Rendering/TextureFramebuffer.cs | 8 +-- src/DrawieSample.Desktop/Program.cs | 2 +- 23 files changed, 141 insertions(+), 99 deletions(-) delete mode 100644 src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs create mode 100644 src/Drawie.Backend.Skia/SkiaNativeSurfaceInfo.cs diff --git a/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs b/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs index 4c98a04..ced08b2 100644 --- a/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs +++ b/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs @@ -21,6 +21,6 @@ public interface ISurfaceImplementation public RectI GetDeviceClipBounds(IntPtr drawingSurface); public void Unmanage(DrawingSurface surface); public RectD GetLocalClipBounds(IntPtr objectPointer); - IFramebufferInfo? GetFramebufferInfo(IntPtr objectPointer); + IFramebufferInfo? GetNativeSurfaceInfo(IntPtr objectPointer); } diff --git a/src/Drawie.Backend.Core/NativeTexture.cs b/src/Drawie.Backend.Core/NativeTexture.cs index cf913f4..3c294ff 100644 --- a/src/Drawie.Backend.Core/NativeTexture.cs +++ b/src/Drawie.Backend.Core/NativeTexture.cs @@ -21,7 +21,7 @@ public class NativeTexture : IDisposable, ICloneable, IPixelsMap, IFramebufferIn public ColorSpace ColorSpace { get; } public ImageInfo ImageInfo { get; } - public ulong TextureId => FramebufferId; + public ulong TextureId => SurfaceId; private DrawingSurface? cpuSurface; private Pixmap? cpuPixmap; @@ -411,7 +411,7 @@ public void SaveToDesktop() } #endif - public ulong FramebufferId => - DrawingBackendApi.Current.SurfaceImplementation.GetFramebufferInfo(DrawingSurface.ObjectPointer) - ?.FramebufferId ?? throw new Exception("Framebuffer info not available."); + public ulong SurfaceId => + DrawingBackendApi.Current.SurfaceImplementation.GetNativeSurfaceInfo(DrawingSurface.ObjectPointer) + ?.SurfaceId ?? throw new Exception("Framebuffer info not available."); } \ No newline at end of file diff --git a/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs b/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs index 661f783..f4ce9ca 100644 --- a/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs +++ b/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs @@ -2,5 +2,5 @@ namespace Drawie.Backend.Core.Surfaces; public interface IFramebufferInfo { - public ulong FramebufferId { get; } + public ulong SurfaceId { get; } } \ No newline at end of file diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs index c135bdb..d7f6929 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaImageImplementation.cs @@ -136,11 +136,11 @@ public Image Snapshot(DrawingSurface drawingSurface, RectI bounds) SKAlphaType.Premul); }*/ - internal SKImage? CreateFromFramebuffer(SkiaFramebufferInfo skiaFramebufferInfo, VecI size, SurfaceOrigin surfaceOrigin, out ITexture fbInfo) + internal SKImage? CreateFromFramebuffer(SkiaNativeSurfaceInfo skiaNativeSurfaceInfo, VecI size, SurfaceOrigin surfaceOrigin, out ITexture fbInfo) { - if (skiaFramebufferInfo.VkImageInfo != null) + if (skiaNativeSurfaceInfo.VkImageInfo != null) { - var imageInfo = skiaFramebufferInfo.VkImageInfo.Value; + var imageInfo = skiaNativeSurfaceInfo.VkImageInfo.Value; var backendRenderTarget = new GRBackendTexture(size.X, size.Y, imageInfo); var surface = SKImage.FromTexture(_surfaceImplementation.GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888, SKAlphaType.Premul); @@ -149,9 +149,9 @@ public Image Snapshot(DrawingSurface drawingSurface, RectI bounds) return surface; } - if (skiaFramebufferInfo.GlFramebufferInfo != null) + if (skiaNativeSurfaceInfo.GlFramebufferInfo != null) { - uint textureId = skiaFramebufferInfo.GlFramebufferInfo.Value.FramebufferObjectId; + uint textureId = skiaNativeSurfaceInfo.GlFramebufferInfo.Value.FramebufferObjectId; const uint OpenGlTexture2D = 3553; const uint RGBA8 = 0x8058; diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index b16ee5b..f6c9cd6 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -17,7 +17,7 @@ public class SkiaSurfaceImplementation : SkObjectImplementation, ISur private readonly SkiaPixmapImplementation _pixmapImplementation; private readonly SkiaCanvasImplementation _canvasImplementation; private readonly SkiaPaintImplementation _paintImplementation; - private Dictionary framebufferInfos = new Dictionary(); + private Dictionary nativeSurfaceInfos = new Dictionary(); internal GRContext? GrContext { get; set; } internal IGraphicsDevice GraphicsDevice { get; set; } @@ -138,8 +138,8 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int { return SKSurface.Create(info); } - - if(GraphicsDevice == null) + + if (GraphicsDevice == null) { throw new InvalidOperationException("GraphicsDevice is not initialized."); } @@ -149,14 +149,18 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int Format = TextureFormat.RGBA8_Unorm, Width = info.Width, Height = info.Height }); - var surface = CreateFromNativeTexture(texture, new VecI(info.Width, info.Height), defaultSurfaceOrigin, out var framebufferInfo); + var surface = CreateFromNativeTexture(texture, new VecI(info.Width, info.Height), defaultSurfaceOrigin, + false, + out var framebufferInfo); if (surface == null) return null; - - framebufferInfos[surface.Handle] = framebufferInfo; + + nativeSurfaceInfos[surface.Handle] = framebufferInfo; return surface; } - internal SKSurface? CreateFromNativeTexture(ITexture renderTexture, VecI size, SurfaceOrigin surfaceOrigin, out IFramebufferInfo fbInfo) + internal SKSurface? CreateFromNativeTexture(ITexture renderTexture, VecI size, SurfaceOrigin surfaceOrigin, + bool asRenderTarget, + out IFramebufferInfo fbInfo) { if (renderTexture is IVkTexture texture) { @@ -175,9 +179,10 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int }; var backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, imageInfo); - var surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)); + var surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, + SKColorType.Rgba8888, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)); - fbInfo = new SkiaFramebufferInfo(backendRenderTarget, imageInfo); + fbInfo = new SkiaNativeSurfaceInfo(backendRenderTarget, imageInfo); return surface; } @@ -190,14 +195,31 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int _ => throw new ArgumentException("Unsupported texture type.") }; - GRGlFramebufferInfo grGlFramebufferInfo = new GRGlFramebufferInfo(textureId, SKColorType.Rgba8888.ToGlSizedFormat()); - GRBackendRenderTarget backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, 1, 0, - grGlFramebufferInfo); - - var surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, - SKColorType.Rgba8888); + SKSurface? surface; + if (!asRenderTarget) + { + const uint OpenGlTexture2D = 3553; + const uint RGBA8 = 0x8058; + var info = new GRGlTextureInfo(OpenGlTexture2D, textureId, RGBA8); + var backendRenderTarget = new GRBackendTexture(size.X, size.Y, false, info); + + surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, + SKColorType.Rgba8888); + fbInfo = new SkiaNativeSurfaceInfo(backendRenderTarget, info); + } + else + { + GRGlFramebufferInfo grGlFramebufferInfo = + new GRGlFramebufferInfo(textureId, SKColorType.Rgba8888.ToGlSizedFormat()); + GRBackendRenderTarget backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, 1, 0, + grGlFramebufferInfo); + + surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, + SKColorType.Rgba8888); + + fbInfo = new SkiaNativeSurfaceInfo(backendRenderTarget, grGlFramebufferInfo); + } - fbInfo = new SkiaFramebufferInfo(backendRenderTarget, grGlFramebufferInfo); return surface; } @@ -207,7 +229,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int public void Dispose(DrawingSurface drawingSurface) { UnmanageAndDispose(drawingSurface.ObjectPointer); - framebufferInfos.Remove(drawingSurface.ObjectPointer, out var framebufferInfo); + nativeSurfaceInfos.Remove(drawingSurface.ObjectPointer, out var framebufferInfo); } public object GetNativeSurface(IntPtr objectPointer) @@ -267,14 +289,14 @@ public RectD GetLocalClipBounds(IntPtr objectPointer) return new RectD(skRect.Left, skRect.Top, skRect.Width, skRect.Height); } - public IFramebufferInfo? GetFramebufferInfo(IntPtr objectPointer) + public IFramebufferInfo? GetNativeSurfaceInfo(IntPtr objectPointer) { - return framebufferInfos.GetValueOrDefault(objectPointer); + return nativeSurfaceInfos.GetValueOrDefault(objectPointer); } public void AddManagedFramebuffer(IntPtr nativeHandle, IFramebufferInfo fbInfo) { - framebufferInfos.Add(nativeHandle, fbInfo); + nativeSurfaceInfos.Add(nativeHandle, fbInfo); } } } \ No newline at end of file diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index 01c96d7..4b3af52 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -205,7 +205,7 @@ private void SetupWebGl(IWebGlContext webGlContext) public DrawingSurface? CreateRenderSurface(VecI size, ITexture renderTexture, SurfaceOrigin surfaceOrigin) { - var native = SurfaceImplementation.CreateFromNativeTexture(renderTexture, size, surfaceOrigin, out var fbInfo); + var native = SurfaceImplementation.CreateFromNativeTexture(renderTexture, size, surfaceOrigin, true, out var fbInfo); if (native == null) { return null; diff --git a/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs b/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs deleted file mode 100644 index 33856fd..0000000 --- a/src/Drawie.Backend.Skia/SkiaFramebufferInfo.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Drawie.Backend.Core.Surfaces; -using SkiaSharp; - -namespace Drawie.Skia; - -public class SkiaFramebufferInfo : IFramebufferInfo -{ - public GRVkImageInfo? VkImageInfo { get; } - public GRGlFramebufferInfo? GlFramebufferInfo { get; } - private GRBackendRenderTarget target; - - public SkiaFramebufferInfo(GRBackendRenderTarget target, GRVkImageInfo imageInfo) - { - this.target = target; - VkImageInfo = imageInfo; - } - - public SkiaFramebufferInfo(GRBackendRenderTarget backendRenderTarget, GRGlFramebufferInfo grGlFramebufferInfo) - { - this.target = backendRenderTarget; - GlFramebufferInfo = grGlFramebufferInfo; - } - - public ulong FramebufferId => VkImageInfo?.Image ?? target.GetGlFramebufferInfo().FramebufferObjectId; -} \ No newline at end of file diff --git a/src/Drawie.Backend.Skia/SkiaNativeSurfaceInfo.cs b/src/Drawie.Backend.Skia/SkiaNativeSurfaceInfo.cs new file mode 100644 index 0000000..c403e08 --- /dev/null +++ b/src/Drawie.Backend.Skia/SkiaNativeSurfaceInfo.cs @@ -0,0 +1,35 @@ +using Drawie.Backend.Core.Surfaces; +using SkiaSharp; + +namespace Drawie.Skia; + +public class SkiaNativeSurfaceInfo : IFramebufferInfo +{ + public GRVkImageInfo? VkImageInfo { get; } + public GRGlFramebufferInfo? GlFramebufferInfo { get; } + public GRGlTextureInfo? GlTextureInfo { get; } + + private GRBackendTexture texture; + private GRBackendRenderTarget target; + + public SkiaNativeSurfaceInfo(GRBackendRenderTarget target, GRVkImageInfo imageInfo) + { + this.target = target; + VkImageInfo = imageInfo; + } + + public SkiaNativeSurfaceInfo(GRBackendRenderTarget backendRenderTarget, GRGlFramebufferInfo grGlFramebufferInfo) + { + this.target = backendRenderTarget; + GlFramebufferInfo = grGlFramebufferInfo; + } + + public SkiaNativeSurfaceInfo(GRBackendTexture backendRenderTarget, GRGlTextureInfo grGlFramebufferInfo) + { + GlTextureInfo = grGlFramebufferInfo; + texture = backendRenderTarget; + } + + + public ulong SurfaceId => VkImageInfo?.Image ?? target?.GetGlFramebufferInfo().FramebufferObjectId ?? GlTextureInfo.Value.Id; +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index 36e9c34..9da8417 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -26,7 +26,7 @@ public override void BeginRenderPass(IRenderTarget fb) RecordInstruction(() => { originalFb = (uint)Api.GetInteger(GLEnum.FramebufferBinding); - Api.BindFramebuffer(FramebufferTarget.Framebuffer, (uint)fb.FramebufferId); + Api.BindFramebuffer(FramebufferTarget.Framebuffer, (uint)fb.SurfaceId); }); } @@ -43,10 +43,17 @@ public override void SetBuffers(IBufferGroup bufferGroup) public override void BindTexture(ITexture texture, ISampler sampler) { if (sampler is not OpenGlSampler openGlSampler) throw new ArgumentException("Cannot bind non opengl samplers"); - Api.ActiveTexture(TextureUnit.Texture0 + lastBoundTextureSlot); - Api.BindTexture(TextureTarget.Texture2D, (uint)texture.TextureId); - Api.BindSampler((uint)lastBoundTextureSlot, openGlSampler.Handle); - lastBoundTextureSlot++; + // if vk:binding has binding set to 1, we need to update it at Texture1, generally, for binding transformation matrices we want to use + // binding 0, so binding 1 is a good assumption. Ideally shader reflection can resolve that but I guess it's fine for now + + RecordInstruction(() => + { + int textureUnit = lastBoundTextureSlot + 1; + Api.ActiveTexture(TextureUnit.Texture0 + textureUnit); + Api.BindTexture(TextureTarget.Texture2D, (uint)texture.TextureId); + Api.BindSampler((uint)textureUnit, openGlSampler.Handle); + lastBoundTextureSlot++; + }); } public override unsafe void DrawIndexed(int indexCount) @@ -61,8 +68,8 @@ public override RecordedRenderPass EndRenderPass(IRenderTarget blitTo) { RecordInstruction(() => { - Api.BindFramebuffer(FramebufferTarget.ReadFramebuffer, (uint)source.FramebufferId); - Api.BindFramebuffer(FramebufferTarget.DrawFramebuffer, (uint)blitTo.FramebufferId); + Api.BindFramebuffer(FramebufferTarget.ReadFramebuffer, (uint)source.SurfaceId); + Api.BindFramebuffer(FramebufferTarget.DrawFramebuffer, (uint)blitTo.SurfaceId); Api.BlitFramebuffer( 0, 0, source.Size.X, source.Size.Y, 0, 0, blitTo.Size.X, blitTo.Size.Y, diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs index 5140cac..4ceee40 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs @@ -1,12 +1,16 @@ -using Silk.NET.Core.Contexts; -using Silk.NET.OpenGL; - -namespace Drawie.RenderApi.OpenGL; +namespace Drawie.RenderApi.OpenGL; public class OpenGlContext : IOpenGlContext { private Func getGlInterface; public bool IsGlViaAngle { get; } + + private Dictionary Textures { get; } = new Dictionary(); + + public void AddManagedTexture(IOpenGlTexture texture) + { + Textures.Add(texture.TextureId, texture); + } public OpenGlContext(Func getGlInterface, bool isGlViaAngle) { diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index 636017b..e83dadb 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -7,6 +7,7 @@ using Drawie.RenderApi.Abstraction.RenderTargets; using Drawie.RenderApi.Abstraction.Shaders; using Drawie.RenderApi.Abstraction.Textures; +using Silk.NET.Core.Contexts; using Silk.NET.OpenGL; using ShaderType = Drawie.Backend.Shaders.Common.ShaderType; @@ -14,15 +15,16 @@ namespace Drawie.RenderApi.OpenGL; public class OpenGlDevice : IGraphicsDevice { + private readonly IOpenGlContext context; private int handleCounter = 0; public GL Api { get; } - public OpenGlDevice(GL api) + public OpenGlDevice(IOpenGlContext graphicsContext) { - Api = api; + Api = new GL(new LamdaNativeContext(graphicsContext.GetGlInterface)); + context = graphicsContext; } - public IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged { return new OpenGlBuffer(Api, usage, data); @@ -30,7 +32,9 @@ public IBuffer CreateBuffer(BufferUsage usage, TData[]? data) wher public ITexture CreateTexture(TextureDesc desc) { - return new OpenGlTexture(Api, desc.Width, desc.Height); + var texture = new OpenGlTexture(Api, desc.Width, desc.Height); + context.AddManagedTexture(texture); + return texture; } public IPipeline CreatePipeline(PipelineDesc desc) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs index d9ba368..88e9d4a 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlGraphicsContext.cs @@ -10,11 +10,6 @@ public class OpenGlGraphicsContext(GL api, IGLContext glContext) : IGraphicsCont public readonly GL Api = api; private Dictionary ownedTextures = new Dictionary(); - public bool OwnsTexture(ITexture nativeTexture) - { - return nativeTexture is OpenGlTexture glTexture && ownedTextures.ContainsKey(glTexture.TextureId); - } - public void MakeCurrent() { GlContext.MakeCurrent(); @@ -26,4 +21,9 @@ public OpenGlTexture CreateTexture(uint id, int width, int height) ownedTextures.Add(id, tex); return tex; } + + public void AddManagedTexture(IOpenGlTexture texture) + { + ownedTextures.Add(texture.TextureId, texture); + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs index e743d8c..bf95d18 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs @@ -53,6 +53,6 @@ public IHostViewRenderApi CreateWindowRenderApi() private void CreateGraphicsDevice(IOpenGlContext context) { - GraphicsDevice = new OpenGlDevice(new GL(new LamdaNativeContext(context.GetGlInterface))); + GraphicsDevice = new OpenGlDevice(context); } } diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs index b95c873..90a4d9c 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs @@ -10,7 +10,7 @@ public sealed class OpenGlRenderTarget : IDisposable, IRenderTarget public OpenGlTexture Color { get; } public OpenGlDepthBuffer? Depth { get; } - public ulong FramebufferId { get; } + public ulong SurfaceId { get; } public VecI Size => new VecI(Width, Height); public int Width => Color.Width; @@ -37,11 +37,11 @@ public OpenGlRenderTarget( width, height, depth); - FramebufferId = Api.GenFramebuffer(); + SurfaceId = Api.GenFramebuffer(); Api.BindFramebuffer( FramebufferTarget.Framebuffer, - (uint)FramebufferId); + (uint)SurfaceId); Api.FramebufferTexture2D( FramebufferTarget.Framebuffer, @@ -77,12 +77,12 @@ public void Bind() { Api.BindFramebuffer( FramebufferTarget.Framebuffer, - (uint)FramebufferId); + (uint)SurfaceId); } public void Dispose() { - Api.DeleteFramebuffer((uint)FramebufferId); + Api.DeleteFramebuffer((uint)SurfaceId); Depth?.Dispose(); Color.Dispose(); diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs index d38a2da..7a6cb64 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs @@ -34,7 +34,7 @@ public unsafe OpenGlTexture(GL api, int width, int height) Api.TexImage2D( TextureTarget.Texture2D, 0, - InternalFormat.Rgba8, + InternalFormat.Rgba, (uint)width, (uint)height, 0, diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 57e2afe..3e891df 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -129,7 +129,7 @@ public override RecordedRenderPass EndRenderPass( { EnsureRecording(); - var vkTex = context.ManagedTextures[blitTo.FramebufferId]; + var vkTex = context.ManagedTextures[blitTo.SurfaceId]; if (vkTex is not VulkanTexture destination) throw new ArgumentException( diff --git a/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs b/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs index 5c8606c..37aa62e 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs @@ -6,7 +6,7 @@ namespace Drawie.RenderApi.Vulkan; internal sealed class VulkanRenderTarget(Buffers.VulkanTexture texture, VecI size) : IRenderTarget, IDisposable { //TODO: It's not exactly framebuffer id, validate if ImageHandle is correct. - public ulong FramebufferId => Texture.ImageHandle; + public ulong SurfaceId => Texture.ImageHandle; public VecI Size { get; } = size; public Buffers.VulkanTexture Texture { get; } = texture; diff --git a/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs b/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs index 59784c8..ed176d9 100644 --- a/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs +++ b/src/Drawie.RenderApi.WebGl/Enums/WebGlCommandList.cs @@ -29,7 +29,7 @@ public override void BeginRenderPass(IRenderTarget fb) RecordInstruction(() => { originalFb = JSRuntime.GetParameter(Gl, (int)WebGlBindings.FramebufferBinding); - JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.Framebuffer, (int)fb.FramebufferId); + JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.Framebuffer, (int)fb.SurfaceId); }); } @@ -67,8 +67,8 @@ public override RecordedRenderPass EndRenderPass(IRenderTarget blitTo) { RecordInstruction(() => { - JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.ReadFramebuffer, (int)source.FramebufferId); - JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.DrawFramebuffer, (int)blitTo.FramebufferId); + JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.ReadFramebuffer, (int)source.SurfaceId); + JSRuntime.BindFramebuffer(Gl, (int)WebGlFramebufferTarget.DrawFramebuffer, (int)blitTo.SurfaceId); JSRuntime.BlitFramebuffer(Gl, 0, 0, source.Size.X, source.Size.Y, 0, 0, blitTo.Size.X, blitTo.Size.Y, diff --git a/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs b/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs index a242ed1..d8478ac 100644 --- a/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs +++ b/src/Drawie.RenderApi/Abstraction/RenderTargets/IRenderTarget.cs @@ -4,6 +4,6 @@ namespace Drawie.RenderApi.Abstraction.RenderTargets; public interface IRenderTarget { - ulong FramebufferId { get; } + ulong SurfaceId { get; } VecI Size { get; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/IOpenGlContext.cs b/src/Drawie.RenderApi/IOpenGlContext.cs index 1a6a84b..3e14355 100644 --- a/src/Drawie.RenderApi/IOpenGlContext.cs +++ b/src/Drawie.RenderApi/IOpenGlContext.cs @@ -4,4 +4,5 @@ public interface IOpenGlContext { public IntPtr GetGlInterface(string name); public bool IsGlViaAngle { get; } + void AddManagedTexture(IOpenGlTexture texture); } diff --git a/src/Drawie.Rendering/Texture.cs b/src/Drawie.Rendering/Texture.cs index ca3fcf9..a5d4cce 100644 --- a/src/Drawie.Rendering/Texture.cs +++ b/src/Drawie.Rendering/Texture.cs @@ -1,6 +1,4 @@ using Drawie.Backend.Core; -using Drawie.Backend.Core.Bridge; -using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Numerics; using Drawie.RenderApi.Abstraction.Textures; diff --git a/src/Drawie.Rendering/TextureFramebuffer.cs b/src/Drawie.Rendering/TextureFramebuffer.cs index 5db8b7e..28e039e 100644 --- a/src/Drawie.Rendering/TextureFramebuffer.cs +++ b/src/Drawie.Rendering/TextureFramebuffer.cs @@ -63,12 +63,8 @@ public void Dispose() if (!IsOpen) return; IsOpen = false; - UnderlyingTexture.NativeTexture.DrawingSurface.Flush(); - // TODO: Find a way to synchronize things better - syncSurf.DrawingSurface.Canvas.DrawSurface(UnderlyingTexture.NativeTexture.DrawingSurface, 0, 0); + DrawingBackendApi.Current.Flush(); } - ulong IRenderTarget.FramebufferId => UnderlyingTexture.NativeTexture.FramebufferId; - - private static NativeTexture syncSurf = new NativeTexture(new VecI(1, 1)); + ulong IRenderTarget.SurfaceId => UnderlyingTexture.NativeTexture.SurfaceId; } \ No newline at end of file diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index 444e8e4..eaa24cb 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); Drawie2SampleApp app = new Drawie2SampleApp(); From 84d8d7a94775e27e7350798da7073026052c8c12 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 15 Aug 2026 14:26:18 +0200 Subject: [PATCH 23/55] Added MiniUI --- .../Operations/ISurfaceImplementation.cs | 2 +- src/Drawie.Backend.Core/NativeTexture.cs | 2 +- ...amebufferInfo.cs => INativeSurfaceInfo.cs} | 2 +- .../SkiaSurfaceImplementation.cs | 8 +-- .../SkiaNativeSurfaceInfo.cs | 2 +- src/Drawie.Host.Glfw/GlfwHost.cs | 61 +++++++++++++++---- src/Drawie.Host/IHost.cs | 1 + src/Drawie.Host/ILayer.cs | 2 + src/Drawie.Host/RenderOrder.cs | 16 ++++- src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs | 7 ++- src/Drawie.Layer.UI.MiniUi/Controls/Button.cs | 47 ++++++++++++++ .../Drawie.Layer.UI.MiniUi.csproj | 13 ++++ .../MiniUiMissingContextException.cs | 9 +++ src/Drawie.Layer.UI.MiniUi/InputState.cs | 33 ++++++++++ src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs | 48 +++++++++++++++ src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs | 41 +++++++++++++ src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs | 26 ++++++++ .../Buffers/VulkanTexture.cs | 5 +- .../Builders/GraphicsPipelineBuilder.cs | 13 +++- .../Builders/GraphicsPipelineStageBuilder.cs | 2 +- .../VulkanCommandList.cs | 2 +- src/Drawie.RenderApi.Vulkan/VulkanContext.cs | 10 +++ .../VulkanGraphicsDevice.cs | 12 +++- src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs | 8 ++- .../Abstraction/Pipeline/PipelineDesc.cs | 21 ++++++- .../Abstraction/Pipeline/RasterizerDesc.cs | 2 +- src/Drawie.RenderApi/IVkTexture.cs | 1 + src/Drawie.sln | 7 +++ src/Drawie2Sample/Drawie2Sample.csproj | 1 + src/Drawie2Sample/Drawie2SampleApp.cs | 24 +++++++- src/DrawieSample.Desktop/Program.cs | 2 +- 31 files changed, 388 insertions(+), 42 deletions(-) rename src/Drawie.Backend.Core/Surfaces/{IFramebufferInfo.cs => INativeSurfaceInfo.cs} (68%) create mode 100644 src/Drawie.Layer.UI.MiniUi/Controls/Button.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/Drawie.Layer.UI.MiniUi.csproj create mode 100644 src/Drawie.Layer.UI.MiniUi/Exceptions/MiniUiMissingContextException.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/InputState.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs diff --git a/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs b/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs index ced08b2..8774bff 100644 --- a/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs +++ b/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs @@ -21,6 +21,6 @@ public interface ISurfaceImplementation public RectI GetDeviceClipBounds(IntPtr drawingSurface); public void Unmanage(DrawingSurface surface); public RectD GetLocalClipBounds(IntPtr objectPointer); - IFramebufferInfo? GetNativeSurfaceInfo(IntPtr objectPointer); + INativeSurfaceInfo? GetNativeSurfaceInfo(IntPtr objectPointer); } diff --git a/src/Drawie.Backend.Core/NativeTexture.cs b/src/Drawie.Backend.Core/NativeTexture.cs index 3c294ff..8b5f45d 100644 --- a/src/Drawie.Backend.Core/NativeTexture.cs +++ b/src/Drawie.Backend.Core/NativeTexture.cs @@ -8,7 +8,7 @@ namespace Drawie.Backend.Core; -public class NativeTexture : IDisposable, ICloneable, IPixelsMap, IFramebufferInfo, ITexture +public class NativeTexture : IDisposable, ICloneable, IPixelsMap, INativeSurfaceInfo, ITexture { public VecI Size { get; } public DrawingSurface DrawingSurface { get; private set; } diff --git a/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs b/src/Drawie.Backend.Core/Surfaces/INativeSurfaceInfo.cs similarity index 68% rename from src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs rename to src/Drawie.Backend.Core/Surfaces/INativeSurfaceInfo.cs index f4ce9ca..df6b41a 100644 --- a/src/Drawie.Backend.Core/Surfaces/IFramebufferInfo.cs +++ b/src/Drawie.Backend.Core/Surfaces/INativeSurfaceInfo.cs @@ -1,6 +1,6 @@ namespace Drawie.Backend.Core.Surfaces; -public interface IFramebufferInfo +public interface INativeSurfaceInfo { public ulong SurfaceId { get; } } \ No newline at end of file diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index f6c9cd6..219c222 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -17,7 +17,7 @@ public class SkiaSurfaceImplementation : SkObjectImplementation, ISur private readonly SkiaPixmapImplementation _pixmapImplementation; private readonly SkiaCanvasImplementation _canvasImplementation; private readonly SkiaPaintImplementation _paintImplementation; - private Dictionary nativeSurfaceInfos = new Dictionary(); + private Dictionary nativeSurfaceInfos = new Dictionary(); internal GRContext? GrContext { get; set; } internal IGraphicsDevice GraphicsDevice { get; set; } @@ -160,7 +160,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int internal SKSurface? CreateFromNativeTexture(ITexture renderTexture, VecI size, SurfaceOrigin surfaceOrigin, bool asRenderTarget, - out IFramebufferInfo fbInfo) + out INativeSurfaceInfo fbInfo) { if (renderTexture is IVkTexture texture) { @@ -289,12 +289,12 @@ public RectD GetLocalClipBounds(IntPtr objectPointer) return new RectD(skRect.Left, skRect.Top, skRect.Width, skRect.Height); } - public IFramebufferInfo? GetNativeSurfaceInfo(IntPtr objectPointer) + public INativeSurfaceInfo? GetNativeSurfaceInfo(IntPtr objectPointer) { return nativeSurfaceInfos.GetValueOrDefault(objectPointer); } - public void AddManagedFramebuffer(IntPtr nativeHandle, IFramebufferInfo fbInfo) + public void AddManagedFramebuffer(IntPtr nativeHandle, INativeSurfaceInfo fbInfo) { nativeSurfaceInfos.Add(nativeHandle, fbInfo); } diff --git a/src/Drawie.Backend.Skia/SkiaNativeSurfaceInfo.cs b/src/Drawie.Backend.Skia/SkiaNativeSurfaceInfo.cs index c403e08..cab0bc6 100644 --- a/src/Drawie.Backend.Skia/SkiaNativeSurfaceInfo.cs +++ b/src/Drawie.Backend.Skia/SkiaNativeSurfaceInfo.cs @@ -3,7 +3,7 @@ namespace Drawie.Skia; -public class SkiaNativeSurfaceInfo : IFramebufferInfo +public class SkiaNativeSurfaceInfo : INativeSurfaceInfo { public GRVkImageInfo? VkImageInfo { get; } public GRGlFramebufferInfo? GlFramebufferInfo { get; } diff --git a/src/Drawie.Host.Glfw/GlfwHost.cs b/src/Drawie.Host.Glfw/GlfwHost.cs index 2a8ac85..7c695c7 100644 --- a/src/Drawie.Host.Glfw/GlfwHost.cs +++ b/src/Drawie.Host.Glfw/GlfwHost.cs @@ -60,7 +60,7 @@ public bool ShowOnTop get => window?.TopMost ?? false; set => window?.TopMost = value; } - + public object Native => window; public event Action? Loaded; @@ -71,9 +71,10 @@ public bool ShowOnTop private SKSurface? surface; private Texture renderTexture; private bool initialized; - + private List layers = new List(); private List renderStack = new List(); + private List renderContentStack = new List(); public GlfwHost(string name, VecI size, IHostViewRenderApi renderApi) { @@ -89,16 +90,24 @@ public GlfwHost(string name, VecI size, IHostViewRenderApi renderApi) renderStack.Add(new RenderOrder("Init", _ => { })); renderStack.Add(new RenderOrder("Render", RenderContent)); renderStack.Add(new RenderOrder("RenderApi", RenderApi.Render)); + + renderContentStack.Add(new RenderContentOrder("Init", (_, _) => {})); + renderContentStack.Add(new RenderContentOrder("RenderContent", DefaultRenderContent)); + } + + private void DefaultRenderContent(TextureFramebuffer fbo, double dt) + { + Render?.Invoke(fbo, dt); } public void Initialize() { if (initialized) return; - + window.Initialize(); InitInput(); - + if (RenderApi is IVulkanHostViewRenderApi) { if (window.VkSurface == null) @@ -120,19 +129,29 @@ public void Initialize() store = new GraphicsStore(RenderApi.GraphicsContext); GraphicsStore.Global = store; - + + for (int i = 0; i < layers.Count; i++) + { + if (!layers[i].IsRenderApiSupported(RenderApi)) + { + Console.WriteLine($"Layer {layers[i]} is not supported on this render api. Skipping..."); + layers.RemoveAt(i); + i--; + } + } + foreach (var layer in layers) { layer.Initialize(this); } - + initialized = true; } private void InitInput() { var input = window.CreateInput(); - + GlfwKeyboard[] keyboards = new GlfwKeyboard[input.Keyboards.Count]; for (var i = 0; i < input.Keyboards.Count; i++) { @@ -160,7 +179,7 @@ public void Show() { Initialize(); } - + window.FramebufferResize += WindowOnFramebufferResize; RenderApi.FramebufferResized += RenderApiOnFramebufferResized; @@ -176,7 +195,7 @@ public void Show() private void RenderApiOnFramebufferResized() { - store.Dispose(); + store.DisposeTexture(renderTexture); surface = null!; CreateRenderTarget(window!.FramebufferSize.ToVecI(), RenderApi.RenderTexture); @@ -184,7 +203,8 @@ private void RenderApiOnFramebufferResized() private void CreateRenderTarget(VecI size, ITexture nativeRenderTexture) { - renderTexture = store.CreateNativeRenderSurface(size, nativeRenderTexture, RenderApi is IVulkanHostViewRenderApi ? SurfaceOrigin.TopLeft : SurfaceOrigin.BottomLeft); + renderTexture = store.CreateNativeRenderSurface(size, nativeRenderTexture, + RenderApi is IVulkanHostViewRenderApi ? SurfaceOrigin.TopLeft : SurfaceOrigin.BottomLeft); } private void WindowOnFramebufferResize(Vector2D newSize) @@ -200,13 +220,12 @@ private void OnUpdate(double dt) private void OnRender(double dt) { - // TODO: Composite framebuffers for each layer foreach (var layer in renderStack) { layer.Render(dt); } } - + private void RenderContent(double dt) { RenderApi.PrepareTextureToWrite(); @@ -214,7 +233,10 @@ private void RenderContent(double dt) using var renderingScope = ctx.Open(); using var fbo = ctx.Edit(renderTexture); fbo.Clear(); - Render?.Invoke(fbo, dt); + foreach (var layer in renderContentStack) + { + layer.Render(fbo, dt); + } } public void Close() @@ -245,4 +267,17 @@ public void SubscribeToRender(string name, string renderAfter, Action re renderStack.Add(new RenderOrder(name, render)); } } + + public void SubscribeToRenderContent(string name, string renderAfter, Action render) + { + var foundRenderAfter = renderContentStack.FindIndex(r => r.Name == renderAfter); + if (foundRenderAfter != -1) + { + renderContentStack.Insert(foundRenderAfter + 1, new RenderContentOrder(name, render)); + } + else + { + renderContentStack.Add(new RenderContentOrder(name, render)); + } + } } \ No newline at end of file diff --git a/src/Drawie.Host/IHost.cs b/src/Drawie.Host/IHost.cs index c4ce3f3..5850af9 100644 --- a/src/Drawie.Host/IHost.cs +++ b/src/Drawie.Host/IHost.cs @@ -29,4 +29,5 @@ public interface IHost public object Native { get; } public event Action Loaded; public void SubscribeToRender(string name, string renderAfter, Action render); + public void SubscribeToRenderContent(string name, string renderAfter, Action render); } diff --git a/src/Drawie.Host/ILayer.cs b/src/Drawie.Host/ILayer.cs index bb5a3b6..a5a5025 100644 --- a/src/Drawie.Host/ILayer.cs +++ b/src/Drawie.Host/ILayer.cs @@ -1,8 +1,10 @@ +using Drawie.RenderApi; using Drawie.Rendering; namespace Drawie.Host; public interface ILayer { + public bool IsRenderApiSupported(IHostViewRenderApi api); void Initialize(IHost host); } \ No newline at end of file diff --git a/src/Drawie.Host/RenderOrder.cs b/src/Drawie.Host/RenderOrder.cs index eac4f12..507cbfe 100644 --- a/src/Drawie.Host/RenderOrder.cs +++ b/src/Drawie.Host/RenderOrder.cs @@ -1,3 +1,5 @@ +using Drawie.Rendering; + namespace Drawie.Host; public class RenderOrder @@ -10,4 +12,16 @@ public RenderOrder(string name, Action render) Name = name; Render = render; } -} \ No newline at end of file +} + +public class RenderContentOrder +{ + public string Name { get; } + public Action Render { get; } + + public RenderContentOrder(string name, Action render) + { + Name = name; + Render = render; + } +} diff --git a/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs b/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs index 9c06422..9a07d61 100644 --- a/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs +++ b/src/Drawie.Layer.UI.ImGui/ImGuiLayer.cs @@ -22,6 +22,11 @@ public ImGuiLayer(Action render) Render = render; } + public bool IsRenderApiSupported(IHostViewRenderApi api) + { + return api is IOpenGlHostViewRenderApi; + } + public void Initialize(IHost host) { if (host == null) @@ -39,7 +44,7 @@ public void Initialize(IHost host) OnLoaded(); host.SubscribeToRender("ImGui.Update", "Init", OnEarlyRender); - host.SubscribeToRender("ImGui.Render", "Render", OnRender); + host.SubscribeToRender("ImGui.Render", "RenderContent", OnRender); } private void OnRender(double dt) diff --git a/src/Drawie.Layer.UI.MiniUi/Controls/Button.cs b/src/Drawie.Layer.UI.MiniUi/Controls/Button.cs new file mode 100644 index 0000000..c66b584 --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/Controls/Button.cs @@ -0,0 +1,47 @@ +using Drawie.Backend.Core.Surfaces.PaintImpl; +using Drawie.Backend.Core.Text; +using Drawie.Host.Input; +using Drawie.Layer.UI.MiniUi.Exceptions; +using Drawie.Numerics; + +namespace Drawie.Layer.UI.MiniUi.Controls; + +public static class Button +{ + public static bool Show(string label) + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) throw new MiniUiMissingContextException(); + + RichText rt = new RichText(label); + rt.Fill = true; + using Font font = Font.FromFontFamily(MiniUiStyle.Active.FontFamily); + + VecF bounds = CalculateBounds(rt, font); + + using Paint btnPaint = new Paint(); + + RectD btnBounds = new RectD(ctx.CurrentPosition.X, ctx.CurrentPosition.Y, bounds.X, bounds.Y); + btnBounds.Size += new VecD(MiniUiStyle.Active.HorizontalPadding * 2, MiniUiStyle.Active.VerticalPadding * 2); + + bool hitTest = btnBounds.ContainsInclusive(MiniUiContext.Active.PointerPosition); + btnPaint.Paintable = hitTest ? MiniUiStyle.Active.BackgroundLow : MiniUiStyle.Active.BackgroundMid; + + ctx.Framebuffer.Canvas!.DrawRect(btnBounds, btnPaint); + + btnPaint.Paintable = MiniUiStyle.Active.Foreground; + rt.FillPaintable = MiniUiStyle.Active.Foreground; + + bool justPressed = !ctx.LastState.PressedPointerButtons[PointerButton.Left] && + ctx.InputController.PrimaryPointer.IsButtonPressed(PointerButton.Left); + + rt.Paint(ctx.Framebuffer.Canvas, new VecD(ctx.CurrentPosition.X + MiniUiStyle.Active.HorizontalPadding, ctx.CurrentPosition.Y + bounds.Y + MiniUiStyle.Active.VerticalPadding / 2f), font, btnPaint,null); + return hitTest && justPressed; + } + + private static VecF CalculateBounds(RichText label, Font? font) + { + return (VecF)label.MeasureBounds(font).Size; + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/Drawie.Layer.UI.MiniUi.csproj b/src/Drawie.Layer.UI.MiniUi/Drawie.Layer.UI.MiniUi.csproj new file mode 100644 index 0000000..9195a67 --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/Drawie.Layer.UI.MiniUi.csproj @@ -0,0 +1,13 @@ + + + + net10.0 + enable + enable + + + + + + + diff --git a/src/Drawie.Layer.UI.MiniUi/Exceptions/MiniUiMissingContextException.cs b/src/Drawie.Layer.UI.MiniUi/Exceptions/MiniUiMissingContextException.cs new file mode 100644 index 0000000..27263e7 --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/Exceptions/MiniUiMissingContextException.cs @@ -0,0 +1,9 @@ +namespace Drawie.Layer.UI.MiniUi.Exceptions; + +public class MiniUiMissingContextException : Exception +{ + public MiniUiMissingContextException() + : base("No active MiniUi context is available") + { + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/InputState.cs b/src/Drawie.Layer.UI.MiniUi/InputState.cs new file mode 100644 index 0000000..d5d6724 --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/InputState.cs @@ -0,0 +1,33 @@ +using Drawie.Host.Input; + +namespace Drawie.Layer.UI.MiniUi; + +public class InputState +{ + // public IReadOnlyDictionary PressedKeys => pressedKeys; + public IReadOnlyDictionary PressedPointerButtons => pressedPointerButtons; + + //private Dictionary pressedKeys = new(); + private Dictionary pressedPointerButtons = new Dictionary(); + + public InputState() + { + int enumRange = Enum.GetValues(typeof(PointerButton)).Length - 1; // - 1 because one state is unknown + for (int i = 0; i < enumRange; i++) + { + pressedPointerButtons.Add((PointerButton)i, false); + } + } + + public void Update(InputController input) + { + //pressedKeys.Clear(); + pressedPointerButtons.Clear(); + + int enumRange = Enum.GetValues(typeof(PointerButton)).Length - 1; // - 1 because one state is unknown + for (int i = 0; i < enumRange; i++) + { + pressedPointerButtons.Add((PointerButton)i, input.PrimaryPointer.IsButtonPressed((PointerButton)i)); + } + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs b/src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs new file mode 100644 index 0000000..94ba780 --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs @@ -0,0 +1,48 @@ +using Drawie.Backend.Core.Bridge; +using Drawie.Backend.Core.Surfaces; +using Drawie.Host; +using Drawie.Numerics; +using Drawie.RenderApi; +using Drawie.Rendering; + +namespace Drawie.Layer.UI.MiniUi; + +public class MiniUILayer : ILayer +{ + private Action render; + private MiniUiContext context = new MiniUiContext(); + + private IHostViewRenderApi renderApi; + + private Texture renderTexture; + private IHost host; + + public MiniUILayer(Action render) + { + this.render = render; + } + + public bool IsRenderApiSupported(IHostViewRenderApi api) + { + return true; + } + + public void Initialize(IHost host) + { + this.host = host; + renderApi = host.RenderApi; + host.SubscribeToRenderContent("MiniUi.Render", "RenderContent", HostOnRender); + host.Update += HostOnUpdate; + } + + private void HostOnUpdate(double obj) + { + context.Update(host.InputController); + } + + private void HostOnRender(TextureFramebuffer textureFramebuffer, double deltaTime) + { + using var ctx = context.MakeActive(textureFramebuffer); + render?.Invoke(deltaTime); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs b/src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs new file mode 100644 index 0000000..3f8acdd --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs @@ -0,0 +1,41 @@ +using Drawie.Host.Input; +using Drawie.Numerics; +using Drawie.Rendering; + +namespace Drawie.Layer.UI.MiniUi; + +public class MiniUiContext : IDisposable +{ + public static MiniUiContext? Active { get; private set; } + + public TextureFramebuffer? Framebuffer { get; private set; } + public VecF CurrentPosition { get; private set; } + + public VecD PointerPosition {get; private set;} + public InputController InputController { get; private set; } + + public InputState LastState { get; private set; } = new InputState(); + + + public IDisposable MakeActive(TextureFramebuffer fb) + { + Active = this; + Framebuffer = fb; + CurrentPosition = VecI.Zero; + return this; + } + + public void Update(InputController input) + { + InputController = input; + PointerPosition = input.PrimaryPointer?.Position ?? new VecD(-1, -1); + } + + public void Dispose() + { + LastState.Update(InputController); + Framebuffer = null; + CurrentPosition = VecI.Zero; + if (Active == this) Active = null; + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs b/src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs new file mode 100644 index 0000000..c515c75 --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs @@ -0,0 +1,26 @@ +using Drawie.Backend.Core.ColorsImpl; +using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Backend.Core.Text; +using Drawie.Numerics; + +namespace Drawie.Layer.UI.MiniUi; + +public class MiniUiStyle +{ + public static MiniUiStyle Default { get; } = new MiniUiStyle() + { + Foreground = new ColorPaintable(Colors.White), + BackgroundLow = new ColorPaintable(Color.FromHex("#202020")), + BackgroundMid = new ColorPaintable(Color.FromHex("#252525")), + }; + + public static MiniUiStyle Active { get; set; } = Default; + + public Paintable BackgroundLow { get; set; } + public Paintable BackgroundMid { get; set; } + public Paintable Foreground { get; set; } + public FontFamilyName FontFamily { get; set; } = new FontFamilyName("$Default"); + public float FontSize { get; set; } = 12; + public float HorizontalPadding { get; set; } = 4; + public float VerticalPadding { get; set; } = 4; +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index 69252e6..c685991 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -137,7 +137,9 @@ public void MakeWriteable() { colorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal); } - + + public event Action? Disposing; + public void MakeWriteable(CommandBuffer cmdBuffer) { colorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal, cmdBuffer); @@ -197,6 +199,7 @@ private unsafe void CopyBufferToImage(Buffer buffer, Image image, uint width, ui public unsafe void Dispose() { + Disposing?.Invoke(); Vk.DestroySampler(LogicalDevice, sampler, null); ColorAttachment.Dispose(); DepthAttachment?.Dispose(); diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs index ad81337..f45508b 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs @@ -13,6 +13,8 @@ public class GraphicsPipelineBuilder public GraphicsPipelineVertexLayoutBuilder VertexLayoutBuilder { get; set; } public bool HasDepthStencil { get; set; } + public PolygonMode PolygonMode { get; set; } = PolygonMode.Fill; + public bool DoNotDisposeStages { get; set; } public GraphicsPipelineBuilder(Vk vk, Device logicalDevice) { @@ -20,6 +22,12 @@ public GraphicsPipelineBuilder(Vk vk, Device logicalDevice) LogicalDevice = logicalDevice; } + public GraphicsPipelineBuilder WithPolygonMode(PolygonMode polygonMode) + { + PolygonMode = polygonMode; + return this; + } + public GraphicsPipelineBuilder AddStage(Action stageBuilder) { GraphicsPipelineStageBuilder stage = new(Vk, LogicalDevice); @@ -118,7 +126,7 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain SType = StructureType.PipelineRasterizationStateCreateInfo, DepthClampEnable = false, RasterizerDiscardEnable = false, - PolygonMode = PolygonMode.Fill, + PolygonMode = PolygonMode, LineWidth = 1.0f, CullMode = CullModeFlags.None, /*CullMode = CullModeFlags.BackBit, @@ -200,7 +208,8 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain out var graphicsPipeline) != Result.Success) throw new VulkanException("Failed to create graphics pipeline."); - foreach (var stage in Stages) stage.Dispose(); + if(!DoNotDisposeStages) + foreach (var stage in Stages) stage.Dispose(); return new GraphicsPipeline(Vk, LogicalDevice, pipelineLayout, graphicsPipeline, renderPass); } diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineStageBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineStageBuilder.cs index e280298..8f0ad36 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineStageBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineStageBuilder.cs @@ -35,7 +35,7 @@ public unsafe PipelineShaderStageCreateInfo Build() { if (created) { - throw new GraphicsPipelineBuilderException("Stage was already created"); + return createdStage; } byte[] code = ShaderBytes ?? Array.Empty(); diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 3e891df..d28f08b 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -94,7 +94,7 @@ public override void BindTexture( var vkTex = context.ManagedTextures[texture.TextureId]; if (vkTex is not VulkanTexture vkTexture) throw new ArgumentException("Only IVkTexture's are valid"); - + vkTexture.MakeReadOnly(commandBuffer); BindTextureDescriptor( diff --git a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs index 14da417..d4fdbce 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs @@ -75,6 +75,16 @@ public void AddManagedTexture(ITexture texture, ulong handle) { if (texture is not IVkTexture vkTexture) throw new ArgumentException("Can't manage non IVkTexture"); managedTextures[handle] = vkTexture; + + vkTexture.Disposing += () => + { + RemoveManagedTexture(texture.TextureId); + }; + } + + public void RemoveManagedTexture(ulong handle) + { + managedTextures.Remove(handle); } protected unsafe void SetupInstance(IVulkanContextInfo contextInfo) diff --git a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs index 76eba76..cb143f5 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs @@ -20,6 +20,7 @@ public sealed class VulkanGraphicsDevice : IGraphicsDevice, IDisposable { private readonly VulkanContext context; private readonly CommandPool commandPool; + private VulkanPipeline? pipeline; public VulkanGraphicsDevice(VulkanContext context) { @@ -75,12 +76,17 @@ public IAbstractionTexture CreateTexture(TextureDesc desc) return vkTex; } - private VulkanPipeline? pipeline; public IPipeline CreatePipeline(PipelineDesc desc) { context.Api!.DeviceWaitIdle(context.LogicalDevice.Device); - - return pipeline ??= new VulkanPipeline(context, desc); + + if (pipeline == null || !pipeline.Description.Equals(desc)) + { + pipeline?.Dispose(); + pipeline = new VulkanPipeline(context, desc); + } + + return pipeline; } public ICommandList CreateCommandList() diff --git a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs index 6004355..1b3abee 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs @@ -1,10 +1,8 @@ +using Drawie.Backend.Vertie.Core; using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; -using Drawie.RenderApi.Vulkan.Exceptions; -using Drawie.RenderApi.Vulkan.Extensions; using Drawie.RenderApi.Vulkan.Stages; using Drawie.RenderApi.Vulkan.Stages.Builders; -using Silk.NET.Core.Native; using Silk.NET.Vulkan; namespace Drawie.RenderApi.Vulkan; @@ -56,8 +54,12 @@ public unsafe void Apply(ICommandList cmdList) private GraphicsPipeline CreatePipeline() { Builder.WithVertexLayout(layout => layout.WithVec3().WithVec3().WithVec2()); + Builder.WithPolygonMode(Description.Rasterizer.RenderMode == RenderMode.Default + ? PolygonMode.Fill + : PolygonMode.Line); Builder.Stages.Add(program.VertexStageBuilder); Builder.Stages.Add(program.FragmentStageBuilder); + Builder.DoNotDisposeStages = true; Builder.WithRenderPass(builder => {}); Builder.WithDepth(); var descriptorSetLayout = program.DescriptorSetLayout; diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs index 8f9397a..7a9701b 100644 --- a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs @@ -3,16 +3,31 @@ namespace Drawie.RenderApi.Abstraction.Pipeline; -public struct PipelineDesc +public struct PipelineDesc : IEquatable { public IShaderProgram? ShaderProgram { get; set; } public DepthDesc Depth { get; set; } public BlendDesc Blend { get; set; } public RasterizerDesc Rasterizer { get; set; } public RectI Viewport { get; set; } + + public bool Equals(PipelineDesc other) + { + return Equals(ShaderProgram, other.ShaderProgram) && Depth.Equals(other.Depth) && Blend.Equals(other.Blend) && Rasterizer.Equals(other.Rasterizer) && Viewport.Equals(other.Viewport); + } + + public override bool Equals(object? obj) + { + return obj is PipelineDesc other && Equals(other); + } + + public override int GetHashCode() + { + return HashCode.Combine(ShaderProgram, Depth, Blend, Rasterizer, Viewport); + } } -public struct DepthDesc +public record struct DepthDesc { public bool Enabled { get; set; } public DepthCompareType DepthCompare { get; set; } @@ -30,7 +45,7 @@ public enum DepthCompareType Always } -public struct BlendDesc +public record struct BlendDesc { public bool Enabled; } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs index 2231e77..4689343 100644 --- a/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs @@ -2,7 +2,7 @@ namespace Drawie.RenderApi.Abstraction.Pipeline; -public struct RasterizerDesc +public record struct RasterizerDesc { public RenderMode RenderMode { get; set; } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/IVkTexture.cs b/src/Drawie.RenderApi/IVkTexture.cs index f47af74..56367a5 100644 --- a/src/Drawie.RenderApi/IVkTexture.cs +++ b/src/Drawie.RenderApi/IVkTexture.cs @@ -13,4 +13,5 @@ public interface IVkTexture : ITexture public uint Tiling { get; } public void MakeReadOnly(); public void MakeWriteable(); + event Action Disposing; } \ No newline at end of file diff --git a/src/Drawie.sln b/src/Drawie.sln index 776c837..b568874 100644 --- a/src/Drawie.sln +++ b/src/Drawie.sln @@ -79,6 +79,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.ShaderCompiler", "Dr EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Shaders.Common", "Drawie.Shaders.Common\Drawie.Shaders.Common.csproj", "{4F39C0D8-4DB8-40F1-AAB3-269450765937}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.UI.MiniUi", "Drawie.Layer.UI.MiniUi\Drawie.Layer.UI.MiniUi.csproj", "{D576C583-C8D7-4485-B960-CA297969C1EB}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -212,6 +214,10 @@ Global {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Debug|Any CPU.Build.0 = Debug|Any CPU {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Release|Any CPU.ActiveCfg = Release|Any CPU {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Release|Any CPU.Build.0 = Release|Any CPU + {D576C583-C8D7-4485-B960-CA297969C1EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D576C583-C8D7-4485-B960-CA297969C1EB}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D576C583-C8D7-4485-B960-CA297969C1EB}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D576C583-C8D7-4485-B960-CA297969C1EB}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(NestedProjects) = preSolution {645AF54D-D58F-492E-A2A9-12F86EA8C00A} = {239DB1B4-E66F-444A-87DA-B19775F40974} @@ -239,5 +245,6 @@ Global {EB963B58-ECBA-400D-887E-F7598C7F7894} = {239DB1B4-E66F-444A-87DA-B19775F40974} {41CC13E2-3398-4669-8B8B-23721EB35754} = {0D635DD1-AF77-4B5B-9649-2F61A4884D1E} {4F39C0D8-4DB8-40F1-AAB3-269450765937} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} + {D576C583-C8D7-4485-B960-CA297969C1EB} = {8F709A50-C8C2-46FC-8355-A96701FFC359} EndGlobalSection EndGlobal diff --git a/src/Drawie2Sample/Drawie2Sample.csproj b/src/Drawie2Sample/Drawie2Sample.csproj index fc9ae11..aaadd30 100644 --- a/src/Drawie2Sample/Drawie2Sample.csproj +++ b/src/Drawie2Sample/Drawie2Sample.csproj @@ -10,6 +10,7 @@ + diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 84d78ea..30861cd 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -2,6 +2,7 @@ using System.Text; using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Backend.Core.Surfaces; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Core.Text; using Drawie.Backend.Vertie.Core; @@ -10,6 +11,8 @@ using Drawie.Host; using Drawie.Host.Input; using Drawie.Layer.UI.ImGui; +using Drawie.Layer.UI.MiniUi; +using Drawie.Layer.UI.MiniUi.Controls; using Drawie.Numerics; using Drawie.Rendering; using DrawiEngine; @@ -38,9 +41,19 @@ public override IHost CreateMainWindow() { window = Engine.WindowingPlatform.CreateWindow("Drawie 2 Sample", new VecI(1920, 1080)); //window.AddLayer(new ImGuiLayer(RenderImGui)); + window.AddLayer(new MiniUILayer(RenderMiniUi)); return window; } + private void RenderMiniUi(double dt) + { + string text = renderOptions.RenderMode == RenderMode.Default ? "Enable wireframe" : "Enable solid fill"; + if (Button.Show(text)) + { + renderOptions.RenderMode = renderOptions.RenderMode == RenderMode.Default ? RenderMode.Wireframe : RenderMode.Default; + } + } + private void RenderImGui(double dt) { ImGui.BeginGroup(); @@ -81,14 +94,19 @@ protected override void OnInitialize() RegisterMouse(window.InputController); - window.Update += d => { HandleMovement((float)d, camera, window.InputController.PrimaryKeyboard); }; + window.Update += d => + { + camera.AspectRatio = (float)window.Size.X / window.Size.Y; + HandleMovement((float)d, camera, window.InputController.PrimaryKeyboard); + }; window.Render += (targetTexture, deltaTime) => { - targetTexture.Clear(Colors.Black); + targetTexture.Clear(); targetTexture.DrawMesh(mesh, mat, camera, renderOptions); + /* using Font defaultFont = Font.CreateDefault(); Paintable color = new ColorPaintable(Colors.White); StringBuilder sb = new StringBuilder(); @@ -102,7 +120,7 @@ protected override void OnInitialize() using Paint p = new Paint() { Paintable = color }; - rt.Paint(targetTexture.Canvas, new VecD(0, 20), defaultFont, p, null); + rt.Paint(targetTexture.Canvas, new VecD(0, 20), defaultFont, p, null);*/ }; } diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index eaa24cb..444e8e4 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(); Drawie2SampleApp app = new Drawie2SampleApp(); From 3bbcd8603811c8399f2ae911a50ba2ed441e96a4 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 15 Aug 2026 15:32:41 +0200 Subject: [PATCH 24/55] Disposing --- src/DrawiEngine/DrawingEngine.cs | 1 + .../Helpers/TextureFramebufferExtensions.cs | 46 ++++++++++--------- src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 5 ++ .../OpenGlRenderApi.cs | 5 ++ .../VulkanGraphicsDevice.cs | 39 ++++++++++++---- .../VulkanRenderApi.cs | 12 ++++- .../VulkanRenderTarget.cs | 1 - .../Abstraction/IGraphicsDevice.cs | 2 +- src/Drawie.RenderApi/IRenderApi.cs | 2 +- src/Drawie.sln.DotSettings.user | 1 + src/DrawieSample.Desktop/Program.cs | 2 + 11 files changed, 82 insertions(+), 34 deletions(-) diff --git a/src/DrawiEngine/DrawingEngine.cs b/src/DrawiEngine/DrawingEngine.cs index 32480fd..eefcefa 100644 --- a/src/DrawiEngine/DrawingEngine.cs +++ b/src/DrawiEngine/DrawingEngine.cs @@ -55,5 +55,6 @@ public void Run() public async ValueTask Dispose() { await DrawingBackend.DisposeAsync(); + RenderApi.Dispose(); } } diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index a4261ba..9035e2d 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -2,9 +2,7 @@ using Drawie.Backend.Vertie.Core; using Drawie.Backend.Vertie.Rendering; using Drawie.Numerics; -using Drawie.RenderApi; using Drawie.RenderApi.Abstraction; -using Drawie.RenderApi.Abstraction.Buffers; using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; using Drawie.RenderApi.Abstraction.RenderTargets; @@ -20,10 +18,13 @@ public static class TextureFramebufferExtensions private static Dictionary cachedShaderPrograms = new Dictionary(); + + private static IRenderTarget? cachedRenderTarget; private static ICommandList? cmdList; - public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material material, Camera camera, RenderOptions options = default) + public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material material, Camera camera, + RenderOptions options = default) { IGraphicsDevice device = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice; @@ -34,16 +35,21 @@ public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material mate public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Camera camera, IGraphicsDevice device, RenderOptions options) { - var sceneTarget = device.CreateRenderTarget(new TextureDesc() + if (cachedRenderTarget == null || cachedRenderTarget.Size != fb.Size) { - Width = fb.Size.X, - Height = fb.Size.Y, - Format = TextureFormat.RGBA8_Unorm, - Depth = DepthFormat.Depth24Stencil8 - }); + (cachedRenderTarget as IDisposable)?.Dispose(); + + cachedRenderTarget = device.CreateRenderTarget(new TextureDesc() + { + Width = fb.Size.X, + Height = fb.Size.Y, + Format = TextureFormat.RGBA8_Unorm, + Depth = DepthFormat.Depth24Stencil8 + }); + } var shader = GetOrCreateShaderProgram(device, material); - + var pipeline = device.CreatePipeline(new PipelineDesc() { Depth = new DepthDesc() @@ -60,19 +66,19 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came }); cmdList ??= device.CreateCommandList(); - cmdList.BeginRenderPass(sceneTarget); - + cmdList.BeginRenderPass(cachedRenderTarget); + cmdList.SetPipeline(pipeline); if (!mesh.BuffersInitialized) { mesh.GenerateBuffers(device); } - + cmdList.SetBuffers(mesh.Buffers); - + material.Use(camera); material.PrepareForObject(mesh.Transform); - + shader.UpdateUniforms(material.Properties.Values.ToList()); for (var i = 0; i < material.Textures.Count; i++) @@ -87,17 +93,12 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came cmdList.BindTexture(materialTexture, sampler); } - + cmdList.DrawIndexed(mesh.IndexCount); var recordedRenderPass = cmdList.EndRenderPass(fb); device.Submit(recordedRenderPass); DrawingBackendApi.Current.ResetContext(); - - if (sceneTarget is IDisposable disposable) - { - disposable.Dispose(); - } } private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsDevice, Material material) @@ -108,7 +109,8 @@ private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsD } var program = - graphicsDevice.CreateShaderProgram(new ShaderProgramDesc(material.Shaders.Select(x => new ShaderDesc(x.EntryName, x.ShaderBytes, x.ShaderType)))); + graphicsDevice.CreateShaderProgram(new ShaderProgramDesc( + material.Shaders.Select(x => new ShaderDesc(x.EntryName, x.ShaderBytes, x.ShaderType)))); cachedShaderPrograms.Add(material, program); return program; diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index e83dadb..a83f464 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -135,4 +135,9 @@ private Silk.NET.OpenGL.ShaderType ToOpenGlShaderType(ShaderType shaderType) throw new ArgumentOutOfRangeException(nameof(shaderType), shaderType, null); } } + + public void Dispose() + { + + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs index bf95d18..b0b1b13 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderApi.cs @@ -55,4 +55,9 @@ private void CreateGraphicsDevice(IOpenGlContext context) { GraphicsDevice = new OpenGlDevice(context); } + + public void Dispose() + { + GraphicsDevice.Dispose(); + } } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs index cb143f5..4ec0df2 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs @@ -11,17 +11,18 @@ using Drawie.RenderApi.Vulkan.Exceptions; using Drawie.RenderApi.Vulkan.Helpers; using Silk.NET.Vulkan; -using Buffer = Silk.NET.Vulkan.Buffer; using IAbstractionTexture = Drawie.RenderApi.Abstraction.Textures.ITexture; namespace Drawie.RenderApi.Vulkan; -public sealed class VulkanGraphicsDevice : IGraphicsDevice, IDisposable +public sealed class VulkanGraphicsDevice : IGraphicsDevice { private readonly VulkanContext context; private readonly CommandPool commandPool; private VulkanPipeline? pipeline; - + + private List disposables = new List(); + public VulkanGraphicsDevice(VulkanContext context) { if (context.Api is null) @@ -54,11 +55,14 @@ public IBuffer CreateBuffer( TData[]? data) where TData : unmanaged { - return new VulkanBuffer( + var buffer = new VulkanBuffer( context, commandPool, usage, data); + disposables.Add(buffer); + + return buffer; } public IAbstractionTexture CreateTexture(TextureDesc desc) @@ -73,6 +77,7 @@ public IAbstractionTexture CreateTexture(TextureDesc desc) desc); context.AddManagedTexture(vkTex, vkTex.ImageHandle); + disposables.Add(vkTex); return vkTex; } @@ -82,8 +87,14 @@ public IPipeline CreatePipeline(PipelineDesc desc) if (pipeline == null || !pipeline.Description.Equals(desc)) { + if (pipeline != null) + { + disposables.Remove(pipeline); + } + pipeline?.Dispose(); pipeline = new VulkanPipeline(context, desc); + disposables.Add(pipeline); } return pipeline; @@ -91,12 +102,16 @@ public IPipeline CreatePipeline(PipelineDesc desc) public ICommandList CreateCommandList() { - return new VulkanCommandList(context, commandPool); + var cmdList = new VulkanCommandList(context, commandPool); + disposables.Add(cmdList); + return cmdList; } public ISampler CreateSampler(SamplerDesc desc) { - return new VulkanSampler(context, desc); + var sampler = new VulkanSampler(context, desc); + disposables.Add(sampler); + return sampler; } public void Submit(RecordedRenderPass cmdList) @@ -106,7 +121,9 @@ public void Submit(RecordedRenderPass cmdList) public IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) { - return new VulkanShaderProgram(context, desc); + var program = new VulkanShaderProgram(context, desc); + disposables.Add(program); + return program; } public IRenderTarget CreateRenderTarget(TextureDesc textureDesc) @@ -127,6 +144,11 @@ public unsafe void Dispose() context.LogicalDevice.Device, commandPool, null); + + foreach (var disposable in disposables) + { + disposable.Dispose(); + } } } @@ -167,7 +189,8 @@ private BufferObject CreateNativeBuffer(ulong size, BufferUsage usage) { BufferUsage.Vertex => new VertexBuffer(context, size), BufferUsage.Index => new IndexBuffer(context, size), - BufferUsage.Uniform => new UniformBuffer(context.Api!, context.LogicalDevice.Device, context.PhysicalDevice, size), + BufferUsage.Uniform => new UniformBuffer(context.Api!, context.LogicalDevice.Device, context.PhysicalDevice, + size), BufferUsage.Storage => new VulkanStorageBuffer(context, size), _ => throw new ArgumentOutOfRangeException(nameof(usage), usage, null) }; diff --git a/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs index 3ffe3d5..000ad12 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanRenderApi.cs @@ -52,4 +52,14 @@ private static IGraphicsDevice CreateGraphicsDevice(IVulkanContext context) throw new InvalidOperationException("Vulkan graphics device is available only after the Vulkan context is initialized."); return new VulkanGraphicsDevice(vulkanContext); - }} + } + + public void Dispose() + { + GraphicsDevice?.Dispose(); + GraphicsDevice = null; + + if(VulkanContext is IDisposable disposable) + disposable.Dispose(); + } +} diff --git a/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs b/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs index 37aa62e..27a08f4 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs @@ -5,7 +5,6 @@ namespace Drawie.RenderApi.Vulkan; internal sealed class VulkanRenderTarget(Buffers.VulkanTexture texture, VecI size) : IRenderTarget, IDisposable { - //TODO: It's not exactly framebuffer id, validate if ImageHandle is correct. public ulong SurfaceId => Texture.ImageHandle; public VecI Size { get; } = size; public Buffers.VulkanTexture Texture { get; } = texture; diff --git a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs index 7e5bf9c..50e6064 100644 --- a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs +++ b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs @@ -7,7 +7,7 @@ namespace Drawie.RenderApi.Abstraction; -public interface IGraphicsDevice +public interface IGraphicsDevice : IDisposable { IBuffer CreateBuffer(BufferUsage usage, TData[]? data) where TData : unmanaged; ITexture CreateTexture(TextureDesc desc); diff --git a/src/Drawie.RenderApi/IRenderApi.cs b/src/Drawie.RenderApi/IRenderApi.cs index b15fdca..5a76307 100644 --- a/src/Drawie.RenderApi/IRenderApi.cs +++ b/src/Drawie.RenderApi/IRenderApi.cs @@ -2,7 +2,7 @@ namespace Drawie.RenderApi; -public interface IRenderApi +public interface IRenderApi : IDisposable { public IReadOnlyCollection WindowRenderApis { get; } public IGraphicsDevice GraphicsDevice { get; } diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index ba2bf45..527f0ce 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -23,6 +23,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index 444e8e4..2a08667 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -7,3 +7,5 @@ Drawie2SampleApp app = new Drawie2SampleApp(); engine.RunWithApp(app); + +await engine.Dispose(); \ No newline at end of file From 0689bd4e0af9221a62d5eaf436e5122d16e74b4d Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 15 Aug 2026 17:16:47 +0200 Subject: [PATCH 25/55] Added scene concept --- src/Drawie.Backend.Vertie/Core/Mesh.cs | 19 +--- src/Drawie.Backend.Vertie/Core/Scene.cs | 47 +++++++++ .../Helpers/TextureFramebufferExtensions.cs | 65 ++++++------ .../Rendering/Material.cs | 13 --- src/Drawie.Host.Browser/BrowserWindow.cs | 38 +++++-- src/Drawie.Host.Glfw/GlfwHost.cs | 18 ++-- .../Buffers/VulkanTexture.cs | 15 +-- .../Helpers/FormatExtensions.cs | 20 ++++ .../Builders/GraphicsPipelineBuilder.cs | 19 +++- .../Stages/Builders/RenderPassBuilder.cs | 52 ++++++++-- .../VulkanCommandList.cs | 4 +- src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs | 21 ++-- .../Abstraction/Pipeline/PipelineDesc.cs | 2 + src/Drawie.Rendering/IGraphicsStore.cs | 90 ----------------- src/Drawie.Rendering/Texture.cs | 14 ++- src/Drawie.Tests/SkiaBackendFixture.cs | 6 -- src/Drawie.sln | 7 -- src/Drawie2Sample/Assets/shiba.fbx | Bin 0 -> 311968 bytes src/Drawie2Sample/Assets/silkBoxed.png | Bin 11484 -> 0 bytes src/Drawie2Sample/Assets/silkSpecular.png | Bin 12099 -> 0 bytes src/Drawie2Sample/Assets/textures/diffuse.png | Bin 0 -> 1846540 bytes src/Drawie2Sample/Drawie2Sample.csproj | 2 +- src/Drawie2Sample/Drawie2SampleApp.cs | 43 ++------ src/DrawieSample.Desktop/Program.cs | 2 +- src/DrawieSample/DrawieSample.csproj | 13 --- src/DrawieSample/DrawieSampleApp.cs | 94 ------------------ 26 files changed, 249 insertions(+), 355 deletions(-) create mode 100644 src/Drawie.Backend.Vertie/Core/Scene.cs create mode 100644 src/Drawie.RenderApi.Vulkan/Helpers/FormatExtensions.cs delete mode 100644 src/Drawie.Rendering/IGraphicsStore.cs create mode 100644 src/Drawie2Sample/Assets/shiba.fbx delete mode 100644 src/Drawie2Sample/Assets/silkBoxed.png delete mode 100644 src/Drawie2Sample/Assets/silkSpecular.png create mode 100644 src/Drawie2Sample/Assets/textures/diffuse.png delete mode 100644 src/DrawieSample/DrawieSample.csproj delete mode 100644 src/DrawieSample/DrawieSampleApp.cs diff --git a/src/Drawie.Backend.Vertie/Core/Mesh.cs b/src/Drawie.Backend.Vertie/Core/Mesh.cs index 9dfd06a..d7cae52 100644 --- a/src/Drawie.Backend.Vertie/Core/Mesh.cs +++ b/src/Drawie.Backend.Vertie/Core/Mesh.cs @@ -1,6 +1,5 @@ using System.Numerics; -using Assimp; -using Assimp.Configs; +using Drawie.Backend.Vertie.Rendering; using Drawie.RenderApi.Abstraction; using Drawie.RenderApi.Abstraction.Buffers; @@ -14,6 +13,7 @@ public class Mesh public IReadOnlyList TexCoords => texCoords; public IReadOnlyList Indicies => indicies; public int IndexCount => Indicies.Count; + public Material Material { get; } internal bool BuffersInitialized { get; private set; } = false; public IBufferGroup Buffers { get; private set; } @@ -23,24 +23,13 @@ public class Mesh private Vector2[] texCoords; private uint[] indicies; - public Mesh(Vector3[] vertices, uint[] indicies, Vector3[] normals, Vector2[] texCoords) + public Mesh(Vector3[] vertices, uint[] indicies, Vector3[] normals, Vector2[] texCoords, Material material) { this.vertices = vertices; this.indicies = indicies; this.normals = normals; this.texCoords = texCoords; - } - - public Mesh(string path) - { - AssimpContext ctx = new AssimpContext(); - var scene = ctx.ImportFile(path, PostProcessPreset.TargetRealTimeMaximumQuality); - if (!scene.HasMeshes) return; - var mesh = scene.Meshes.FirstOrDefault(); - this.vertices = mesh!.Vertices.Select(x => new Vector3(x.X, x.Y, x.Z)).ToArray(); - this.indicies = mesh.GetUnsignedIndices().ToArray(); - this.normals = mesh.Normals.Select(x => new Vector3(x.X, x.Y, x.Z)).ToArray(); - this.texCoords = mesh.TextureCoordinateChannels[0].Select(x => new Vector2(x.X, x.Y)).ToArray(); + Material = material; } internal void GenerateBuffers(IGraphicsDevice device) diff --git a/src/Drawie.Backend.Vertie/Core/Scene.cs b/src/Drawie.Backend.Vertie/Core/Scene.cs new file mode 100644 index 0000000..a6e91aa --- /dev/null +++ b/src/Drawie.Backend.Vertie/Core/Scene.cs @@ -0,0 +1,47 @@ +using System.Numerics; +using Assimp; +using Drawie.Backend.Core; +using Drawie.Backend.Vertie.Rendering; +using Material = Drawie.Backend.Vertie.Rendering.Material; + +namespace Drawie.Backend.Vertie.Core; + +public class Scene +{ + public List Meshes { get; } = new List(); + + public Scene(string path, string assetsRoot = "") + { + AssimpContext ctx = new AssimpContext(); + var scene = ctx.ImportFile(path, PostProcessPreset.TargetRealTimeMaximumQuality); + if (!scene.HasMeshes) return; + + Rendering.Material[] materials = new Material[scene.Meshes.Count]; + for (var index = 0; index < scene.Materials.Count; index++) + { + var sceneMaterial = scene.Materials[index]; + materials[index] = new Material(sceneMaterial.Name, + [BuiltInShaders.BasicVertexShader, BuiltInShaders.UnlitFragmentShader]); + string texPath = Path.Combine(assetsRoot, + Path.GetFileName(sceneMaterial.TextureDiffuse.FilePath?.Replace("\\", "/") ?? "")); + + //TODO It's a temp solution + if (!sceneMaterial.HasTextureDiffuse) + { + texPath = Path.Combine(assetsRoot, "diffuse.png"); + if(!File.Exists(texPath)) continue; + } + + materials[index].AddTexture(NativeTexture.Load(texPath)); + } + + foreach (var mesh in scene.Meshes) + { + var vertices = mesh!.Vertices.Select(x => new Vector3(x.X, x.Y, x.Z)).ToArray(); + var indicies = mesh.GetUnsignedIndices().ToArray(); + var normals = mesh.Normals.Select(x => new Vector3(x.X, x.Y, x.Z)).ToArray(); + var texCoords = mesh.TextureCoordinateChannels[0].Select(x => new Vector2(x.X, x.Y)).ToArray(); + Meshes.Add(new Mesh(vertices, indicies, normals, texCoords, materials[mesh.MaterialIndex])); + } + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 9035e2d..7063791 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -16,29 +16,30 @@ public static class TextureFramebufferExtensions { private static Dictionary cachedSamplers = new Dictionary(); - private static Dictionary cachedShaderPrograms = - new Dictionary(); - + private static Dictionary cachedShaderPrograms = + new Dictionary(); + private static IRenderTarget? cachedRenderTarget; private static ICommandList? cmdList; - public static void DrawMesh(this TextureFramebuffer fb, Mesh mesh, Material material, Camera camera, + public static void DrawScene(this TextureFramebuffer fb, Scene scene, Camera camera, RenderOptions options = default) { IGraphicsDevice device = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice; fb.Canvas?.Flush(); - DrawMesh(fb, mesh, material, camera, device, options); + DrawScene(fb, scene, camera, device, options); } - public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Camera camera, IGraphicsDevice device, + public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, + IGraphicsDevice device, RenderOptions options) { if (cachedRenderTarget == null || cachedRenderTarget.Size != fb.Size) { (cachedRenderTarget as IDisposable)?.Dispose(); - + cachedRenderTarget = device.CreateRenderTarget(new TextureDesc() { Width = fb.Size.X, @@ -48,7 +49,7 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came }); } - var shader = GetOrCreateShaderProgram(device, material); + var shader = GetOrCreateShaderProgram(device, scene); var pipeline = device.CreatePipeline(new PipelineDesc() { @@ -56,6 +57,7 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came { Enabled = true, DepthCompare = DepthCompareType.Less, + Format = DepthFormat.Depth24Stencil8 }, Rasterizer = new RasterizerDesc() { @@ -69,49 +71,54 @@ public static void DrawMesh(IRenderTarget fb, Mesh mesh, Material material, Came cmdList.BeginRenderPass(cachedRenderTarget); cmdList.SetPipeline(pipeline); - if (!mesh.BuffersInitialized) + foreach (var mesh in scene.Meshes) { - mesh.GenerateBuffers(device); - } + if (!mesh.BuffersInitialized) + { + mesh.GenerateBuffers(device); + } - cmdList.SetBuffers(mesh.Buffers); + cmdList.SetBuffers(mesh.Buffers); - material.Use(camera); - material.PrepareForObject(mesh.Transform); + var material = mesh.Material; + material.Use(camera); + material.PrepareForObject(mesh.Transform); - shader.UpdateUniforms(material.Properties.Values.ToList()); + shader.UpdateUniforms(material.Properties.Values.ToList()); - for (var i = 0; i < material.Textures.Count; i++) - { - var materialTexture = material.Textures[i]; - var sampler = cachedSamplers.GetValueOrDefault(materialTexture); - if (sampler == null) + for (var i = 0; i < material.Textures.Count; i++) { - sampler = device.CreateSampler(new SamplerDesc()); - cachedSamplers[materialTexture] = sampler; + var materialTexture = material.Textures[i]; + var sampler = cachedSamplers.GetValueOrDefault(materialTexture); + if (sampler == null) + { + sampler = device.CreateSampler(new SamplerDesc()); + cachedSamplers[materialTexture] = sampler; + } + + cmdList.BindTexture(materialTexture, sampler); } - cmdList.BindTexture(materialTexture, sampler); + cmdList.DrawIndexed(mesh.IndexCount); } - cmdList.DrawIndexed(mesh.IndexCount); var recordedRenderPass = cmdList.EndRenderPass(fb); device.Submit(recordedRenderPass); DrawingBackendApi.Current.ResetContext(); } - private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsDevice, Material material) + private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsDevice, Scene scene) { - if (cachedShaderPrograms.ContainsKey(material)) + if (cachedShaderPrograms.ContainsKey(scene)) { - return cachedShaderPrograms[material]; + return cachedShaderPrograms[scene]; } var program = graphicsDevice.CreateShaderProgram(new ShaderProgramDesc( - material.Shaders.Select(x => new ShaderDesc(x.EntryName, x.ShaderBytes, x.ShaderType)))); - cachedShaderPrograms.Add(material, program); + scene.Meshes.SelectMany(x => x.Material.Shaders).Select(x => new ShaderDesc(x.EntryName, x.ShaderBytes, x.ShaderType)))); + cachedShaderPrograms.Add(scene, program); return program; } diff --git a/src/Drawie.Backend.Vertie/Rendering/Material.cs b/src/Drawie.Backend.Vertie/Rendering/Material.cs index f7df473..da3be72 100644 --- a/src/Drawie.Backend.Vertie/Rendering/Material.cs +++ b/src/Drawie.Backend.Vertie/Rendering/Material.cs @@ -25,13 +25,6 @@ public Material(string name, Shader[] shaders) .AddProperty(new ShaderProperty("uModel", Matrix4x4.Identity)) .AddProperty(new ShaderProperty("uView", Matrix4x4.Identity)) .AddProperty(new ShaderProperty("uProjection", Matrix4x4.Identity))); - - /* - if (shader.HasUniform("viewPos")) - { - AddProperty("Camera", "viewPos"); - } - */ } public void AddTexture(ITexture texture) @@ -43,12 +36,6 @@ public void Use(Camera camera) { Properties["Transform"].SetProperty("uView", camera.ViewMatrix); Properties["Transform"].SetProperty("uProjection", camera.ProjectionMatrix); - /* - if (Shader.HasUniform("viewPos")) - { - SetProperty("Camera", "viewPos", camera.Position); - } - */ } public void PrepareForObject(Transform transform) diff --git a/src/Drawie.Host.Browser/BrowserWindow.cs b/src/Drawie.Host.Browser/BrowserWindow.cs index c384221..872cbb1 100644 --- a/src/Drawie.Host.Browser/BrowserWindow.cs +++ b/src/Drawie.Host.Browser/BrowserWindow.cs @@ -54,11 +54,11 @@ public bool IsVisible private Texture renderTexture; private VecI? pendingResize = null; - private GraphicsStore store; private HtmlCanvas canvas; private List layers = new List(); private List renderStack = new List(); + private List renderContentOrder = new List(); public void Initialize() { @@ -69,14 +69,16 @@ public void Initialize() RenderApi.FramebufferResized += FramebufferResized; InputController = new InputController(new [] { new BrowserKeyboard() }, [new BrowserPointer()], null); - store = new GraphicsStore(RenderApi.GraphicsContext); - GraphicsStore.Global = store; renderStack.Add(new RenderOrder("Init", _ => { })); - renderStack.Add(new RenderOrder("Render", RenderContent)); + renderStack.Add(new RenderOrder("RenderContent", RenderContent)); renderStack.Add(new RenderOrder("RenderApi", RenderApi.Render)); + + renderContentOrder.Add(new RenderContentOrder("Init", (_, _) => {})); + renderContentOrder.Add(new RenderContentOrder("RenderContent", OnRenderContentDefault)); } - + + public void AddLayer(ILayer layer) { layers.Add(layer); @@ -91,6 +93,15 @@ public void SubscribeToRender(string name, string renderAfter, Action re } } + public void SubscribeToRenderContent(string name, string renderAfter, Action render) + { + var foundRenderAfter = renderContentOrder.FindIndex(r => r.Name == renderAfter); + if (foundRenderAfter != -1) + { + renderContentOrder.Insert(foundRenderAfter + 1, new RenderContentOrder(name, render)); + } + } + private void FramebufferResized() { pendingResize = UsableWindowSize; @@ -122,7 +133,7 @@ private void OnRender(double dt) var oldTexture = renderTexture; renderTexture = newRenderTexture; - store.DisposeTexture(oldTexture); + oldTexture.Dispose(); } pendingResize = null; @@ -143,11 +154,22 @@ private void RenderContent(double dt) var renderingScope = ctx.Open(); var fbo = ctx.Edit(renderTexture); fbo.Clear(); - Render?.Invoke(fbo, dt); + + foreach (var layer in renderContentOrder) + { + layer.Render(fbo, dt); + } + fbo.Dispose(); renderingScope.Dispose(); ctx.Dispose(); } + + + private void OnRenderContentDefault(TextureFramebuffer fbo, double dt) + { + Render?.Invoke(fbo, dt); + } public void Close() { @@ -161,6 +183,6 @@ private void OnWindowResized(int width, int height) private Texture CreateRenderTexture() { - return store.CreateNativeRenderSurface(UsableWindowSize, RenderApi.RenderTexture, SurfaceOrigin.BottomLeft); + return new Texture(NativeTexture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(UsableWindowSize, RenderApi.RenderTexture, SurfaceOrigin.BottomLeft))); } } diff --git a/src/Drawie.Host.Glfw/GlfwHost.cs b/src/Drawie.Host.Glfw/GlfwHost.cs index 7c695c7..1e904b1 100644 --- a/src/Drawie.Host.Glfw/GlfwHost.cs +++ b/src/Drawie.Host.Glfw/GlfwHost.cs @@ -20,7 +20,6 @@ namespace Drawie.Silk; public class GlfwHost : Drawie.Host.IHost { - private GraphicsStore store; private IWindow? window; private bool isRunning; @@ -90,8 +89,8 @@ public GlfwHost(string name, VecI size, IHostViewRenderApi renderApi) renderStack.Add(new RenderOrder("Init", _ => { })); renderStack.Add(new RenderOrder("Render", RenderContent)); renderStack.Add(new RenderOrder("RenderApi", RenderApi.Render)); - - renderContentStack.Add(new RenderContentOrder("Init", (_, _) => {})); + + renderContentStack.Add(new RenderContentOrder("Init", (_, _) => { })); renderContentStack.Add(new RenderContentOrder("RenderContent", DefaultRenderContent)); } @@ -127,9 +126,6 @@ public void Initialize() RenderApi.CreateInstance(window.Native, window.Size.ToVecI()); } - store = new GraphicsStore(RenderApi.GraphicsContext); - GraphicsStore.Global = store; - for (int i = 0; i < layers.Count; i++) { if (!layers[i].IsRenderApiSupported(RenderApi)) @@ -195,7 +191,7 @@ public void Show() private void RenderApiOnFramebufferResized() { - store.DisposeTexture(renderTexture); + renderTexture.Dispose(); surface = null!; CreateRenderTarget(window!.FramebufferSize.ToVecI(), RenderApi.RenderTexture); @@ -203,8 +199,9 @@ private void RenderApiOnFramebufferResized() private void CreateRenderTarget(VecI size, ITexture nativeRenderTexture) { - renderTexture = store.CreateNativeRenderSurface(size, nativeRenderTexture, - RenderApi is IVulkanHostViewRenderApi ? SurfaceOrigin.TopLeft : SurfaceOrigin.BottomLeft); + renderTexture = new Texture(NativeTexture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, + nativeRenderTexture, + RenderApi is IVulkanHostViewRenderApi ? SurfaceOrigin.TopLeft : SurfaceOrigin.BottomLeft))); } private void WindowOnFramebufferResize(Vector2D newSize) @@ -243,7 +240,6 @@ public void Close() { window.Update -= OnUpdate; window.Render -= OnRender; - store.Dispose(); RenderApi.DestroyInstance(); window?.Close(); @@ -267,7 +263,7 @@ public void SubscribeToRender(string name, string renderAfter, Action re renderStack.Add(new RenderOrder(name, render)); } } - + public void SubscribeToRenderContent(string name, string renderAfter, Action render) { var foundRenderAfter = renderContentStack.FindIndex(r => r.Name == renderAfter); diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index c685991..8ed90dd 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -80,7 +80,7 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, if (desc.Depth != DepthFormat.NoDepth) { - var depthFormat = ToVkDepthFormat(desc.Depth); + var depthFormat = desc.Depth.ToVkFormat(); depthAttachment = new VulkanImageAttachment( Vk, @@ -100,19 +100,6 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CreateSampler(); } - private Format ToVkDepthFormat(DepthFormat descDepth) - { - switch (descDepth) - { - case DepthFormat.NoDepth: - throw new ArgumentException("No depth is not supported depth format."); - case DepthFormat.Depth24Stencil8: - return Format.D24UnormS8Uint; - default: - throw new ArgumentOutOfRangeException(nameof(descDepth), descDepth, null); - } - } - private Format ToVkFormat(TextureFormat descFormat) { return descFormat switch diff --git a/src/Drawie.RenderApi.Vulkan/Helpers/FormatExtensions.cs b/src/Drawie.RenderApi.Vulkan/Helpers/FormatExtensions.cs new file mode 100644 index 0000000..37ca96f --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/Helpers/FormatExtensions.cs @@ -0,0 +1,20 @@ +using Drawie.RenderApi.Abstraction.Textures; +using Silk.NET.Vulkan; + +namespace Drawie.RenderApi.Vulkan.Helpers; + +public static class FormatExtensions +{ + public static Format ToVkFormat(this DepthFormat descDepth) + { + switch (descDepth) + { + case DepthFormat.NoDepth: + throw new ArgumentException("No depth is not supported depth format."); + case DepthFormat.Depth24Stencil8: + return Format.D24UnormS8Uint; + default: + throw new ArgumentOutOfRangeException(nameof(descDepth), descDepth, null); + } + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs index f45508b..00a2840 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs @@ -12,6 +12,8 @@ public class GraphicsPipelineBuilder public RenderPassBuilder RenderPassBuilder { get; set; } public GraphicsPipelineVertexLayoutBuilder VertexLayoutBuilder { get; set; } + public CullModeFlags CullMode { get; set; } = CullModeFlags.None; + public FrontFace FrontFace { get; set; } = FrontFace.Clockwise; public bool HasDepthStencil { get; set; } public PolygonMode PolygonMode { get; set; } = PolygonMode.Fill; public bool DoNotDisposeStages { get; set; } @@ -28,6 +30,18 @@ public GraphicsPipelineBuilder WithPolygonMode(PolygonMode polygonMode) return this; } + public GraphicsPipelineBuilder WithCullMode(CullModeFlags cullMode) + { + CullMode = cullMode; + return this; + } + + public GraphicsPipelineBuilder WithFrontFace(FrontFace frontFace) + { + FrontFace = frontFace; + return this; + } + public GraphicsPipelineBuilder AddStage(Action stageBuilder) { GraphicsPipelineStageBuilder stage = new(Vk, LogicalDevice); @@ -128,9 +142,8 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain RasterizerDiscardEnable = false, PolygonMode = PolygonMode, LineWidth = 1.0f, - CullMode = CullModeFlags.None, - /*CullMode = CullModeFlags.BackBit, - FrontFace = FrontFace.Clockwise,*/ + CullMode = CullMode, + FrontFace = FrontFace, DepthBiasEnable = false }; diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs index 5750be9..003dd49 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs @@ -7,6 +7,9 @@ public class RenderPassBuilder : IDisposable { public Vk Vk { get; set; } public Device LogicalDevice { get; set; } + + public bool WithDepthStencil { get; set; } + public Format DepthStencilFormat { get; set; } public RenderPassBuilder(Vk vk, Device logicalDevice) { @@ -14,18 +17,38 @@ public RenderPassBuilder(Vk vk, Device logicalDevice) LogicalDevice = logicalDevice; } - public unsafe RenderPass Create(Format swapChainImageFormat, ImageLayout finalLayout) + public RenderPassBuilder WithDepth(Format depthStencilFormat) + { + WithDepthStencil = true; + DepthStencilFormat = depthStencilFormat; + return this; + } + + + public unsafe RenderPass Create(Format format, ImageLayout imageLayout) { AttachmentDescription colorAttachment = new() { - Format = swapChainImageFormat, + Format = format, Samples = SampleCountFlags.Count1Bit, LoadOp = AttachmentLoadOp.Clear, StoreOp = AttachmentStoreOp.Store, StencilLoadOp = AttachmentLoadOp.DontCare, StencilStoreOp = AttachmentStoreOp.DontCare, InitialLayout = ImageLayout.Undefined, - FinalLayout = finalLayout + FinalLayout = imageLayout + }; + + AttachmentDescription depthAttachment = new() + { + Format = DepthStencilFormat, + Samples = SampleCountFlags.Count1Bit, + InitialLayout = ImageLayout.Undefined, + FinalLayout = ImageLayout.DepthStencilAttachmentOptimal, + LoadOp = AttachmentLoadOp.Clear, + StoreOp = AttachmentStoreOp.DontCare, + StencilLoadOp = AttachmentLoadOp.Clear, + StencilStoreOp = AttachmentStoreOp.DontCare, }; AttachmentReference colorAttachmentRef = new() @@ -34,11 +57,18 @@ public unsafe RenderPass Create(Format swapChainImageFormat, ImageLayout finalLa Layout = ImageLayout.ColorAttachmentOptimal }; + AttachmentReference depthAttachmentRef = new() + { + Attachment = 1, + Layout = ImageLayout.DepthStencilAttachmentOptimal + }; + SubpassDescription subpass = new() { PipelineBindPoint = PipelineBindPoint.Graphics, ColorAttachmentCount = 1, - PColorAttachments = &colorAttachmentRef + PColorAttachments = &colorAttachmentRef, + PDepthStencilAttachment = WithDepthStencil ? &depthAttachmentRef : null, }; SubpassDependency dependency = new() @@ -51,11 +81,21 @@ public unsafe RenderPass Create(Format swapChainImageFormat, ImageLayout finalLa DstAccessMask = AccessFlags.ColorAttachmentWriteBit }; + AttachmentDescription* attachments = &colorAttachment; + if (WithDepthStencil) + { + var attachmentDescriptions = stackalloc AttachmentDescription[2]; + attachmentDescriptions[0] = colorAttachment; + attachmentDescriptions[1] = depthAttachment; + + attachments = attachmentDescriptions; + } + RenderPassCreateInfo renderPassInfo = new() { SType = StructureType.RenderPassCreateInfo, - AttachmentCount = 1, - PAttachments = &colorAttachment, + AttachmentCount = (uint)(WithDepthStencil ? 2 : 1), + PAttachments = attachments, SubpassCount = 1, PSubpasses = &subpass, DependencyCount = 1, diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index d28f08b..8123e38 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -214,7 +214,7 @@ private unsafe void BeginRendering(VulkanRenderTarget target) ClearValue = new ClearValue { Color = new ClearColorValue(0f, 0f, 0f, 1f) - } + }, }; RenderingAttachmentInfo depthAttachment = default; @@ -225,7 +225,7 @@ private unsafe void BeginRendering(VulkanRenderTarget target) { SType = StructureType.RenderingAttachmentInfo, ImageView = target.Texture.DepthAttachment.View, - ImageLayout = ImageLayout.DepthAttachmentOptimal, + ImageLayout = ImageLayout.DepthStencilAttachmentOptimal, LoadOp = AttachmentLoadOp.Clear, StoreOp = AttachmentStoreOp.Store, ClearValue = new ClearValue diff --git a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs index 1b3abee..15d5fd8 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs @@ -1,6 +1,8 @@ using Drawie.Backend.Vertie.Core; using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; +using Drawie.RenderApi.Abstraction.Textures; +using Drawie.RenderApi.Vulkan.Helpers; using Drawie.RenderApi.Vulkan.Stages; using Drawie.RenderApi.Vulkan.Stages.Builders; using Silk.NET.Vulkan; @@ -40,27 +42,32 @@ public VulkanPipeline( public unsafe void Apply(ICommandList cmdList) { - if(cmdList is not VulkanCommandList commandList) throw new ArgumentNullException("Only vulkan command list is supported"); - + if (cmdList is not VulkanCommandList commandList) + throw new ArgumentNullException("Only vulkan command list is supported"); + context.Api!.CmdBindPipeline( commandList.CommandBuffer, PipelineBindPoint.Graphics, Pipeline); - + var descriptorSet = program.DescriptorSet; - context.Api.CmdBindDescriptorSets(commandList.CommandBuffer, PipelineBindPoint.Graphics, GraphicsPipeline.VkPipelineLayout, 0, 1, &descriptorSet, 0, null); + context.Api.CmdBindDescriptorSets(commandList.CommandBuffer, PipelineBindPoint.Graphics, + GraphicsPipeline.VkPipelineLayout, 0, 1, &descriptorSet, 0, null); } private GraphicsPipeline CreatePipeline() { Builder.WithVertexLayout(layout => layout.WithVec3().WithVec3().WithVec2()); Builder.WithPolygonMode(Description.Rasterizer.RenderMode == RenderMode.Default - ? PolygonMode.Fill - : PolygonMode.Line); + ? PolygonMode.Fill + : PolygonMode.Line) + .WithCullMode(CullModeFlags.BackBit) + .WithFrontFace(FrontFace.Clockwise); + Builder.Stages.Add(program.VertexStageBuilder); Builder.Stages.Add(program.FragmentStageBuilder); Builder.DoNotDisposeStages = true; - Builder.WithRenderPass(builder => {}); + Builder.WithRenderPass(builder => { builder.WithDepth(Description.Depth.Format.ToVkFormat()); }); Builder.WithDepth(); var descriptorSetLayout = program.DescriptorSetLayout; var pipeline = Builder.Create(new Extent2D((uint)Description.Viewport.Width, (uint)Description.Viewport.Height), diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs index 7a9701b..2a8b34e 100644 --- a/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/PipelineDesc.cs @@ -1,5 +1,6 @@ using Drawie.Numerics; using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.RenderApi.Abstraction.Pipeline; @@ -31,6 +32,7 @@ public record struct DepthDesc { public bool Enabled { get; set; } public DepthCompareType DepthCompare { get; set; } + public DepthFormat Format { get; set; } } public enum DepthCompareType diff --git a/src/Drawie.Rendering/IGraphicsStore.cs b/src/Drawie.Rendering/IGraphicsStore.cs deleted file mode 100644 index 6ad5e78..0000000 --- a/src/Drawie.Rendering/IGraphicsStore.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System.Text; -using Drawie.Backend.Core; -using Drawie.Backend.Core.Bridge; -using Drawie.Numerics; -using Drawie.RenderApi; -using Drawie.RenderApi.Abstraction.Textures; - -namespace Drawie.Rendering; - -/// -/// Represents a structure holding and managing native textures and objects -/// -public class GraphicsStore : IDisposable -{ - public static GraphicsStore Global { get; set; } -#if DEBUG - public static List AllStores = new List(); -#endif - public IGraphicsContext GraphicsContext { get; set; } - private List textures = new List(); - - public bool IsDisposed { get; private set; } - - public GraphicsStore(IGraphicsContext graphicsContext) - { - GraphicsContext = graphicsContext; -#if DEBUG - AllStores.Add(this); -#endif - } - - public Texture Create(VecI size) - { - textures.Add(new Texture(new NativeTexture(size))); - return textures[^1]; - } - - public Texture CreateNativeRenderSurface(VecI size, ITexture nativeTexture, SurfaceOrigin origin) - { - textures.Add(new Texture( - NativeTexture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, nativeTexture, origin)))); - return textures[^1]; - } - - public void DisposeTexture(Texture toDispose) - { - if(!textures.Contains(toDispose)) - { - throw new ArgumentException("The given texture is not owned by this graphics store."); - } - - textures.Remove(toDispose); - toDispose.NativeTexture.Dispose(); - } - - public void Dispose() - { - foreach (var texture in textures) - { - texture.NativeTexture.Dispose(); - } - - textures.Clear(); - IsDisposed = true; - } - -#if DEBUG - public string GetDebugText() - { - StringBuilder sb = new StringBuilder(); - - sb.AppendLine("GraphicsStore Debug Info:"); - sb.AppendLine("Textures Count: " + textures.Count); - int totalMemoryMb = CountMemoryUsed(textures); - sb.AppendLine("Total Memory Used: " + totalMemoryMb + "MB"); - return sb.ToString(); - } - - private int CountMemoryUsed(List list) - { - int bytes = 0; - foreach (var texture in list) - { - bytes += texture.NativeTexture.ImageInfo.BytesSize; - } - - return bytes / (1024 * 1024); - } -#endif -} \ No newline at end of file diff --git a/src/Drawie.Rendering/Texture.cs b/src/Drawie.Rendering/Texture.cs index a5d4cce..9d666c5 100644 --- a/src/Drawie.Rendering/Texture.cs +++ b/src/Drawie.Rendering/Texture.cs @@ -7,19 +7,27 @@ namespace Drawie.Rendering; /// /// Readonly texture, can be modified with a Rendering Context /// -public class Texture : ITexture +public class Texture : ITexture, IDisposable { - public NativeTexture NativeTexture { get; } + internal NativeTexture NativeTexture { get; } public int Width { get; } public int Height { get; } public VecI Size => new VecI(Width, Height); public ulong TextureId => NativeTexture.TextureId; + public Texture(VecI size) : this(new NativeTexture(size)) + { + } - internal Texture(NativeTexture native) + public Texture(NativeTexture native) { NativeTexture = native; Width = native.Size.X; Height = native.Size.Y; } + + public void Dispose() + { + NativeTexture.Dispose(); + } } \ No newline at end of file diff --git a/src/Drawie.Tests/SkiaBackendFixture.cs b/src/Drawie.Tests/SkiaBackendFixture.cs index 40fde1c..57952ac 100644 --- a/src/Drawie.Tests/SkiaBackendFixture.cs +++ b/src/Drawie.Tests/SkiaBackendFixture.cs @@ -1,10 +1,4 @@ using Drawie.Backend.Core.Bridge; -using Drawie.RenderApi.OpenGL; -using Drawie.RenderApi.Vulkan; -using Drawie.Skia; -using Drawie.Windowing; -using DrawiEngine; -using DrawiEngine.Desktop; namespace Drawie.Tests; diff --git a/src/Drawie.sln b/src/Drawie.sln index b568874..33aacc9 100644 --- a/src/Drawie.sln +++ b/src/Drawie.sln @@ -35,8 +35,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosts", "Hosts", "{823F63C1 EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.JSInterop", "Drawie.JSInterop\Drawie.JSInterop.csproj", "{6B57DDAF-FE9A-496C-B290-D019004B6B11}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawieSample", "DrawieSample\DrawieSample.csproj", "{6E2E0A40-4156-43C2-B0BD-2100FE4B0E4A}" -EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawiEngine.Browser", "DrawiEngine.Browser\DrawiEngine.Browser.csproj", "{6E4896DE-D6A3-433F-B350-2B35D0320F53}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawiEngine.Desktop", "DrawiEngine.Desktop\DrawiEngine.Desktop.csproj", "{88620A08-0FC3-4A60-835C-2FB516141375}" @@ -138,10 +136,6 @@ Global {6B57DDAF-FE9A-496C-B290-D019004B6B11}.Debug|Any CPU.Build.0 = Debug|Any CPU {6B57DDAF-FE9A-496C-B290-D019004B6B11}.Release|Any CPU.ActiveCfg = Release|Any CPU {6B57DDAF-FE9A-496C-B290-D019004B6B11}.Release|Any CPU.Build.0 = Release|Any CPU - {6E2E0A40-4156-43C2-B0BD-2100FE4B0E4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E2E0A40-4156-43C2-B0BD-2100FE4B0E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E2E0A40-4156-43C2-B0BD-2100FE4B0E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E2E0A40-4156-43C2-B0BD-2100FE4B0E4A}.Release|Any CPU.Build.0 = Release|Any CPU {6E4896DE-D6A3-433F-B350-2B35D0320F53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6E4896DE-D6A3-433F-B350-2B35D0320F53}.Debug|Any CPU.Build.0 = Debug|Any CPU {6E4896DE-D6A3-433F-B350-2B35D0320F53}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -229,7 +223,6 @@ Global {503FADEB-B803-4B27-BE37-DDAA37C5CDA9} = {823F63C1-3DD7-4DE7-A41E-B4E0159FBCB4} {14896E27-47BA-48E9-81D1-612582C8FF5B} = {823F63C1-3DD7-4DE7-A41E-B4E0159FBCB4} {D4927AD1-8A67-4358-B867-EA19771D47C8} = {823F63C1-3DD7-4DE7-A41E-B4E0159FBCB4} - {6E2E0A40-4156-43C2-B0BD-2100FE4B0E4A} = {239DB1B4-E66F-444A-87DA-B19775F40974} {0CF0D692-9EEC-43C2-9064-E59609A134E6} = {239DB1B4-E66F-444A-87DA-B19775F40974} {43F3D61C-5FA8-4F24-ABDC-186E287EC882} = {844D01F5-5C74-4635-9DBB-12303702D4A6} {B5E4E80D-C248-4565-90F9-B3ECDF450EC6} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} diff --git a/src/Drawie2Sample/Assets/shiba.fbx b/src/Drawie2Sample/Assets/shiba.fbx new file mode 100644 index 0000000000000000000000000000000000000000..620dd55e9a3d88d034172f05c0081941ec04c8a4 GIT binary patch literal 311968 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⪻5tk#3zCBk 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

p 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

2M_u8}g9WdQcFKRKCT?QQ{*{y7`Mfqw+G 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

wD0 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

n1#2YJW*#6F zks%e|TY}lG0I?Z6q~i00uq*2fdGGM?>8}y}KYgb3^gzbba~%pmY1Wg1Wue*!#P zVFoZU&!8#uK6B4qQCVRTJbay-=?VlnUZ9-4cV$4L)|*w-!>)27KXpA;*95RdUu;_eu9*OMKNa^M9?*Y@{^#j@Mfkt=T`O(C z3jru9k?YyXF72^EWpQFwhO0T@k6e<1Vv~H zDI&dwaT#G;ntsQ?pApgMvVeN%e*v#hlVL7L$)_!qS_Jx^1p4>oil?Oi^Dz$Eb$M&I zZ0*D?r}+gF(B%L9CSRb<3JXN4d#eXPk>T?eO@VBn-Yf4q3>s{kg#jAQVpjHvT-ykk=pX{5XZuBj zy^eqbw$hyc{Kx6+nH?0Go#r-E^(qC+3o=^+u%AuuuS_)00IAMuK5Yhje0=|2 zFD@<&UQrVHHNmy}+o$*QM-Sin`Zr&E{ngud?#yBZX{-uif~pYnE~Z>qKc3YJfJM-q zKm1abX$Lj0fS`1pA<1lWuUPQZ$|6}ym`_aqL5oGHlSMMggNmQ}mfcO^|KYg*)khd= z?UP6t3jkJPe^#>c1~OnB_wRqfVRKyL%a5i2jTG-fa>K2*E#?%g+4T>S0iX?g+{rt5 zOSV~U%?UXN8n+#xZYA*_8TC_XfG+vR#ibo{u%rRlUk4OKeBp44*TJLw+i~2Tq``&( zeMb(tmID4PTd;P%2rWftVUK8c3AT=O=hnfNKD7-$S8xuZohh*&ct^a#lRbv4|J4+rt?u6~%zxRRxOVow($VbLV^sA2?8c3y z31F22IK>2Taeltroh^L;$pH*w?!4bGgMeta8!$VaXPGA7s+hc@Ge@!O=!E^~L)(_ z;dygc3jo%*zzZV!Q@{LII}YHA;Xj~_=>G#(hvBVkfygE=V$vBRj=$Fw8~rOJ;quw|c`^oMofCw(V+`tI3q*k(Ll-k2QnYBv;VvNH18s z7s%S#G@y5McUgF@atM;L5xbp%ky~u2uHvV)$$3_i=mBnuSOA?~(5?Q?6SUvU)CMUx z1&Ai189Wmvq8T(btgtG^>;E-1)0{a%&0xH630#dzKD-gh`1o#jTV97VTm3 z(f(}XtkffS6wLKdWIOC(Wuf8jC!o*8EjJ;f#>Wve^CEPfqx`Le0%X}*fc3t_`?eQI zu1szW_q~?k9Rlp>&ou&w7fA)QK>S$!S&Kzs7>SJ{I8x&9_g$bRFmCoLD_-!?)2 zRi>fnD`|0V-K-Tp{Z8dkumD<$?Rf2<284#|`F5=2qy<&5Cr4@M0nLU)xTI|ZBGx+puhi$ppoqu<6nlBd-h=3dBDH0$JQpl|^Uu!w;R9QeHt zTxmfCDbyPRQl@REgtxx_jn)iIlzG#wL|{=*h%zeVi(@C2#}Dp<=+<-3kwsk2n09RA zD?D_PrilSDZh)<(*6S9WaN!i%Fa>z!?d1w35t}eznURM6M?6}6uUJY&gbpV{U8pG? z{cqQ%32yr+|A>s|4A4x*By)sJSYedF06%tmGXbL200huHD;R!x0kcNauenMUI^)Tshff~d z&to^%R<#;EqU1=XS#+B;8bpG-@4WN)y@xNq{+b9Ym_;D&axYv8Nd3hkNKuHerU2Q> zjaf(u7Ez^O0rTWyDYzn;d-;zWjcFO&d9)1}B@L&(>&$CuKWnwR8)d&-8R%u^5A_`Y zgH*pK5(bTb*&@Rsu-q=&UfDta2XOz*T%cjk;v=jyZ$`x@NXy(2)P)b=&Kxk{o|@MqjSY3)Kr-GdEnUm+};JPIrW4zJbv$9C$Q=Gja~tHIQ$2z;Xl}@1b(_^+bhW! zPnXo031Eu@xU3JLMh?b{qM3zIe-VYUe+Z-5&pyJ?e{eolw%+|bLveQF<^ZN0J9C|W zQsb3!w@mx7c}rNP$!zJiO3fGZ{`^9F={>W2{BuA4i@*4Lf9!Lge(}ZUMTkJE6bUHA z%=QqLwjq;P{690Fot<$+0Le}wNHOZVti4HsNl`mjwW;AAjnX|0)qJtpF#7{~TcpdgVd8ET)|lGS+ohj_ik^$1oJtnJmkR z+qop>*x1dWJk)_r_vU6*D= zXx>Ziwo58)Yo^$;NP1F2Cilcy+$;RD$r9202=f5jaV!sqZF8r7_-k99!SU^9RgShb)^iwIv>S?jo>@ztlp{fBp=OaTf%WJ%*OK(e|4BC*G% zA|}=KgW=pG;>B{2HOuIw1(#cvpUMQVq47Vuhz-KK>z!CG2kPMn2e5m}4e$fR{XbaH z{{Zxl<>~ySW=>xDOBQD5RT|fo>WmTvgJBy8eEc^3##Cq%1?@5In64dKX|dTf5tKsj8$whgkcj!HaL=@y4C zjatxH9ygU~ikw*66_HDRk1~w8{1UJR_i_JhVhpBr6Tk@l^P&im>W`xpRpyGEgs-?* z)IV)0{SScttC2+OPi7GCudG$0dJ*-DF@RcFV*=`yQ8bL665LY)B@QUX_?e5+)dka7 z1x%DBKkKUhVL{%q0yF@%e4a|mL7e`Hq8qr4NLd0{bD!7O!KzxVfQ1GMS!Cwrd($7# zx|2|F?3Pd*{!)-3{_39M*)dy#{-MB=hmY^R{U#OYKmS`Ye~Pfa5CQ0+7FV4T6Va0g z_ix;~)s~%EMVQR2tjd$jN;_7lfJljDB2|c~wiV1yc&aKfPZL9lCm{l7^;MgMVm#y| zbQr2IUy;iq90e|Iky`U{IIRTXq1IcHsRiNg0D!c&7Vp0ct^9r-NjYG%Ec^|k*n3WrmHLEgMk%|5kjnkl6 z?QQk-fA-D^C_(Y$(WA!??l<(cGILF8&-JqjIs&Y%q}M;gpz}u$-~ProUVQzHTX$}Y zLJ2a7QCic4I5X7EDs@G6J-|HF2%CdjCsHCrG<)rH(FH_tK+kO-nrTYyh*E;-CUBZ@(S21sW>w*In^7F$5N1X==q zivVgnWY@mCP6HHP+k+ilYwFE<#``f?oiz_jPgeHjN#6IyvSwy8Lh*F-B2CbX%~QwM zas#mR3~=G5;}o7VYULr(zady2RQx{e&xBmSM6N|fLEw0%T+07LjvEO;v59AHa^nK9 zby_<12^@z-yNKkcKkSu<8Nz?)swM#1*7w`-_Wt?$LjlKJmF9 z`~AQ8^I!gnFTDK9i@QmnYMGyk*_S90W{8NYUMTh#=d&vDG%-)R$2V`?xN+mg&6_uw z#bOe3tAdEks-mpQyd%)8I*G?!>i(og-&fvf0R8hXzxd$$_nzsyF2`=ZRr!A{060Jc zT%2G0&Hwn9mgxWZ9FEEVkFo__Ekv$4>~ZNKSRtKNrb#J^ofRyTst&bh$k=B)Y#8Sb zC1MeVmL5HFwNn`i%Q4&P%|h~GLM%U$h(xNMu}{$@jbia*HwU{Svu5IRZ}6j5m*XN= zWB<9R@T|BiVeycFA_tZ@ad4^Fas3esjhK3&S;|xK1YHT%M7cdkL+JhGt%|A=VbL9| zN;6UmTrJ6nz?w7Y)P-&3i+f5yd;UQBbn;M8syAo0PCF?g2rmj|R`m2t>Q984PG;kncO_zxtEAAfWom zbrV3LFL{{`f*SN^Fw4c`M`yR6BZ9}YDMD>XOsuS8MdH0aa}*`SX*$yWx(wiU>@b+S z1VSSdPYRy8#8wN?lWwooTQ^ohw9MCBQkgm3L?+nJRoV%+aG*PE;dCu8GHMtV&gd`_ z=3OmR_t#}iLtYUft_J&X6xZ9g$O7OHkAUb*0Fp@v+W^Xt|F{j}UwX1+T4xn_m@`-8 zlcO|+j}NeyIqz`4H;rV#TAuQGi$Isd*BS`hZJ*_WR8b6Y zw~?({0f4Tnhg0&Kw$X6E>c31nO!xg9#_K6x z*2kXws$*wTln6|ik$I!eZCi_%zi6spj!TD#%}8!3QnN=~%sS6AW_@(;ej;b7p+~1F zhSZHY+iMs}130gds!Szfy7%^5OmEzL?xxVBq{2kNJc}^%REyD^r6EAo-CUMd6crn#aWI5pH-7*0zbN_2D>7w$tQO+ZvzmoXBvLVvJvft%TStbHiCV+TI z&!g^>%^a|V{yQr}&jgeWYU8BDD@``tkVK{Tl{U&2IuIW{AF$qDvmO&fUEllD!CAdL zfKejm-1(BXOH2OoD!z^eP*0$%p+MfU5+rmCa3EvPeDT2GexM^XKzmKlP<@oXKs&Iz zKh->DUZ#@QJF}$hG=G9SlA;ip%O+fD?A&Qve3`#mbnV2C1`~CqetiFT?$^gs+us^@pG6C#%YoY%a7c%W+K@21Zz^&ugE<$MwHi!wb z6GltDX!YA4eSDA~PxbomFZLG~7l?4DF==f0+$A$5mR}4m3OcWl^J6}2Eu3k;p9l0` zrn66d@h5)a_x+xq`pF-A~;~qsTxnoE^L4vpI_X6@bK+-zW<#!-+A}$gS&U{ zpP!#k)9%HWUU=h;kA3`&*M8(jUVr_ySMEG_d$*fx>|tgQ3q(bERuEW4Rly2?PLRC6 z^y*o6HL7W6*~{ja}qynfxD5(Kp50FVdBxS}u4AMbA7 zqQDqf1fIsv4QR--JC^Y)l@MqEUl*9XH58#=DY&l+#=^40NyKF|9I~pu=?YPx`8-&$ zv8hxnZ3w+{LgxMN6eRSJo6jEcUtX1vJd5X5@B(V@p?^CWrfB_cS2K_fm2-X{bH?S4nzM;nJ6svdDD3;_yG{C~)&ly6v zQVBpqjYapx15&eA4!mInSbSw+BRZb2B>Y!y!18J|!n;77`kzM+QY9~_|7%my(>3>UZDTlDt`-K0MG#W zCtNWE0Tm*oW!F5qd;j)JF9?aw$}$m=k`gnkh=67#5h$=@Rfw<>O=Sr7ZnsHq6+5GGjOiWG2I+{*y*18^X|0xTN!4BSB0V!)_kaWuLD)c#N`BHcWi zc~HXT1+|CbWDgQ6R4{Q0I{N7Ds0&D>5ri%lK?M`7z8iz{5CWGki+i$(}`s=su z+-8~pg3>gR0<2MS<`5iN0YYM;Ci=IVN@SO>i@T9S`VyNvQoSP5I|%tQGf-(&r2$#@P~PO%7o20qDFJ zIa~SwM$Ud#n;e{aS3j{~HeOwPdK7s-4zVA7JUe^LryI9F|D~V&`Cs^*U-{A(-gxbm-87jp$1ZQyCb^px_a8j^ z#<#xn8^86Er8=4rRPar^f3FTD85E3dur+84k0xi9_17e4i= zkH7fBowKvaN~j1BWs9{mCz7f{=Xv{}`rLM3_lNLfRsL@U09zk_>X-it5&aLp^dHf2 zIsbUgY=-}=@k8jRjmDr$gV&?)7cxz@t#WpBnN3wvYDUE9Ji>FDCdP=|N_{o!Gup5j zMp!TA^=(O$`?pRoZVtVyAmB(;Lk-MJdtkR?=f+yr=Nhx-ZNw-FSFt)Ts!i;bKgf(L z!?7gD1F8L-F0L}IKs*IM_eXM(>*L%QNs?~+sMq!FDUQTKo{}FKK|BWtPlPE-xHslj zK7@@EA14FWasTdttg@jmF9fnI0O6-D2TcHz@CQc)Q!Z+FX{N_24_Q<(xyOR4hUb?;d_z|7i?LC91S~ zm+tpiYx8SzK}t4iHtTmn(9hIP-hfq zEBPwoU!H2?BswU+Px?iT9O`-s15qeeqNob!35)6jIA#YZWun~+#O~8v?o>LfushkA zTdS?1JLYuI#nKokt^@kU0^EJ`ohOeT2H@|_O{E971{6dYzyRp>OEa3LI(02LfBfj? z3(qry1PYyKf+|fDg%Q)cbQK2gPnJsw-c4eO`C@u`B2vgC2B;`IOdmgAQ|e(B2A?@f zHlku+F~Ys17;ZMxY!(GfIEaL66>!xHRL4?Vg98=vILq)N`IMj094OPda3<~eBb)PA zipvIpN-yQg{d&<>bI!iv7V=MlPW79Nits#ZYfbPrIlq|vpFGMUOv+Xyt!m<+HfwT$ zx_Fgz_q|!&6z1tb4U+VGE$YR@U&gy{zfJV|tvk2H>?9yzNv8!{mXmdjsULLM&rT-i z7eIx>axsG^Nn?oDPWV&ni|@-}Wo3-OV&Z2MUbm!|^ocrs96w!J_|LUYU|IItZ=Gw6 z_nc00f3U|9uRB^!Knm_LDs!Kq}xVCDkX0HCWn`}!cq zzB9(dx*E|HiIFx~g(08>1ZhLPvjo_LpMEp-MZsjpKr{hAc?#c112i?CHLn+z+6K$k zm>pL_2BDQDklW=Sy~A<1ZbCj2l&Dlo8wLSmtkv9FSWp|J(5KLKcuRANv|V2TE0aRq zDi?M}Dox4#gLH@0TpX0pBE^h%#O$>g*z!)9wI6^#O+B1z$!cV7DOpZe<0 z{oK!d>Bm3+%1bZYxN$@0y}NBo0lbMS-o5+aAN=ZX{=a|kSO3Y^zH$HEw{?Hf?)Clo z`TqR;;k|orfBW0NarUdf^7sCqFMR%|e&#D*{mCEu(a-$I3(r3%)0E+9uH6>mnRQ~8 zF#_nut=k=JCvy60@ZN*>?mU0zvaj4HKKbf3UMUCU|NDy-KHy*c%l`!t{f)o)OYK)a zCjURg7Octtc_CaV;&tDxbDUCDnI;aZ+HB2M`2}$JVGW}PG1KJ2P0Qm6JV#qVGrPJ) z+_GFmHVxoWRi1>YG~HJ5kn3YIkUtxJOuo;ASy>!>uR?o|q3UaU!i--gim__P?-MS4 zZJvb)?hD!xgIN)FAw1R&Q6a?+T-AL}rEr~UphZI1uL*{-bhPYr6cUgw0TT$!)W1aNq|*nX<* z?0@w6ZA>iJPXjDCfZa7f>+gTa&-=okY(f8*dxHuGup<0lxfHeyI|bKCkkm{7BF?IU zCJTAW!u76-wOn4jBJOWKsEkluM#2czvnxvKrt{vH((G> zsCQsA%xuu)q=mud<&ekab>WPc;;!SQPq;4CyKP!7Uo#GPtyO^B0RT?&n5pxoG%J_M zhzcuL!6qLiLphR{nOXy#&-zYFu=Q7ZY!Ru^ND7y=nm9=p(@ZM`x~f3k$N|KA zm`4z&`m$TZ2la>(B_gJK@4S8U_Ghhoi?Ul(XBLUFD^{4Gv#eV!6w7QPX4LannWxE` zI;9cGsQN8F6%txV+806jk&;Jcmsw+=Y3YQczU=qp%pY3R|E>r6Z-oA5?B3F{zzgXA za1}6hPjj8*t~bDC(V5oYy$YP3P6kjh2V8aJUAty@ly{^qp2N~_LH~m2?F$;fIn6~U zu*6YGy3nJwMqN(#=8^_zwIae5YNzNLG4K8qW`)pvur-T_SA=A`E&)QkV6fIu-zgV}sxoJOQ_E-G2P|(JBXUWfMS- zHz)Q1=)9L{M~gmy@vmxcruV{dO(gSn%chO`2>kz0d@Opuk23}UGvB&(^Uez|+_{oTLwt3Uq5&%X51^E;WK zb2PO0M;-v~-hcQjfB)D1kH7nWf9D%tyLj?&qlFUy=KYgL_n!RvuYC7gU;Fw${>I0z_C;G<0}FTgKs!J1@TQ-o5+J=&in50l*5}zmWeQ z0E<5Vul+kj^jrV!f4zqOm);-z8zqBxd9xI{k z7a{WGK&0N*xP>@lqN0N9T6N0ogbj7)BwU=53}CV*q>{e}r(K?GdV1hDe7J^&NI#&g+yctHOn5BviJ`mZ0vE?)+) zpsrA|%Q>3C_vcS0xy=j(1Yjssye-YXTpPyTFeC23nMKcF>t`sjJ7ecvM%U1X*};;QZ>D17^&OXXtV6 zs(SC8w*d$2QGcpw8Y4W67U=(g{kOc9{%DdfID?)%dUW%JJ3wT+J7%Lyld{He49r9T zcFfr^)y5`KC1JI|%VapDbQ@*XqYx`pEUi9;n|=)oFlXs{XR|Q%eOIyI)4wh637OV7 z_zbp@%&Ke!?1%$h9tL8qvr9Yu5-nV)FCR9C69#`t6oQSLSV@vIia~1v)p%@V=9I7M z2uQKz{A4q><5qLI+GcfBE}bQY|LfeDB)UtY4b)||;Ea-^=5A~IOrZS;s)LJH6>op@ z8?S%%vr3qVM2IKm6!k0eC>K*2_GslTzk0M|EHhghGfdIB z;@ZW;gE>;mn(D2j5GSLmb-7zA9jZ`=n~nwmcW+FgL(&G7%y1It&`8!J5IuTuk4gy* zRx|yvIBOjU{~4nHFBt&zl%9Z;|DSfMzlsT9I$MDz_xp=!+AWs|o%eQ*mW~*hWtxni zW@cdKX+o25RV4{?vwrgtBITox_n8BrlSTRsq+O@yC$!{Pyil&|E+)Ue|`V0-~P^9Z~y%7{rR8$?596* z^X3_$%^(cMgh>vi8A{^8AKb@-_a1Nk(`o_0CLd7b|7SPP4$uH!|L^{r1CMhk{D*l! z{}-45FJ9p+Be5_&rpYu>vu9nZx(UNFchsPHP(_igY0P?kix^H@!!Jwgh;)E8j(W4m zWaly#R?w7+ATKbp{8D&EW*Xq*)F5@762v3d;68Sldw+9rM$Aa45lnq==O_@fz^ez+ z+g(o)T=vD__65;4T;}jd3JQ&b(EvU+h0wNmS6eqsTPU<_qDuK0Yf&Hq30q7MO;pUd zb(#eZZNn#SFDd+IA{1*yZ5}Q^i;JuzYY)fb6M%$g&}Kb4KRx6-ngEV`!TW9kIAvma zCLBPyS9X^>Qv5K6{A^tx*Y++n(tk+#8TrZM96(_J0vp7|<43z2H+>b6W+Vl{@+O%X z+zYc~$u4AF=_l>*)6t*2;-)E4XFObFOrQl_)}6pxdP%$8%3)bU=noJ}{Ce%sFIhxG zdFHFWe8>91W6A+@cd}<<@)89Lg%IXeva+3GoK^#7rZwTewGJ2|!?g-n7SKPfz#r6k zEO^NT97OexA>&L>$d>YaXx1Z965#GQ(1Pwd`3LWK;@3~l)*AgBCNBzdP0py z5zAyw2)H>*1LZ-8$lR$wMfK0jQC{K%16psZCG^*xkov-P7O1kVp$xUr-8r~Ds8&&j z3@5?st~;YUDvQw}IYK$-VKofYTWwWQaVZlP1=bJi2ZN{m*wrguc??hg2XOx0L-HQa zW$yw;TV3G+f>vt;Mj8X$w`^&j8D<*P(D|cBx9&XGD10Rr7#10E-E2>uUF;vok98wM zE%iC=(lrE~y>}Z^ExGNNxb4+_Xl&0$oY)Q5DreU4`lG`Ct(y9k@9l;E)c@R-7Mw-s z|G>WY;dmqT-!bKjXrP0j{{bv!Ws~Z5j-`uWsmod?1IkHbn-AC+;ZHjLjHU!yVC|*S zz)x&JefKl~sYCAwSf7>Ijz`j3uXti^Mex2rvk=Ht!GI;7WG$i zi5+M)C#?bi5##|SkKDGR6jgLU|3d1&*ibJK{eLV3^)L-U$H;);tTCYfS1X_exxen00)4GSUa3iOw2cKz3|D;fBq|9 z{nAf<`HMgLnNPg%;+>s{s#sJ#*MRVW)I#Azzz!|4QzT?IF&bvS%d{^Xg@RrI*Ss1GHO0RFoKpOrXaL#A1m^ z(2}z3AX*guZ5hvw0rHd~J7h#$XN(Dj0SSw?orNQxqSM~hB%D&ZwRQg+{~EbaJF*lufQVpk>H3ppcUM|1afRZLlyNaN7`srh%k}%3NR}$S+Xus zVMH&3UtiS(aJUBGayQvEnE*bp%|4#d?t?AY#rysf-zU)j@cgh*3a}syXvqN#tpH|4 z+CO{}aG!vUZXZj@?oP)-Q*p5CN?Krl^osRTAAY!zaCyO+?>i9hYz+hrrZ^ zC-0`ulFNu}Nb5jKVQZ>@gZu(Spf=;W9J4Iw`H69v(7nu72K%X|=r|tLRFyc?!eTlpZKb=HN@b-OK<*pdK)!Z3jsOt|L z4FLtCuNA>OY_u^vMcPN+Toejz^mj|`wH{-dhvwdB^II&x1@W&09Cc5IyAuY}RxNPr zBkG=uw(Y8yFqE(ackrpk?{8lm(Ffk<1i!3NLV@@wL}rQfh|7P=+cCbe@F-0ugaNxmf-w$rM?r zfMkTV-?HLim{SwOG@WMz0aY5ZIXZIuMVHBtFG5bdReZn{t^z^{r~}+H3t|@GvfO%=yoMt+jXU>h9BB+ikmQ*WT;;uQ|v3u2Z*fcU72j0Nw$> z7}gCbpIm`ln`*~*dG`lz-T&MhKsbmB^-CFr(B~=;CW$>wXkNX0 zwr#&Sw~NV^R1(~T7k>^#vYI8!_TerVo~=1CQn zArt{~MgtY(SM92VCE(O)01BMNdwWCoj`b{)L#sT=6RAYfMkXgj+%Hz=>GGV}o!@>c zQ=@?To*9^`t}JKMh5ZO+`#rn40n_m^l50a1l-h?y0)X& zl>zkmfchGb&zYo?rN@D+o}DcZ4n;`p3r$O@3km@UM!_#aMeF&IkS6#EgyuAB`9p1l zIZ>p@rSkd5JAqS8xdHK$<5MaCNqd4WltfCI&X&`b^|8h{BotpsDyTH_Fc`81LP%o# zEovpB`A3K{~TbEfGg9)`2FPMxj+AieMhjT74Z3 zE!DULy=(r!$c%vFI0{?U@A=tTyeJ+HQQk>Tub4;~12g(BvVp7>$)+hz%%yctTDZSO zSPUcq%X-}`nbg%|bwpF?OH!|&Zm0@GWR_tdX0~9T0u>2h zu2QizDz0-!kqSn}k<$nWrLHOEK1mAaK^H_wH}bsf4D}dg?JYafGF_JJKTpq~^p;RE{faqU~##<)w152RZ!xPO&519>&V3fwPiD}(dSO))(L zlwG6@rCtU~mq0G@W4kBL$yMmCcRixJebs*yfzy}G>63nZc=qJ<%HQLG@S+emSW)lDaU_$`BUcUd%;pb?)aljvpj6{|spP5xHBzci z-R(Jv{;#b7(j4U{wZNH)$ekFN5PWR7hY}f5L7Omf49r*oN&$dF`thAImqGr1bQ5Pq zWFqI96Zq({Hc$nX#xTT+${E%`#3N_Z1D51y9Sv!O(Qbh?!-U;_AR_SITebYZkPK=4 zk-2_CnG_sN|7x!TOXgyLM;TB?W<)|}HfyLYbqtb2*+vnClLn;*gS4^Gc5j^pU5$`O zp#ih5R@#G_*V1~Qw4&jNma|kWs21_><1eB_^pIfn2Kk32>X`Ho_JH%m<2Z1U)w3`b zDNRTbwZ0*Q)^Tl@CIFG*$IVuf#N6gBjgwx*zz~k2O26;&S_uKLRY^OsA)tkp05Gmc z8=yx9F{c}>O=863I&VyAuW4;SJ@sU>VfMAIh4MHeP z042W5D~hGAp7U>2>RbUJ@V7OkiPIcTfqt7YGj#!gukh0-|E8#> z`s>syFsb&1i4Cp-{bwnG;#vUgK>yQ}|Ec7^3!Iw6J(l#c#Io_#2nCL#pgZ`()00{^%d96-MTURuIcknni>Z?+c zMInONjpc@_=nz0DAN<0!vpD5OC?jLq!89Y&GU}qF0IOX6+AmRW-2#R3K#`UMNC{5* z)VOi)CDO!v@pUb^ROCV4&dY_t>9Eeq+Oz)g=?CxC8!l`||96Z2@BHM2@@p>c3D_Y2 z*RKni003GJz(|6|1h804A6{?(`STR)0;^I0uug18udIpOzcA}zm8$yE0`Mct79hf6 z7!D8i@7}rf#_O*QiKAP|ZWUoNOkDu- zcy3xI76A*3MRuV=R)BdtHa7E_(}z|pAG)p44hd>dFB!q*l`43k%e>G_7`RX{InSp% za3Urbf41I=B=@={AFQ9@Q)*t-g`JnQcxf;{d&{MmMOkdZKr%yTJ+|A~m=xPu_j!$yjg z+rTv-8oO^vksz*mNKlbeSSHVRW(C_;#!hdL6f@`k22I9M!KhUWHZesKxA^r*dpY#C3q)`CsD&Q$)zA?bG-M{A8 z>x;m0*d8jH_^CPkKL1rJF~n3BAyZ{Z=QP!OFqzFxdu(;w$y_F8g?oG-#jK!;d$aZc zSMHrc43K~@NEOak*%k_O?=)%bgG9ib$HVGHLULk6iuEn_O-##?GvY{;YQm8SfTe7k z6Te?GNSPT9gNctyzx=9W9*dJz5umlYN?<5%Ht@$vDT~d~!L-L=y0{Ej<_O}`Og@$= z-wwT;pPkVEUi8200Nn3-UfSph_^FNP|0PTS)32@xU|g?<}0suqbXN|PjJGpuH)z7{D=9fSJr7ynm=;6JaH?JKW><{ii5n&l^ z4HRY#Vay7s4?cVXh>PX^cz!Ce=cF-?9q$?tOI&06K{OME*YqH*J>x8<%ZWr1y-CC|b~OZG!h#X2qLhEpPy0$n=I z;353a0~d!fRD8gW%1EP{d}rH|E*71>f;vHN&gKR zzL^7nj_?;y;QZOy!NCC#GBXauY+|WUz6XFu3h9dF zY+G{DHuu*09a2dd^I%x2*BX@8c2MUYqr*+upRE-ct^We5>!GL z>;WiAF(0Zxh_W?ED$0~BS^OQ9QD7zlsA&MklGUE^{pxd4pYQdwSBLpD{lm~r1ez=t zI4L^D94q80KFJ5rasVP&{TjAU3tJ(5sxtOZruPDC(<7tNUKOt6qedm-mnyZ|&>?ov z`@Of`uAI-c%BlYL)=hUF{V$VJP5QIoK*gU3#lxt9Y3PzsT@4K3CI{BbBm{^^MEb;v zu}LJ`C$hd*fPlEooNDs-o0--pXVG;DZ8UUYM=__c^GF29-Y}`H=^RS`>N;cpMJ`Ma zm@l<7)MXEgwSh%BMv(9XLJcn(d8}HU2xZM?851sb z$*ljwGqMla2>Q>jPlW`K*fXGt2`UQWXQ!t}C&%82>TeE9A?YlnL=3C+(q_#UEy2&q zFz{G7??7m+%%SJon+V?X4p=gV+x=xGNx$j@p6*IBWB|Zi=FikC&}q4^5`LAT(Vy+xd9TcZdMnwNLjj?hyDj2;Qt4+Q6TD2YWjhKW;CH5S6mLJkgT$?BWX;4 zk`QkDi75S~zAFTU#p_53#*q?F!11dQ(Ou^Q7Unt|q4E`$wFA-}hKhuxH0CgtFrwma z@QudCcnR`Bs|@Ve&uK?v7Ct{a&0B4cS>J;G_x4%YMap)08sNF$!K*g`%sm+%$6;7Z zDt|raM>}7G8cGMCV0v&s1m%76(|(Emf1S(*gw8;@6|_Ndh-i!zWKQ~UVnJ|=8dD{ zgT2Kff>Sm6C-6cV2C-mIAS4DxK_pr@<0X?blP=9hW5orXKO%_3K#RS_YPBBM<2yh2 z!Q;p8uh-)xnXQYM0GMU5TKyujH19&k_7gZdO{;vggl*AVvUyuXrDfJY~eYapK;@~EA=uT`~i8NTCDL3BMsfTX0G7NgJ6J=o>~ zVaoyZ3?>UcmTz-dR2M)zQeaN)?pOc@<44sK%$wD`rq%$Nf!us#TCM{cUV zA~Pfb$4luS5UzI*Hqna4VB5nGNhYw=0IHXT-lqGkw64li3(VpK(TA-a1_e)AXiF~; z;K)4aD}kgHy}Ak;(pGYT97huX(qJEd*#HK@^;!sE)V*m8ypB^vCWtVPp5-*%gtIzh zo&&&*EI?(St+!siUQa*#@Zk8!`^vOuf}(yNEI`!nEJDe>1xJ{{T+$GMz$}HhQ-8(= z^m&SX*V=#Bg#KpHS4ssoNP}7hJqmDS1T(N|OrS1`4|*N+ z>4e+M^o zn*f?JfLRm3VgZvrfb@xQLN~4^J$%`~FNF;71z(Y%k}ZKRrT?E24nTLHVHl1M4<6jV z!_1m+{s)WU-5-2^b@l{k6viA;*87x5_uLgVUmaD6`rh(S0^|&6H8HosC&_JSr++t~)`apE;+VOg|4l(jL@;Hv;$cx1Q zJJi*kJ~^9yvs(brUEVt={6*yd=_wDt{&)odfBx1CmoOjxb7A@aN5uE?hn;c9V(&l8}oqpnr-@q$sF_qd~z6GFi$SQh%(pq9E*LSnU4! zT#4pQE*pxyjsw65LXc_~@@mtC+T+}WbS-_@%8bV02WucPkz=w|4Tga2G-wD2t56rP9H!L-RrWjIy>DvIuu3*ARN5=gd&+t zn(-o(PPuwF0=}ize^&`1Sm(D$PB55$K&1&w!JrXR+E2hkAuC`=7(FKZ3|sAgpdRHs z=BdXR2xx&AFoz^49-4!OP1T+J07Rx)3!oob^dGy3e>eapiN>7<;1F7+0q)1`KtI3?PBQnSxb1T@@d03gQj>$eVFFa1S4=0;>C>unfpCJzr`F*b`j@O7 zl%^7(`YnN!2GEsmR-040DXeZe#{mK40syG*v3$myLR6h{Z3_Z459b6_atKH!C66(O zy^yN*VqNPP-Q;NaJ0wSYdA_y>w1W5p>{Q&;h#!-6BQe6%JrqQXmb$+vS zuoNR!PCMtPPg7$g41U2`9e~3;NTiJswGv0=MGg2_>>Y)H^W76S;t~b^mXyUWHTn-Z zC9lo0E8sh%NS~5Tw`=_`LN64k)C^1lh5G1!%^A!I|2xn>&TMfVHoXGyahEL&cRQBU z!H5+f0KGT7OT2HO1PXEtIJd207lq9uqco*d(t_J&tP~_{Wa7X7%(RTP0Z=>G( zNuIToxeTMeyUS{aLCu-62&=`^xuD<20fkchT989B(1J$r{KJMB`J?9`a_SYJfV1sFAKArKRe6xzVslUS@a(| zWB^Qye|L-je@+_Ur~d7~z6Dfk4zzpA`B|bh0W6mN^KWAUD8xW|8a$3P44D`}tmKwc zQ;7QcEKktU7Q!?a;!6_X6ZLh8w*wJ{2p5at`1tUZhxdqRZ@D-)Jox>CgSWr?-Log} z0j!x-q9!w+pO%V_jSjKIO(D`^|M>cyyN}*@?F(OgNB-@J40&NqLXWMq9j>-D%^t%rdS!D>t|0{m4OBNyJ z832kP%%w+?2SYnFD&bV&SoK*oFNRpH-Wr}Mp^2V#|oSJmQTKB1Lf z;wn)HDF=Ke6e7ylbbV)GQfXMN8UkS_I>3sD`~*QbAOJ+iF^ultL<3OZEMz5+J7pTw zAjRfH{%MDAi*D==_g_%dzj;K)U6uu$15Ij*%6C6V%{fiTOBD^2uD~e`Fzq>nHk~DX z(>|cm0QVI*(teT(JuxjFXgPoqx87`!C@6@Tflt&$gc&3o5!D<3gy<1cGO~*p5Jr~4 zf!)&oBPonV0>&?&X^}S94?GJ&topaSs3t`e0YVvzim{XeOc9YODl#(z?1KJtO0+C+ za5^;P{3KP6s+(0rO23(=P+K4-iOsu~cM-5SOz#_j%{M9_K*>Y`B>_aTl-UCu%j?S% zG}H9{!Vw4w0OIA$pgbjefJV8A`r}1TtWx-^CVL7<9)^9oWliS{(IQ4-M`Uj>;Gp!g zYg=*@RkA_md58#j6u-KHS}>F^7wECmgTe-pu}g;vU%XMEQ59BgUdx)y?zr}H_d!r! zB19GuKCY1#RQk0fcLL`I9aAD(YDD1;s@)TP?~&Xag!Q7IG5P`+cr(3Z5q*mIuaNy+ zVt?ws`mD-_xy1io?9XHqYiVYrnBK+LVQ_{u?%Og1@O4XEBIS8??I+^W+0BZ%X8Ua?%PHPaqYXg`;|92_= zmHE@)mAV0ps^{&etQThj0Eoj**9Tyx-*C%`%Ql5a!2wk#3lwu}VnCtr|1T{7pBCBx zL5OI%SezUm(L>zZTb>*rUB7k((`0m@|`Ps}Llrpg9^LPA7xy_}zFi8T32a5UOcf9vr2jqBHsk?^_wEhxYsYCKi%mrY$s9^GgT z01&TVKlu|s@zwwPH-D4I5B0-4uE%H3Rsz7hTnuE%y#ShKZ7UeaghvS0xWQ!H&jnE%=d{ft^^$+)EJ;?ti#%g z9$1>V<~G%mQ9#{fPFh=rVr5tnPuf6P{^ zq~*6>-#WVhH#h*G1~{5B!w&S1ZDP+1c!50{pk@fRA^zB#Ja<<+?ueCab^u84N3q)6 zOWAX1X0ZC#l4+Gu%PtMjgzaD*2UL}8Bh-}uZ74$%2h=In=q>zGCHQqYg9_t_r(j|U zcb=5=e}7@5=~hH=D>^U>01f~nrutQG^M42%)mmi#==f#vFJmbJ1_I8Bj+#WQha1-g zy!X}*W7#O0__AVbaRD^64D5jZ%j6P62&o0d?I0BcNm}So3yqDpt5!q{XDG5~L#f!i zCBxwXt10bds zno1j$-)|~A&y`)_Y$#R603f4v+ZJ!QaPGGd%|61iql4tPxysiT7LUINVHRc{+1{>D zAVV=U$POGpv)*i~xr)!FU|Y`v_69yXJv}@=wpLUoT{B{}C&q#VpbZWn zEOkr z<~x;V4w?v{v>zhE-0s<6{<~D*Txh53|47YhZzaK@lkwQyNjlp9Ns4Q-lqWiUI{ZoT zI!@Z)>N0@BE&DEpgzRL5JD-%T6NCP>5+Lk!qV_b%LFt05c6GC-C5p=$$OTZ8BuH7B z9_AzVK*D;XHM-jGYxaB5R5g{}dLdwH4-R3WX$&d9k`%rzY^+`xyaO(a4q0BlpLO#nRdu%PA%$jAzY8bhFs(hOwa(GbXt zh6#oXSZ6ncA)oG^KTP1|*C&Pouz2*vVmLlJ9ERawfA8ev=*ErfzjyP-xBlRp@BH8g z=cga=dOdQ0*`3Ww=Ti+l!C^5h_xF!ZuHCqK_x_z%UVZTJ;k}0s?%um|^V-Sr;lbWO zM8jb5vV_b`G-%sX-vFkoh|#o&1A*|t{@yFE++QA?JbUsk#;#Qd#F5X;LE;4Awy8z1ny6DhbJ5$_(bh8` z>o08}*a&;ScoP85YHD_4D0=tzB256BZu3PV-iymD#-CN(AK)rlg*%4-R(aKM0MPaU z6l;0a-75efXCJl45_DdW1ve7}B+XD}b~I_>L7oLNw-hbZLln zjdk#6&H866R|S*T4f`QxAwV2Zgc)d187o#FReK!dUCit* zM;~g*!XnFvz%FJ{>>w3X$YVyI>{iAbP$DyDVy5D0Er*gW`UNHNY546N{T z4m6gOHDcaUtzd6sts&9D&@^e|43e7ay7e6AYpK{d)W>6cMZ~!Tzl#A;2zg{9Y?}_z znTovGK7b(K1rWDPh@l)ZC6K=cr|*Awczj$^of%ZRKJCTQ?pW6`Tk|+^uqcHlAd;3Y^3^7(c2XnfR(pkJ^~1!O1EnQeDWSzqyH0U zK>o>YSfo(ml8!(1=}Ug z7)lBD3=JS9>_&+%5|AkP4QamyeyMJg()a5v)$g7ZCS@*f2TNN+fCRz{?L*}J=Ab{7 zc%dD#tC&6~XrZL_ReL9^34z0z@7o*OcI`oUwHG2*t*~_=)*F*_sOv-x#7jE3lLFK9h#-Ww#*N&!Q|q5}&UH6VmmJ_hU<4!z_6J`D_j`9KH(@bCZ!qW%57 zlar&{w{P6Lcjpg&|C`_c?)RU(_wM=GQyy2$V*xlcONxeJST2@(%l-ZR!=t0)qw6=X z-@0}4?%mt>?%le3=hn>|*N%@5_xG23izN*aK;@G)GY%vr@z(3~gtdBc<=c7&1X;EwFQdPN`O#8debC;+5;m10^`W5)mm7P=>CKIH*Z`UilO$B41hXz zS!CqVJI+}|NDy(MYjf?FFO$G45AXe%Kl}6F`n}&h``{hBsZoSQy8&X~kQ8;=yp@Z+ zqg!`wzxwKfuYTo=9bjtG8{9qDT$TL4p#gsR!O4b8a5|w}LjK=s^so{7r?6-h%%_2> zb*!f4)D-<#!$;Wl-ImB{fry=u+RTd}Vy$VV>sETZNf_=-Q->MjZuf3KDMd4Knyv_t zA=a-1L&~jplIwcFw_BPan zq{`$oSnyEi7~E?fIcv7=Bqx+Xgi>!Y1@xq<^0(mN8T;_N77q?G4ge>>xXJ%ff>!mj z7E(#^)IRqDMo^{b??C(=^gsCqrkOugiEy+*0l3LDFr$c^JAYk{2H3Dh zG0JXGvxe;a3Pk%yN6(%`k;+};9Q}n;A8!cXs{m}m{WB|+v|6#*T zVcSD6MgN-;0+@sjLDg3`)9yPP@jvgM!{;Hz@j_c>z_hsO=B3@w1*QXH&GyxMW~RGC zbkWZCSU5C4tAtY;Fc@9Ut(5!olvh)z0#hG1V~#r$+>oVQo% zp@5JeqYwbIK3Kvy;n|54OHihNC+}Rg*LrD3V*VpG4)VUvb-%lh7S1aap^O`Ejj#2t z-cGi*#+sG0KF9q#!~a`;K_&px*p`=2bQYk}u@h2C^(&{HltqXUs2p2-OO<+Ud-?S# z;sAgM5r_SK90uB3E>Dh+?%cll>Z|v^^{wxI|NC#f`}p0{Cr{6xo%1*f2+^?ITkanm z933B>Tsygb{p8xUlarI98#hjFoSd9oJGypqbaZ&ITrP>US4i^%8@>(EHTjlXi-8pm z`7<=Yzz9GX&e8q-<%9dTkFQ^Q=erXRvsCn-+OY`HVp3RGgjrVS>-B0SB6|nNk6wFt za&mlm2S6e$Q2<7k+;d(IKlX7k}#Ke&YAO@r(b{-}+m^>oRA`_TvcB;`+T; zzVPKY|M)-iV{d-xjn`g%aO1|wKz%{|RQ^9L0BF9Z^8aoDKqLRpU;q7gKKP5TUW47_ z|IPApA^HD6I5Xfx?0gB0DYdr=+czPqy0End0I6v4rp#~JTzv~C@;l*lx>sKy5HNEh zP+c)l(hVyoi-1fe5@PZ%jJh~K>7~}RgiliLkW&r-kdxRy>jJBTayi%6qr1Is1<)(a zGU#Q$4Um9Nkd!c`lFm_%mQdHtqYr;2MzWmKXC0|9fidi*sF>@I)C6#G{B^e<=$il# zHYxJA3idx~CV<73L&;0r|B7(`tK?robfZrPl5_H;`;z7KEDoXXshzn9EN+ z_qFaqbifn5_Qz{yz+f=VDGWph5i^Pr!NigqeJkj{#|n_U8ZbDFDya~lN`!`K#D7i$ zn!_pDy5M>2qXYWm$Cf?Xf*C$cBr*V@3bg4-8X-p;%yb2}G(eM&HzP~j&<~t+g%a~m zCKVDoqm9x92!JR_Lhj#G78z8wfLa`p!H_B4Z)S(^Df(ZHWPM(sqvA#Y=5ZJnb&hH_ELF+o?ptaX zG)#R-h)hH*?4N2+U3I1BD2yp<)*Ni6U&tJQ zE2b1oKmZ{itx`t;))O_?CufZIK( z_AAWNApX1f0I~_7;Q%(905S(KX97?#u4r}~ClVSAMi~VM5~O;{SQBUdj9O3nQ5T? zy}hHugX80)las^4ql1IJ{lkO({e!*banQ?+#K5Fgd1BVyqLIU> z7B6|1Ix90FiV(1nRTdG^gL`*w-MRHgQ8C`;rF!ux4M=D_gmsVeYPCLpwi?$A0C!$_ z^u;f{ess96F*}#XPDCrkSfPJ*`M_ZIV)fp`G(%u#z=`o z&jr3EfhRC+jP7*9f5cQons9-X743SDf?83H5(%y{iC+jIYkf#MSo8FY=izU2>QP=4gh8< z0sP3vn!$}c*unuSPz}GSX5ynn*{$7{@266bVJYBLKJbeO=A2e3U@R9dQvh@bmJ+Y# zg@l65Q*zBBP_fK52|tzh-=R1AcPfY*`I=RMBxLQvB;?_WKrzUd+lT1vC6uZ7aZslh z+R+s4Cmm0%djc{a0O>9u<7OS`ALkVM6`tQqJm>)X-T31Pqxa6_K)TEIq+VD91PlLFax+zVVK7_fKqa~R41YBXyNjbrCD(<~9M# z)gU!?jK1n>ur|jE&&;|e0>S9PM@CBsWGN5l)LRxJ97m4eH54S49HV447ABgs_6n^B zNFRpgB?^g4XG)ut*W_xR&Ob@xke$*_%@T$wFjJv?X7@&9>_-SlM5;4mC9`hPMZpFs zYUBRP#*HQ1$9}D!>|dk*i1Vra1Pv+P^zmY@v8ndW=GIb=Mw|bWDFMU@mw-?g!ENTe zVN=de_fUJe-S9MXSb!~q zx)-p+WX!^1FNO3904{<4Pon?3XPk?D0Av#l@UwsISNxSAi0qyGuy^nQEcTXj<(yp; z001yE)!v46yTCLV1a(MmD&wlM^9zA-nx3?ss%by#48B=@HxE?jH-(69v zM=9c@xzGC>uRZve|MH(dJUIA=|NH;-{@dT>ah3mhSRNc+yLs#0y?giXK74rZ==gBC zTwXglzH{g1{d>1>-MoHubTAB5Kvw%)i-7RREIefbbV!R}ivuB0Q{BM8v zt%d`Dk3#+rsSZnIWEuvk{rBpvR^HmCTB2CPg^N#>JagYC*rZxQkF)jg+~xt)GfI|0 z6d@VbX+$wln9tDFSB0;2Yj0ERQ#1(92IwEi=XQnuDRpRIR(h3M;1b|d9!(tPZNvz} zBvge?TF{3LK!izjXEnurQrRPex_fA@a~6^QcJ!Gr0nDr>&uapR)9po= zg;#VxqUCv+969|8=BVp3_(l&~UV@M+n$`|yX--a2{#8a$Ij3f@Bb))4kj)nTXG9X$ z|9jbymIP?KV^at`$uXc-!`NgQZ-o9U72UXH#iJ~MX{z%Dv<&u;{eP|j9McGM9qAuChHgq zf$e4S!EsbmFk3=3^Tu@(A4-y`-2)tSqz0@X$mA0+APN8Mu()J6rBj# zy%$PAa=fE$6_yGGl_7vfVRu*u4_XSFI1fF^3iuaL@y zV!bk8+!BK+=Ip#dI`30qfaWLVMxmYekgUOnT7$2t6HvGIIf&mw|DlWi*ZBLS1E4|t zCk+9e*dGW(z%(CkQbK@jyTBCszlh!+d)v}h5dX^Da-FQ={@f_}B;DDarva-0mJ7B{ zxbm768Xybw{DW3{r^--P z4^)0JC7KUvbS0EEg)MMLnnC`;B4;1IKQ-0KWZZgQ^nZqEza$L+ZQGf?JE1IY5dW<{ zfJ>VIR_EulCIDu8TL-i*Q6#Fp)jG|26oZ;9yg;L%W6^=Wk}+!?of?z0H$tdZKiC-`0R#t3@;InF z^DG3NXwbr2OTQFAgvDaDXnMr|@P^J>MS7G~voIjXfcz<0wi zeDQOS{-wY4=kDCS_4VKR#&^HJ*^(d~P89=-PJ=RWu7m52B4-n*%#1xPdy zEf#|n1=l%xPQdyX^EmPxI(g;t|Iq$7U%>%P<^OZpVpk#m*X406tTus+<-D%^H zi7T@x#-&Ix%cL!__fR^yq_Q1J!8$q+&}3E;*OdYz=3UJ6QhItI(#~EWDB(O9=Dg~< zA^;#O`_e94FW3|zB&rTLDhkuhJL%&s=2Y_J8R9T8&vd~DH7=>ziBmmaPz zh?+fEDH)*+@~*=`YTXG=j^ecm0HL`aYZJg_+IX)3=)W2hz{MWNkD>`+AumDyj~4o$ zehjkma1#fR24$Q%AI48HkIW+xq5!iDgRUsPupow76mm&wT1jI|;I!(LWc3=NT3sTbEos~w?~JSig-0T+!@`Hq?$$*5PRZ(dlPIlmkkStv6Va^>qX4D= z4V1+DzGzaan~$6y$^!r9ulAiBbTG{?hN@#7XCiuP=s(i~IDrys#2>fe{uc=xo%AN+ zM$BTz&jI$3jA?HVq+Vc15q=GLQ83kp36P3vtHt<5CtSq=r2^hm3+#d2r4pb6^j9ST zO%HH*aV_)5#D=+Ov3wvsYCm-r`t@Hw056;?K?3M5fuuaAJXJ-KA_8()2$C2a+syPd zIdO<6Yfv5ud2M26eYr;AOJf4l^;qUFEt$Du_fJl|bIG*~L_7*D%B6xSZ$U)dxDhI9 z)aPsKi-<>u>9B}~;A1U&sn$J7uv^tPg-IwHm{CayEc%jy2USHFlzVu=U=i&YaQIKK zm4H^SV)R`wD}vvi1eB6c$S(40#5&pY%~Isv*uzY9F#=804X3Wr5<;ai){(2D761aV zjCG!rswvCWILk01%*6xsLjUD*fD0!6O_*^gk}0-U4vcq9N(7%@lUg$Yn8}+QbgJNh z5-X(2(!v$w(`ka&r6PqxgE)cvlXal#=7l;G2>K~@lkZe9Tayle&6U69hs!s6w_ij5 z{X+XLSU-EA;D*Tm3tkbO-@?oMe&<<8%U=Z@m394CGG^io2{~)Agh5C}iPtm$mTgcq z?XjiVhEu=dJ~&2iuLv@VegJefRMM3d^w)e!1Of1XAP@n@0{zFxsLzkYZVMqDw9r#8 z(uO6#8tH?U#1>5k_8bU`55VYNizTToSxTv3Z|UKd!_LV+k&3D0oQI@E z98;MsM8wK|Q{{^3%Gu3OmWjcvRH&p-z;19qG~oV4(f@7R_l4Kc^lN|W-}@WUTc%Iv z(mnt+0d&g%Hkbe)?So1ZSo)|KAwifzowUJTNhPV>rp2bi7L*>Km@f6|QW2?=ncEjc zUUC4RLK*--P<12H@Pb9DF~lq$!yXC<68S9%y2^)&v_-`cI8%1-H|b}18c-N%02w9J zfwyj4{|mqLr>|c>{yV?6|IOe2E#y(M-b!Q~M>*$lP3lEpW>x3|;K8*!KmGGR`?atA z^!(l7tw+duac zAAWfH?ED-74)*u2T|2&Z?db5}V7Xinq1!aEkMM=Eg@t+4mqN3N!taaN88pr(Zlq}e zK<^IwO5v>i?{WZ8%l{{w#MPw#x1g$;rPv{pEJ(-l>WKGE=G(~Wyy2BbB4Ht#GT+Jh-|V6~`g zLIV`6UO%b6%aoVMEt~CGDT0ZBP@REn)4M=%c8YWqD46rTyMh>LfvGDn0c?c8cQpZA zXqUVK6ToJ$_(#YDu=vP!zfV2xzdQ6_U0{>+fmsd!D%F2AVPfqP5JAMV4?Z}$aRZPD zwWU%@O-TD7u$DdgP?E4M&JnPZ!PfE+895(-<5Y@dTcUM9dQH0T4J2h5O~N$K>(_@h z5VFIjR=P+yl>q{gN&WS7se?N~!g!;e%@_~}gfzep7x)Vzned<7YGBn%9t4D)v>)XI zBEevz@E;ow*JMR*x&RvJzZMf>E&1=U2#DK&kL|jQZI}h*e&3FiNqD*xyv+F5=9fe_AZW z!j2(xb|eudY(1Z>=>+Vp$?;No5MhvZ7B0jn6#l|kP>4{cTm&J+kzM<*h=aH)E~K4W z_IObQOeX(#hs#F*>NtyZ)d(OBrU0=#92pi$^VzJgXevfiIYPEwnFiF~D1WsG2fM8F zxwA-?05BI+x`gvs1B$JgQ5p=E8EtU@dQ+aiU%w7jx>{cQ1*bkxEHOm-1JUuGhY1N; zrSu|h%+Wv~9z#T?Xaq_VSx^_6UO`wy_}ZDEK$_Skqjds2O7Jd0t_nH+<$KaNt`RX^ zPFAUyDZ=H^@#@Kkon=KtHZF3Kldc3(lOxQXCA(O$h>%pNbn#kJ>2S6xX~+dWh$;91 zs~EI0kt-cu%)=e9yE$}v#dYM`xjr?}e@HO>R`ee?q5oBXFH92up#$i5L;uSIn7R;P zQlB&7yrD1l#|ylXm)a9A)7^QQofkoBu^86kiD?F!gkwzt!Y+!BSRV{EYId^>T1iRw zF9btXM{nnBkCsC~Aps3(5NrF;3(@^&Xi@p9QDYbH4_XhRidT)>DRMlm3Sddm)RG^I zq30AiV^|5_5-p0p7juce1W9|ep%4hBa7$BzWMg7obAzdCuv)Ugo`}t^b|cg~5vSIh zie)!dIXLJKPN`@F$J6)Ui}z4^w<&#u?PBP^?0`#Ong;mO|Neh6j$=mlFXscuCV=K^ zs|jGaw-^6}NQLc2BWxI8@DP7&2{jSBM&nXJ5g`&`1|$(65&OW22wDVObhdV>>X#hA zr-=rrmw&8|N>Y-bq<6lu?O8no0~QT6RY#(&0q}7|@M)a{$6~ZXxOMaT&;Q&{j%)sV zi{agO9zT8m{bx@rHc%%<)zZ2m z<2b4Tz++Wi=0PR#skyo5k^j$W|KscN+wc7sZ@>3%eeKKn&42Oof1ZN_a_&^3ugwYV zfDL8|6XyF!AB0fCM83V9wwV3&iZw9xtMC&c9x4MKuw*AROVoVICggGh zg|<6FzPkyaUjqPFX9C#tATMtMn4gB`SoH6fKM#w|FJ>;uo?Hi00&Uf0jA0V zXAJcKwH6j279J%1n;&tK;GUYBwVX8(K#XF;RAe3>3M$95yo^>TsVN67MZ^PBFpnbD z;{nYs_odmQG<7*M5d_hog)Rn+RHVIo#gqe$a)NMm5yhEVEb%Rc3_zXjGms{lnC6Yh z;{FSYK@$$3)>>kXjKF*rKlZ}+Q?Tw=5vXBaa@+{i~GJ-4NL_>kt3JHZ}gW`6> zRU;Q!n>Sv7NSbu7Nsf}DAO;_ei|E}`PJ!yrioH)fGA)yQgG)b>HTp`tlNgrjIA%0K z5IXpRnMR=!{@d2coe*m63>Y+|+LK;Ausl3Eo z7J2pu!}Z%m#9r!K>VB!TauXu6j0_+!459ATLo6c4Qy@_bu?R-J7`WClOz7w?9i1Zw zS~ZtdiqVkW;MO`ieg5nY6MeU+F3+>K*?Wl%VH6??`o~TS2-%LKPl_ldf}!_7fFRXI z2SlUV2`kpTs`iDH=L0EY2VIAi6Y8LV?*J2?plJ(;U9zk0htwnt)g!69aC(#g%%K0Z z@P7*ZWAEHKo!Kvo$m6y@J|E)0+YQwckJRW0%{L=6m5@IOSRX{qL0;CHvdzFWv7*Q>P1eSBn#w@VQ{TNbTZj!A;=A>x3m7U2M z?eL38%nYHnwgLcM?8Y2I5VvhpqCFk~`^aIbPiH|3gmHa3I@wYUH@^1sKlR|j z-M8L)=dHKj`R;eV|GjU2_k(xeWtVLj!c8aa^z0<2bHXD;`-iY?PS>5?%<8JdUs!LIAaSX+px8%{Z`r?5~$z zzQR1pD9oeoDMnojBMmeR0}VJJ0ul{#C!ojQ`@_Ye0^gETDCz~B&CaiM2tD>h1!RnuU6Tl@M1J7*&(CWJl^uwG9U>+NJ z5hj2aLI8YraQ{m}|4nc|%(W0oS=qAiU;6b~QUU4$g6C&v2ggT-LNMXr%Og5%85bO3 zozhU^{$nWw%{EJ7#i}7a2!X1F5M64l83xv=QrOR&oS~Bc3|<@hk7cQ{QZ>QSYJ|4_ z+KcEgLHGj#)z#g_lskcgcqxs>)j9faLViJ55DJ3&HHqqiUrKjW(*SL(L57YR9?$H{96&unASA7&Ncroevlt`0+3|Qy zR}c^!NJd_`?I!RZ!z=Ta=J&<^lucp*1z^%2AIDZapsNIoXrFXuBs@4eUY$Ly36pmJ zOyZFCeU_RKm|4AhdY@qcL?R?gaU79FC>p_YeRCH0#}Dax}*@XzbWngrwFHrMis&6pDY1EfTG>0hL@tn0t+VSKij>M zz~A}pq?bn!tf2AuNhrTK;R$-^|D;J6GxtzZfbuQCcH#g0_nTNDoP+*5xc_G6ryufz zGvB%_ptEfk-1Wv$CYCBpHj&m45QV^VGyqD)9!E-A6Y5h+cOsi67v}hWnm=z5&#%qE zn(YH9$RK*wClE#;`vF~Eg{`$-loSP2ada~AspCpLZMGBWpRr^NSRFkB5TF><4Z?b< zvPAa|s!2e5(OYXgdu-OE_ z%tqj2_=F>MU4WDk7$ntz7>2{cgWGp*-oJPI?wy-AZd^M$I#@0i&nbhA`d>3Ut=BveVT7&!V-(pu(XVVy=ExDdi2coOEoZrUf}cO70{05D{& z+41X(&2&G)5I){e9K?Z+S}C5L@|1ok@?yGv{jEj1%S#`Z zpVk0CYXaB=v47%C02iYGezZ&gS4IGQ!a@H}1oYojS@t-91P|5~zm4#}9;*Z4fhyP; zR?nX99UcOX11&^UN<&B}De*j-%j+y%??9dZ1W7(|OB6jO1TlIeDNs>AG9jg>WZj!y ztp$)n*Fq{NsguxA0oI@(Co#&>hPgJtyxg{kmkxR~NXkZhl9J|6q|lOLhZaWU9lzlZ z(EY>QVs#ME1pep?|9f%&ZRSt@-6`-f3;pM|x$-*WF7lAcTit=#ryqhQg?aZf0PNnI zOc1llk2dP`Iw`1T^0D4@qcFP(@edz&KE_!?D6&!;H>Xb!n;S#dfL zqD+cJ5)XhV$dD@O5{*$_8BM}b6RX-HWo%c<0$L<6K6nJQUOO`tGqXok2!jaA{?Yyi z@60Tn(n|Pc`xP@IAi#FIT^=5$fJlq%@>4d(;EQC^3T7S_Lx9N!T4St>Rt6>>b)g3o zB-FU1_Ik_La8c}r(jN(s#aeBx&W#7JvT^veyW5}?L&sqyy?}#g<#$V69L7) zSo@_ODHaEZ>(i%mCV;KuZRQ4Y74S3>s9onAnxok3gdwVa1uY+ml|S~Y3aPxy2y8WH zKKHW#*@qX%8vCNdKD}93>F^{8I`u}7zl^VI<)Br5qxPR&VWD^s21vJ2)`|H1|e^`%exKba0ng9S` zu~@9v>jv1$lrfJZEe6k6)>Yh+77T}qgk=%C^sLZQyd_5jnSiGAV~7u!c^FU-d6Z!w z(JP<8Ie?&tv&jcvasZ!oKH$07=-HdL^8g`_jP7bdk0?RJz2$Q6`r`Wall%8>fBubE z&(BxS&R3d_H4L;EhQ(r7EEWqb%e@lhE7$*8vk8yu)i|!l^(Z{9*K0x&1W{H%CHc&t zpS)dM0MIUig*+VvD|7-_*tWotS$JHJJdWB*Y*ts32@xV94Uzv-+6e&xaBpw9TrN*; z-1wv4`6taI*hT)oi}t_a0RHMPezp1L^UMD;`d@ysk^keY@WIiS@HWNaAxbGBL_c|W zFX?+A78WX!t)aE}C)`x+%4rf%v*h~KE&`Ev9nEcsoei%r&J>s@0YeGm>JN|vSdxG8 z`4^>q(R7@$Xd^^KA?bh-_VaARe_^EaQ_d&3=9~kiEv$Nz1mq&>_?=7un}PjpCV=PU z2Ab@#7hLE=$RCr28 zVbJ2rGc414*YNXD2Iw$rFQ%kot6*Q;Mrf0Gvh=L1OX!(_gAP#2bCM zrXX;dHRM^tYKu{zQnajfbbyltSUe%oa28-h5*}j}s_d1Ss1ZQKk{Z(g zxZFEDKRa!*lVo-ZkR6w9nT7l+s|_=w`f&khpm+L3!;*R#g;NVAZ|SnN-q!ORGdf`;OLKyCW~K;)j-iCTWD^4DdMea?>R zgc!KFh)?5vP|3eO0~W= z!T$O~+aekhfT)~P*Gy(W^3HQ{PYc;OOp_Qyf*xaLA_NvHT)i?)LCuy+07GGlq|*fn z2{P)>gQo^jBI2?`9A3r&z5Kdb{J#_wdDK{)(d!HTFbu;m?CfimR05GKio=5&){oKy- zf2fd;)J$e?7iFL)Bsf_K=q!IcDhi`W=?BAfw28wMN`p0FT955cEEP(Mya=<+u^r-4 zUaP1M6)=q29FHS){wnOi0910bp+XxRpeSNOZ9bE9uupN>p0=9z!3j1OLDzaJOvHw? z=hLZl{VGiWm#ywaNb0m*uqwRheLRl|V15bP$pmnTD&Q;sx=cnJi^PAQeCYpbgZ|~> z=>O)&(8g<4DxkQ#&VVlQorzq>V@Ux3R%fR?vRH1OgAkI>8@Y--l70L*C|=qQiO#|V zy@#f+dvTeh!`{a?@R>M#Az0~mUNO1`j2hGas$m&O^GGM z8RIR2x|0ABBeMCw>W`JHBgIR=txHH2}>B1l|F?>#QsdB4jM4^OH)apssXjsoLMfSD3PdMchBo|KT4JUk)y!T z3UDp(p0qv-q)`U9E0hniP8=A#B-MiD-UiYv{UQO?iG$;IZ``|^@$sT!jj+>{^D|BR zkvjcmhMlUAs{P{=GQqXhg%J&yS2-da6zkXFkBmpOAp20(yO`TjYc$K(JP<6F5?t0^ z7Le#)N|24OcFD{HiXFwvj}{Hj9f1U*hK~hWrSBktpjTaDq&(U*iD*t%KoA&NEV3-f zNkS13Y3j4F08cD-CM;WyKx((bx{Xy_lUl+wgM^4&Y|%Dm&(iSlYyWtf!Aby#DD*x$ z&=Zl`UW))3w4qwxNLU^n<4nw0`;xYy*X7W8cSmSQ(IjY1Vx{L zRIH_6JXMglq~_ABx7HXwu^O6M{$FSHK$hG4#zb`%e;~DU=s)&|0Yb?8ex%{W_tR2| zl>Th6TDzQPRsg5VAf`*BtsH>rv=+NXnMN`$;v5;OTn#%@6NP~tZ_$`vL z)g_#YAYWR9b>2|g3cUi4%Zg5zFASX(owqPc71b2z`WTZS)&^GhY87TQ zqSb7Qh9(gX%SvlmL!ox?b*~g|VYT8hvmsw1%yNGAq#(}|4jrV5V%v)T%MR#&dkmTV z`%cHGU;35589AJbVX+t%!3qqHh!GK`tj=6kgzbKdcTv_1_swG7oi{Rn99UVi;Z z@c|$rA2YLLm%P%P-~+1gsCHuE)oAPAdNg9dOaLq_?u(jVv#^W)>y5xTu4NoWL=-bw zkK=0OaV;#W`d_cs>(zR_UXSB?T(5m>MIxeM&_iKthRv3`TrQ4}5BK)>J%L8n>v3H3 za=Dm5Minf0_UwEr|KE!K$Jgus>c8pB>BlMmFA4^!CJ3#1$R~WaTiM}=d`u|~XW6zO$u6JL4I-F^i=QU^G`}$H^sp}W?>nwFyZr#}LUCQ< z2QKq=U1`411qgs270^F0_bZ3~Uljcyn>c_P)$hn=GY!zp?z(}FBfG?sW6WgR|00ad zVI#j?)WDtss)iOtysxY@?4|=QRo9esmkEPG1M*UBr=RU5nsqU41-AL92q872GJlUj%0{5u|Lo| zNGGHlyRkn>CRrAO1pOD_CVwL#9aG?A3m`v%DjGTk8X9056M*wD{#HI<%VW;C2w-)a zH9?XolK@Z(N6^9gOX3sOKow;gz~O!h=$~ptjEd@(km47okbSwFB37gY=BD(|q#Ggu zMis(}U`^PDq*|VVPB3J`OkXYv%A_Y)LbPABL#r8eC5<`4(XmukiN*dw4VmVx!~sD|OcG`y7F!VLaM%dELdy35 zYtDcqA@OWhh~$6q^ct1IBSb9~0Kin{fS&WE_y||j4ieE|%o(|7*batXq)CW|8Idou z`djmpqFijlpZq^;r}bg~z)nRvomEHrk1%ULMh_!>y<KcxR2B{~#zMBOtbD}`O5ab1rfSMo1)TTrIg%@(o57s0% z)_7mZ+)L}=7Vv*#D=%)pg)LiDHS9Dpg!+%z`TnNIjMF_m5hPIUbX6Y%Rsp+hRABz$ zde6sg!Ue<%B}kWLXd_Gjq1~#%3OE^nG@xAux?aa$p)gov^gu8K8j#N{L2uZyLU~fM z4L7z?)1;segov8Hi@svIht)1WtMtaSLEv;fp)wK|2Ox%}HWhU%?F!hkTnYSuV!HMH zL4;N3S{#0gf32TAbGeVSCx|ZepRHluSUijVH-NKT84VCW^%wree;Mm`h4?QQ6wp#a z_N~-s^8G;H^4Gz^VZ{U->=)2s7(xo*x>Iw%0ZIyhE33aKJQGunXn;BwN7KUFMxqxx$8d-?V9>w?%H#sG&C0Qw`oqFnyZf+qJ@ zo0Izhm<`ZiR(g)dk^Pe-AyM31N0$uYmMJ4306dNWz|7-%9C>75y&GX3$C1a8*W#8}!c&Zi z5~N5N3^4-bfjEBwkG$}PA|wm}93f*ON5KZ;1nhKIch$M=^^G47 zm!?xmY4*N3eORZOc`q+W*#ffrvVjZ5uImsbMg%|0{sIc)Br$@%JnZC zUkZws*aT}u4=!dOqukt9?c_3ipzKU4H!$lM7rSU0%*%}9ERo;Zgglo((j*Klxc{uK zT>WneeAF5HFb%+b1{!jFpkK)PkAW`RPzz1)KhI3S0UCf-%?-3AN<9SSb3wagDRiwo z0UdbE@!%D1qXh>rM`zG71&S&g!!zVy7omt*9^v>iiy3qbJsA-LvjruMIibhVGWvvi z!d4Q>ysENIfjQIX-+w=VQAbA|AdJBGB23puOBWd?>v z6D_h^3F^I>A{=j!iCLOxuKc>|`|A{$7Ev3NWX{T1p0PDjXM6-XaK(pd2!3>#u=vuI zBZ8Dgh+y1~SYbh=5@gSTJ(|V)aAOyw%k1b0wYkZuYT7s|tRJiJsg9UNX6Fb6S4u;! zmeA&u_PCy%bN;ewP^7U&gj={4%(;=q1N(?M3|Si{fSgjmtG(v2F9Lew?A%7!VC*s9 z`QQValAH!CxmS_wF*WX%kP5D6wYBnaG|Cj;tAptyHz>#Ow%VXg#4|5|+IfPQ#tQ!c zxCZ(kq9iA46!A9A$${+-PLz+(1}nQ2t(gGYrf&TXoO)t1Iw0!5aN;_2Z$20L zU((noW@n!1eCEj|NOcMbvZS;q^9XCIT7g6LLRE&a$T*upg8B5DKe)tM>nzEIRu>X+ z+ht41zi`X5OIUEt)}&H}!YNL12*hW= z;=?HKGEoULS4~^F3~H;3<_X(?t9G@{U+sN= zz29G7@2{_&42b87i~|vo;q6}SOqlup{d@1e`?<%Tds}1|5Wl{7cKz(>i+$H&oGSzL zTKj)K^q=Uz-6{vL-Zz~i|KGe_EdPIVdkK`;Z3lt%r}oNC05?IwU#SV;ETZcb4cd1% zKJO0U{@;-o!X?DiZC(cE<}IEg{x|yoVmni`h|9!(8V#TI8<4fu3tRX|P5~pDjV$DrEiXw6-o@h#5m&%}e`8x|+jhg{l zarsp|cl^ave(P#4iKhz~LL7VoIAy1%F^zB)-LIIIRi*MkGGh6Tgsjizh;a5HPZP(L(04u&~qy)Nx~3 z1~3#4Ll>!JSFK-cVEA>8NtR4rim0~uE{H!O#MWP~T7Qy+LNVS&g!76GW>KTbOAp;#Jt+fSOicwTtX7|HLqVT0wpy$zDDMmho zV#V@IB?fbNCk5g-WX=VbX6$+~XHBIdQn0=EGfIkwvBCXiE?F<{+wyrZHpM zNN>8j_aKw)Mklk9@##|HwK5>cT27s(p^*mypow@LSs6|3`Ixu~cf^crlQzjl_|GDR zA4Sn$PPvg*SBy=(XchK3lb5W(GPQqVE1BjBoXSQ|RROeFlT(;ZTK;wz-gs*n%$vba zhjscl!%5CuogbM|5B-GCe~u9;HTS&5EJhjG7$XUIDh3$E6pPZE(N;fde0|cIBk`%y zgz-(S4L~l*Fi&hbWf2prSQup-GJz4&R+QZcDpl}@kZ)w=2}P%0x>w-?GOM|yJi4+b zZ)Lhx#QBrm2Rs4rr5eHdhA|pG6pN~Wq1Cr}&nFP89;W*HF|v9rj2i-!jJM!Gg)Ndh z2QF9|0CfVva_|Aq!2r>+M0mTh3tQhEfy_`fM;jc#=0^0QZh(K~SN;wWLDkf++Li9Q z4`9&*(C*#q*Vob-h|tx#Wb*BpB2TqTBL#_?_m|uRB8-ymjZqLUi*+a$*^^`&cO+c^ z3KeR>TPUaz{Hl$h=CqXg*|=^6pkwYfrj4!Ho7W0l_$J;6aeOug9(PtbRo5T|8P^8=@}mU9~tUK4yf+0uf1;F zYU!a3OiXRJGqdqV@K3qjyLa{B2k(FJiy!>f?q0us=D=w0PoF$v=7*2&?{>{(S{8q_ zxZN1~&)awZ8~^4%`LF-03HSfB3iu9hQbGUEme{|pWbf)F-$pxe*2`GkY3v+m+Xt{n_&;t1 z$bH2OhvMnCKGNvwR3*>0L#vZi9a54qH0)R0LCHqb41LKT0y zQy>8ZNGUV)hgG7EDnnyTLhnhXR)Gk z2A(BSWNwDfSqRb`sxZLGwIp*A)2-xqRk%kyJ>7T=-q7*QfdIU&9y}!drwv4P`Qo?X zj3u|h%j)IhL*1F_47~Lu+d9gr24I0h5l#92w9=n0Qu{X&fn@w#hLUlV0i^1`#2|P| z1~0OP%xK~<1x$<3ZJE=zWkTXg@E);B4a|CCxv%KzmGyek$R4Bp94^W^oq(Gh?s1a-2F= zMnI%UvBzhb`zppVDMO&c{u1M~WrswHw+M^0-EJe9jF#SC+SLBf4AX>~R%I~J=RWuX zN9q$&``>sD_%4$sM^mWH+m!-0QiQ}*ZIrF8>WA9?uq#VrWHE3mnwKE^B&}Z*{7wx4 z(+{OaoY^eq15@oasfMTW^JUJD@VJB2@HELpmt_+GZF{hmGhI%f>y)zt-n9d!0KWBP zR7T0E#${^?J&6AE_PKh-G(FxeGi|H{7KuQU-Xi(WvFKVaA!xQOZY(9T(WK}ON>*N( zQMU|poSuOAHZJ~<Cup8S36d%I$=a;Bi1jcA>B2rps+Rzp=Jms{z zs{Ui>|0+l5;I^h#$ZYPU4u4NX^soNMe<#kqq5Xe(K7h8{39~e5S67zT;i(<7XI8b7 zny)LO@JgjL!*V%7H6qgy&B!MnX;4$oDA>*$@#!3hIKB?@`0^6^gX#0Di9j0>KnJ$6 zC-3>@_MHv=+eHV0jlWP7Scq@)u$MtEBg@5P6fw}HR104Cl)d&Q)#upnYgg|9#sLFB zCjXeVRSD>p@1v@r?ALB0fBVmVzkhLU|J^^o?$`U?yY+fm_K!%*GD7Bc%ISosf8qUi ze&~n3|M7cYs6X#rpM3K4qi=lt(MO+r^2xLPz8f)++W(Kg_2lDkJ-H?NZ?~WMEC0dz z)t!|8Z$|&q8~Ok11AxAivEj~505=#W_|UT*eu#@pT5oxWTbck4rU0Fwj_&4alFumU zPj?;kkK3vKFNOZ=TI@InKr3@^~ph3o%Q1xrpm?vP`-MddCbksM|gsG}~4a+XhCh&Ih4-re- zc`tX=9<#8Ttckfb@y^ILI2h*46y_2WNw)FeQ0$>_@-|?Om!PSL@f0@A5SbxSM2U7; z?!QzuN8-9fjAC72J)-5sqQm#z0HTh)A^29!%sw_PEZ# zwV$K{f{u!hwq8WN0j3IFBHaiabY&~ovn8~~aaQCdn5E6+M)hWvh2)$>n58lE?%~62 zRdopvUq~#4zWNihkpf;=Ip6{PyCB{Kff z!_wmsz&Xjy(eOT-@{|rgLh!PLe0<$_Rkyo9X}RR%&4_=Z{8Af$*P%dMQ(ul}{*>W& zYj7^^ggHpHWY?{xj04lektyc9{~hGbX**`^i`ZLjKQJ*k#BC7=d zYQyAN127d1Ogos$6HISwJSmsHYFW%>F^AeTV&%XhrFw_+f1@gZxzt?S2;%EXE*wA% zZWKm=Y77OVm~G-ClcFh^MH?eV2;RXl4jOxU5J#0xn&d!3KA)**_N|l{I$wmlP6or4 zOBMNzA;$jIj@18;0`ldq29tCj>)NoJq5lgSV3Q0uMFT8*rlrZt=mWTa|3RStEovr2 zcFhfTBC^}X*1!U$$mtd{v_%i2kGw)*{L^e@E+L;LAnw(W&4l8#CPL>)t!3h6PMH-k zbXASBq5*)_hr3+~@P-U{C4j_@{`cuq06f+kzN8=CqgQzFkmRLK;A0V~FpD5rzgU_^ z{5r8UFzM8SI1V+U^)M&`#ooeyT>am>s>J~9vDf{6-}l$u{<*&1U%$A%etvzu@7KNe zJxrw1T86Xn8Mx-v)$U*X;XnCPfA%LIy!~z+K>NNwfBO8{lV{JKy?F6_fBj;=?-qYV zAAjq~_4DiN=hwGK|G)1me{667m&pH@pVb@r{~eDTpYHSDSrb4z@ZrjNhoIdprFh|C zKEw2M@ryulCB7me^}<{G*T3@MJDKsqD|jVq$^W6xnrj4p1&HR8fe-w<6flkNY-hf^ zx=O*a&G*d2FbZlm=GSDMgk?rk%Lu=j;cBj}ygW4$no}=@%0<6iHujvVE0Tg~7WC7r z+L+7Ua#7-nOgSh8tu^jIq&ei8xP~Evp8oH!Y}C{F<}FwqQ=)+u5gESQ zWYSvxow*GG$7xs7&yV1Op#3}s2YHbq5p7fGj06ZH8d-)>ml>c3j~+hx=Espiv#KcM zQc8~Tp^mB#-f+g{wQ=?6(eCQ1?V5wbp(Wq79Xl#6vJ)n5BGMWWwdPm7jDc}%E&M`{ zw(ux0U;>uIvuD`E_h8g<5tuG^)PQLLlO1iZX0`(>DOYFLn2&MP>QN-cqr|Lmy+5-c z20kz%-d)C6nWe-=Dku`4^`7LQc;l>>Me741WNHk2yaH(BCuS-)u0bPdi9!9|wO zIp1(fP)r5pBt~>nM{5FRSd-Y(Y{_zSuA{*9J>%yZ@4%MpDo@@3HUo=hJWEwiF z1bA~1&ujF53H@KX>N`Qm&z6%7;j-P z2Yim1Rw;C8;W}wR{WJz%7ri>y&Vl?JRbVz=eDcxPtK4-d8DDL5wvzoLNEASMELuXv0ed-{(>0P!lhb920)?c6ik z4DIGK@P#+v+>Ky^TY?Du>4HEtm5<%pUKez)@OXLxkG1)h)?d}Gy=&LrJNDgaRHoLX z?RLAXUAwvx5nG4JuFYFGng%&gjHSK}G6Aga_k+e%i&^ukVeR|i2)+@6loTe_7k>CZcsn{=XRfhl1$H zm@`+~4GZG2_JIm;9A21gd|g&VGa|G6`wi-XxBh5#CDHbKT)pT8+`=m(L=1VgmRq5dg1A%KrtgzDzKVJF zZ}3#jP}2!!w1kV6bn1oXSv0noDS2MKV14z~X%!_zAgC+JUz^_-t~J&I*6Vl#os2&5 z4>BMq$E;BitlqLfK`DF($x!dKb_O*8RHEx)>~e zh#12qAZ!v-Ydp&nw;6(Ln5^bG7`QYTf&MEj(?^I{n()lBwAyFx=K{J~W${Q8=N6x@ z1spBbXalRC!jIi3#?dw$i%t#H2C>(brgHs)_2a7E}B#6aBk#oIozxUqm{=IlWYQg*s#)wmCEX=dt5!%sAxZVLo;0Nm#9t1h|2)P13^~6f&_B{zq#*cH+qulD z|1IdBR;0p$37`$(|4hNIX1a2WH*o(m4Q3mgykoUJmrZbd;BmImJU;h%4zcw-Gy-)G zy(CU(wgOaKeo@JApiF39mKjcrZuKls;&zlMiR8Q0Sj+6 z`Jk|rHquz}mZ}wOlu)^V^L<{DVTI*U0>ZRmKjj6y&ZCxri4~A2lBvgV^aHrqTtGt$ zj!{=>#$Bj(BI^77^QTW{5FfM=<-ZO6zdZE+_%@Xb`p>gksZ5CxWEbea`O3HnH!(~w z{~+0d(ePC94n#;u5YNmdJWcC~ZWuhKrg2h7^JAsmgq>m+qub-G^Se>R2vW`urX&EB zY&LiGNl;|A`4Nsr0mcG_+1}XE(JkO%KHwxc^6kL{Ty*~OEwFwZdj+7Q#LO87oNxIS z&g1~9cH`Be|ET&Q*dkD&{*V1%@4DajeJ4d%Zwis!PDI-7YIn8U?RL_dTg6DG87-g1 z#tVh>3h3yOi`+X1#xamn4(k72Utho2_x--__r%o1)5F?TVX zPyTcN@=yNQ_y6FZ`uGL?)Bo%D@>dGdu6^J4``)j+eSOYB{F}e_E8q8(KYj@Puix&U zztG-^=*$1opZWdY_q1eQWg^Ge z;^_|SMMFsiARKiAoCv+=mpT}xIO8Ty&&(${0Gu%hej5Dm?mG?o$E$fIXG8x>IOT9B zaMGyjZN{2o9R+aZ&!0bi_Ta5Yt+k>X0!T^2F^HtaroeBD(FnPsJzZu<=Y3NA z2m@eT>F?i;(K)x98VMc_eOZvA?OBWeeTC&NIiIN!k!E4vy8d^$Kj#B8!LjumA0LHE z(P=i{@f;Lie|_wX=L?7I+XYbaw7ZSO6qF`HKeMxT&zpg1(&oi=6q?*f1fj8?qzS4l zf?r$Dj{C4D1u(%>eQZ6tepqE{29~TA9uSC?3Ni$t%ZRUsWYT`hk*+Voo<{C1qD-tL zL|sU_m}M4B=uE5*y+orhi~<7?TDxr68<)SQ5HOdzA10D0y;H{n6+}$;9zJ~d?z^9S z{p%EUz|p_st&Frv4?O-cGtt$92kmNS&K^hqB?LLllKXR}Fajh3DH+PN2!C3yN5oL< zJU4QAYcE#_P$mIs2`F1>8xWw9bDG)j9AijD3Axpee*o?o$z%7oZc1^fApsI~?By&T zGl~`($3vsQyB4sI{RnZgcqyR-8$3?r5%E;W!f6knW5s6O#40gM z;5X7(yAZ1ocN_3KapOizds0oG-LOytGKP=DBy* zIR;*~m@qHW#%gxZR02Hb&+y{T6DvKp{!TkR-k9ciwHxHcpDbwT^;Ye!0*i0wT0gFS zJ|F$(bD+9)V~by)7*Ml+!BaUfe0nNG?3mZ1AJ`pVG}i*hmBiUtOSH5)rE$!a?6!8& zVI~U#*}HX(Vg%IwNCdsdw87Sn!8U>jt9G{OtSei4Hd(M1ge{PT7zro)Yv))-T9dg^ ztK38tX1p46m^G1$2$4oTu#@70^2G2VCG_kyt|R=6%LL9P&1WR(jS{I0zKAJ2UX-TB zA8J!<-}e{Ko>7VV+=TZJZ9+B*01lx4xb;4CE;}I*{e@rsb;9O3?T)sDnd;Y82C(mY zTC@a<)%Hd;gC8YJ^N05Co;H*GgVaU*q73%hX%%9krfRZ_bc=vV(3ORFXKXsUqDeIY z+MtVAIU46tj@UT( z6Hbj+jYGVoojor6b3Pa4Kaeqx6F2Jvfc<{&tye_7 z@AohEeSaMh%8UkL3fWML9e_4BT^}wVu3HI_ciwsYV?Xi(-~84mzx|v4;Q7a2&+A)# zlXvdzYd`n%hkmty{tf-F-+uKM{=NU@Z~sU6?K=Jc(8>2E{r~kF{cd}Z({#8TRZe_- z(^EI$KJVTYB&Ybz{DT8kzq?I@Z;1uYO4g+>yP%PU>RSWv4%6B^Qp z!5(V@-<%O4H4ez90f}wj$Y$lSE*{FNv|X3TTACx>;do{V-}L;SN!b^{$z`G7>VAtb zc8~>b4sbnh0Y11%O_GWBOCG9M4enu~!H)KVc|ld}`Nz?Jo@iyJ`EV^U5nhUmPvQRC ztH8~3{TvQpKH2$37arfyrgO0uDolXy&xtCW;Zm*$ zjk{+>PM561{_N#%$m)#oI0VNSSV@BBe)T4}-`x5{Vpy5+Oi5)RvT(9=!Dk;7`8(N0f0g5#4Ek z(UFZG+Y5U|e{?B(oBv42>YNL!+jXFKxiY z@n5LP7qtp)MWAr+miipU!s@U*Z7|a16qKFhx<^YPgpbL_MTFj-Xee%lqa9eNHBnU| z0km=Jdu0()ZMz2L-jyQuO&Wtl^BfjwyG9QmUO#=Bz~_-g;OP5ht{+be=$NL|!R(MlL`cEKcf&0t6@t&Xsgmoo0{W?x0Zax3 zSpfaK4vSx;w~vYYDD*!C+|^Rqt%+|r_tDBQw-!d-5mbeP6WZmV|0eW*KKjoWOxY85 z%ZcWPjV34S1oV+)Rs4W!rBl-3V-zRe<^U3N;A;bh#Y2vARzRv2528A?^2D`C`g6l$> z9}PuVu~R`JbG8yn{s9g&P~32CA?v zZaEV=<<;bc%RivA@;+V;{O|f;Yh^+28jUC^H{`5X2TP_z9h?#e%{J z-nM1Sc`rj$^8i@NkQb~+Opxw--+M_g0Zjy|zK9ZmDspw|Lqynk_~b{xS690q`hl-} zzD)xx*w#c_9N~fPJ2N*H?7Xy43DQP-c%==NJ8KiG za-ydGWMPUCS=@pi6WLU(nJ(Q%!;ZfGYMJgovYow zB9q8b8qZ39<*39-JcSne$6ACsungNGMv{gr-fAX>52|bQpUy!4H{kv$TxLTKxk&>Y zo`SIrJzz_swb1;BrVi_e$63$HCovPg`QDSaR8gUgOoA*eFQMx%!Qy@mjw>)7=L=Wd z7HX96eM-TpATchd&lKePG;f{D6F3{F_o z@Fyo?$ppAgs5)K5q#7~Y3}3t1*zHyTURD(k1l&snqWG8ROHo*~BxGlWri6P8&T=U; zgjgZOY5<)GtGeh)iKr`xr7=N-sViyU(+*6;9+=H6LObHO-qPOp&z=!25=rBwAc}bd zK$NLvmZk09`|dAV_zrSg&gqyQ`yUU2qB@hNbBIOK0JzU8^d|OyVG^pXFlTT8JfiZKtA%713m@RH zDTT9!3jfC@^JjE~_Fv&La6pMIMUI7)REQKzF3-2@bd&y1lpRHa8I_7!E?c$HZB;k` z6l9sn{B;T*ra!Dku(5K8sJqB9%jM(H*okSZs`L6I#eb5z%;|?8d3N4osVZCqD0imRxC(- z&`EPQaZwW?W@u+=Q8tqUqs62qm5(Vb0t6yKMwWrpt;h;$=^3E3_8}zUn4G8w@$P~0 zulxZkGGMA#UB?7%smKq4|F{_`dS|=&O9FX7C!%^*-(kKqaHE&G`N+JXWWhGtg`)>^ zo5GpEg4^5IUJ2HNDC&iRC;JLZ1A0X4urzBlFC?ZGL?3zyHop z{q$G=&;R2eKKbbXyA=9A^sAG?|9ZQ3|2`4@#4r955&cj9`QIq;{lOFdjr{*RjG(y8 z1hBrnUM7H>zKgiS4WH@eCICLsF>o6bz-!k5@Y$36-yZtkn9=7*aXKgFadpv?gNMxGAsNl$eO*jQ8#!Que-9lME8y4%&%L`NXV#ayj?7c0NJ{`};*l05eq-z= z2LT{~CS(c&3kSV0a0+|;02ohxo`8svvsy$iIJesBo==QaAj4D((2B&IXxczW=`iU2-*YA#N?6Vdn`-?s=(ZdL%+0`up#YhKOTnly<_e~~5tnm}d07U0Q^ zn>2QNK(iX)94gIm906z~5xh^HFyL|h6<+7ieolM;jdN1G-k6w(%rzYENgT%-3G&RN zZbVYwtp@E%DNw1!;8FRT5cRlzEh{QJ%!x$=V~7LQ6VUttEfK460%Q0i7BP{$HBe+= z2%|(=VM@^&3oHZr2X$@L!4>&M8gfRS^QaF-jM6@*z{Bx{rODO(`+9vnAF>!8B#Qtd zSD#3T9=-eS9DJ_`wD*p#jE>d+r)5}diU{va(9 z=Db%xq(;fj!TrKaS+|q0z7+j_blp4uokcjD&+4wnIJLi>Cc`hR@xUOpvP z=jGI&uq+&+T5*3&g0Qk;tYZeJCgQR-nD0M3KT7s`GOfH=QzT?+vHj_yi#ZTcMPD;! zLdoX6z$2C+3(yAyJg}nBpYR6EnW})1_EUNP07KRLjK{F%!_rtrxOD-A92+jh;JhP~ zNy#MbssP!)+O_xnC*Sz`Jj))0IZvbj(Jb~TTS?#;GI+Dg?C1W|zkBG+zQaBMw^K$K zKfFJ|*F)mdkcMNAKtR{Aa#tdPi}$S>iR&<4gal%BO2{<-VGjm*-CD67CUrV0*HVY1 zxm}odTx*x``9Uw+G1q5oCeM`*-4&F4@~*fP@y8Lh{)EnB0{T4~*WDR3zSZd`C;u0Z zjDwgc$}h2|PtW+gj?>Fq6@srR1K>tyYj`4~LTzBv@IL{nz3+SPJ-T@zZ6~c=-MiXd zUG1)R)(7AX;X zlU);OS@-Qr8in;{@xq%UAMGsgc`(tOaZ3Uod53*t7 zbfqH7rOn#+s>-6;iCIWhgwTbX174GQ%4Lfw+KRv%2l(eOS}12ag&1%{QY?7h@W#mT z6M@V$o`fKCh>Jk~Ogx|vKMIRMM7}gHD##IeY$~KV zw1BdI6{`Z|1Y>Kf-W&t6&OToB@=b#;Z^ix`75?+lwfv&`Z7c9#YaHhFpUi3v+{J>j z3g%A?!G|LoYWRQh*p#v7p+O{GSpl*YfKrzoCoX1$qPPK;K|q-j zU>O7sWD?rr4Mn?MM}F-V08`Cn1d5O-l$f9nbaoYy-Yt%X-utfa?p>dL{K>PAzd40V zp`5)SBD(kR5sSbSf1~kK*c-zAinctT=HC27Y}xnZI|)J{H{nrCZbL^fo%Ttnt?}bT z^38s#8aTszmzSFm>$I+NlTst;;VNiCo|$M5GSKoevfI)@Tv02@&-nNmqbad6BKU)I z95zW5sR9rSGT&4( z%-7F8iKOVI(I`jr&wcTWO=Iz`>tJ)JJ}f)#3V|s0pNm#6fgsB54GMbOGD%G~(>onplQI6;8e? zMiQVswloj-Cn465yNwsgT!_z%UDqnVVv-n4lVR5(!i^vc)*#{Ym>MkQZRR{a0yq{% zmQQIZ_LfQk^`z)*w#4!6&k@=5A@u*$iGL?}!L8KNWRl>2%uq3J-3M(ga ze-#Te_eM~4!iYKvE7U}=tV9gnF+lz zIG{)W8@`{&2oE`=eNo=+jD4i?I3%Smf}Jsa9(f&-9jv^RoMV!|&2+{#`hPqHh-e*` zOthpY&QJ$2EnKEptok=(U>jEd#WM6Jm*RNQxFm@3aOeuhrLbTE7?T?sr8#j}PiGo{ z2WUQOgt=ae?2n&x*?ff#*dt+wIX`Jc17$fd)m8wC-)dm1(FR-?0zoRW+_F zjjMm`_ZqQkd71vogiFY=0~z)Lgh^p|1X~_MT>_V)W6wFZyD?F>922E1BoOgJNMaGb z-m5fz`1V`(9z7)O`;Jfk*&o$Y@8R2zN!T|32vDC0(wd{9k%-b*Wan}JMiN*kkcjQo zNw|q?rR`Nocy+{IIFy=H8%>1;ZDX&|vKu+165D)PjpJGj4E{iUZ0<7@yJA%|X+}n; zh|v^=?6*Mp#|R2!iV+XuDaoZKV+cXQQ*gnCWRw$!*(=9?Ai8{AfNPN&L+$Qq%kfkd zNt}RH9T^&0v>b?7DiUV3h*cIp`R1+TUTbq{kI+)`m%ratnYh%&JP|wy7%}|vjnMK6D#W633J36<$vJ}wM2JyBBdf+ z_C+yd*!-gTnGID)3PQ`s-70NA<`K#I9GUWYWP$#NiH)Y9|4IYQ#lLb8@gF{?RX;E- zs(@+g03ezTNn4q9^(d`1Upz71EA*c?zdT#H!<*tCDtHWCp8aqMX1|vI^HD0`xQV&| zNu#0{<5%8KOH(vm=Kmm67eLMb82~rmfCHF=-WMEzjSlKh$HLOdt))|dg9rbRD8MY@ zOHZhSHTTsS zHR{HvvmGA7HeQTt;k?NzD^lVsPyJCf082fW`o+_yiTYzQRGnCTVFQ0Vfd1pG9q~mp zz*7Fd0r=m(4*-CAYdyik@_4M7NQA9JK}4cGLZQwa*z6N?KL&Uzs@+^pN@#XcNmg0d zEFj7GkQG)4C3!wZM<51RSW8W|g&{-#0&4M1)}*K84cL0|iIfAkki%kVD|ne6v$*?F zK47_rxUJ}J>jj*fL9iUSxOAzFz14uhDFMpSk~Q z^q*U+ONp=k;xGUGzcq0HZ_@u?>g{zoLeRx)xmgpyx(axl8+4-L8V6H=KHI0$IZXgJ zs{+2wZTG1jkxw7@zjNsSPTtfZ4uIxr$?f&`BEoZCO@Qh7lTWT5K4eoL+Sa1^0u>5r zGAfB(yHr;kV^5eI0IGCR7JF6!LAYpFL`Kx9$w+-|%7FpNfX;0)0h#P~X%w5YFEAna zE{_G1CwfSjcPTWFGVW>c3!+sKHPdB4{j$AL=L+1_MlXr>0^W!=t{BHL^#8C|fR@7l z^PqoPFDVb6wQJ&$H{yP`;s3K;TKp16cdkr8q7-Ar925vwD*&zB0Ogt-_eyvU7<~{_ znT$!%&r5Rvh^iG}1n=11Cgk^pmkAq8EF#@D=e@HqsW5lj_UxLdf&@a+ z361IP_uecpdKYkIzD2JDTBY(hj5Ueqpi+!3DsF`2kX{h4B7UI;9Bn9mB zGxS?x71syoWT3Ep5<8Ga02>jZX`XPlVH8Xm(5WnNj5`fl8My%qy(ST$sJ)}@(?Y#N z<~S+s2hrpsKNJw}C{TZiD#Ys0iU{{EyM}$|4i>?_TOOP=0g)0l;lA(Em~^jp;@R^^ zg9-uYAw*F%w&KCtk7ElYo&@DFag-eLRKo7)l0>ZyVJ#`DS2_zB!8tC4@gO0G1!fVl(GR9m zRrIdUpM8?2v_u___T|uC3 zAEce{f|zU)@@~vsn8L{jkdg`$K|s*1+#;xCFuu80Gl<^|lmdl4FEbNVxKV1E5eA%C zTExSEKuTS_wSq0QFNXf}Mxg@@(7e2;);k9rgyZ=jp>)`UfJ;Zqb(+-y_@7Vg{x>!L zn}|O!T@X0&-cA=Lp8^BoNOK`pII;_wvWjf^9DL-M^2WZ#)3C}X|N8L&gSs>a0D@}u zz$GWl4D`=WNnFUpEXD|u!eD*hcdOE_LA{H`C#~LL6=m@IkrDyDcPRS4LlwOfQQz;i zckR9JyUG8fNT3s4afTv9(XW+@z};$KVlNtQ;?hNQvaYoO;{+^WL%rbfTaSM7Cw}xB zAAR$G`_13_!~gsD_Aj2S(f{53w|?lyfBcA!0Q10-{dvCOz3}^W`a>>mOD3E zSpn!&CL|UQZSs8u6e=J^6DP!3!rClT-emr2D8>gnL8Um&CTxy2Px9Xw7A5_guS)-Pud(=z@59}vmkci_TG=L9s=+OSeQT|CXnE|bmW&i}kPh36*+kuRc zjH^g@z8s_Rjf)Oyl(p92K?4MaH`4&I?Vo$LM=sEG{Z4oiXo5#Fl7Rpg+wjj;0DhByEwjFZLcz$mrOk>OD0W|re= ze@YV;GAh801TCZ383PSZ<>A313Imy@PHrA_X)TqU+o?XO?o{ zu%JmDd(<^d{09wM%tNWD$p2@S8YX{$7?OsH$tg8rC29;cI*bL(JHOb}Pgl{dyQ|js zDy>=MQDY`)-L5PGF=V1rVz_V9kZa;hfUH*90?MuDnK^U%^S%HJHOUbo$rE z8jVxMh9!|K#PK^w;}pXwi=FW#gSz%0yX>+`xFn5ary zOML&u&_DBXS+Gp9Tc#mgGTHI5NeOf)USR`aIXctuMYHYs55PB{(0OeISjPb+2S8K) z&m|l{A%8d46Q%3JTYRH@W`wQU1gt@rB}pCv{+NlF478PK7>C+YP!M$h#N0@GtiL!C zScDnsxpY25@sQ0*#!%!N&`Lyb8PbI<>_3V9@Y!N0E}4tO0Jdm!Tshqj?tz;zdADt8 z^#?+`&AU+DKYvb2rD5m7ozVu)xq<#K_qbd? z!XO6?n~1{rcW$jw?-0Sh`^oS1%-I>>*kWr;5Tz~@IebF4%F5V1E|yWU`OK^a1Tu3Q z6irao+#cl^F+vzEJHAqyL+Wm}={=NOGhMhe%e|Ig@+Hr6<^~aQ6GfV4Yl*quR) z-YuE{#tK+uKdBFZTQedNNnuUo2Qa?$!Fxab zQ-At%k01Z@w@MR_@xiO^j#nR@DG3g7v6ivj^Ouy z<&Uk;OSePKw}tlq{I!W$0p7^}zk_ZkO#mk+_fx~nw}lDdCV4}*G6CE{z|m_!0NfSy zk5~K}4nzNUBl)i@9v&OjDPw$X1z24Pn_37ia10X&{K+@|+1u~E&tL@$d_UGzZB<=z zB7=ihQ#|^s5M#R;S{EZ+PE+voEoZ{PGR7x%NWK?SLfa^s8%x z|I{rWTh2h9N+s&YQQ<`#kfZ->)}FY7<>5jj%H1kfeOu}MslHucgZ)LAJkQv3i3qBm zbRXaxdO?(;U=ItMgQ;O0`d3r$cfWQ#NCse1^_b&M!JTMUc_1o>9rWy4YecDCQ*{Dyv+z@Y)dt>cVE3Ld-_yj;)Jkr&*h#GzXQdCnCRl~@ zNK7E%7@ZX+{vIfpP;Ob{wRowmBKO>g3r9vW(!A7^Lbx)KTAFkBYm})GcVf$WR%(K- zEGjJ8)!w^yZ9C~g(ivTeNP*TBL<;6cY8$qlK-J6>S!y8BDbYldyH!Qo37ENYz@e;! zon+07j%(iIq*AKJLqjg5$US7wE+~`qi;S{dqi?t|i3ly?`)A-@CiK6k^<_KuNBmM* z>ix6Ip#EfP6rjlsK(pk3s;OVm*c;hC%Lt%p4mbe))2vxt5AQdk1n5w({vGc=n9fWC zx`QeG5C>2lZx?X@ieh&fcvb!+`a&>0<+LL5;`vOwFNq`(Gs4yBWT|KBlZA@UbP@xc zN6|?RRz&K-`A#?rL5&_Dg%RCav5SDfk<@&2wYgNQfV4woYuRKd`OZ44Y!)WIRJW$A zpm^toj39UcSAyHz3JtglN_hU{lcn7MOzGDeNnMBjAGf;Plm@t5{=Y#B9Pt74z6TRG zVW@T@kO(V;qmzix2cv9sbu6;nbYV1a1EQA*Q08W$e{%-5#zlgKaJsP6&fx%U$56$L zsSm{)A8d}drU$QrClI=bm`2M?(Zy2CJnj50aV5FrpkT_y!#7uMW4n)*FW+|KM0M}R znRnLkyEVvT^(dPfe=J_v;?K@V6FLu#s5HV92Zs9kr+s{Jk(;Uk!#h=U6x-7RFKd#E z^oT|r&}+m2gc8fZeGS7^%vkJ+ky>`yAdB(w@zFqwSb>JH-=gAVImkh~4)YhW>OO{C zQb2pR;@@sbK>O>y@7h&iX`RxsmnI^TK|b-=rbub&R1gbkR3)aqN5~6VwR;T>L-)*0 zsOI$%-@kwLC%*T49zJ~d;fL@4_Ln~Vhrj(h-}=Tk9>4R>hhO^O!!LgD#V>y0!w=s3 z;Dh(x`TXO1S34s5{O8_UpO@>{pUvBm@SpYVPygj#CZfOppZ)S1`TuwNElg{NhmhKC zy^#V`O#nAVp+55_fS2{*+{gs*iU@$us^tGAL;r_LhK_LnHBY}Vo)NgX++_b2`9HhBdcZZs*(bWQ)mo1I|EXg z2!l#u;Y{T4UoONg>tKpL2;;$s+s>#TpXo=AA7P3!=34qFGfpvH{1BNABH?D}|2hxh z=CMD=2G-4(|HEMYEqcrOtP}TEZ)iI*)niN!6a&QK1xW}D^rYGYMsINaVO(uITNHRc zmL&yfZVjzv0FGOP6+lgu49;aIFXDidRRCkt)GhGF0a*2`e= z0Q1fT&K_vrgqgUt*2Fx&Vrf6d0<_jzgLd{GvFuvJ2)T+m<9upqwkiaHHzJ- zkwh(XAQ(jO$`^~?cfIbwugOY-RXe6egiO(a^BIKEHUk8KF%Sxmy=IoistFs$S%m2T z=Eb1iW8oDGL<-vwTKxk{-*;(Z&2HfbQA7Ad1W-sLSnPwSswlipKZ<&ygk$L%bG)&j{>N7 z0sWt#vibI}f5ZU|Ek25B^lT15f&&1iynmE#Y)mq8=Hj<2;p4UDJTp*&P95u9ihu<# z&*i~a*odJ_;fL$+#}Hq{^0+|N4}fR-OT2?n{38ep+w`F_0XCik^E$z@?CJtuxK^r< zi5+2>BW6ScNGzLFVa9}Ue#Ox<bCK+ zG4FU(5e~`gafm(G*e~D&;Xq60z>N4WUcz?o?=ANB*k%u~vAwr##@Ov+n((5eokmU& z)l||Yce=U&Q+|iniUUY4CKGw=O}RGTe6CCo=6&z(+0rm?bser^RkACy0ivp|hp-_s z+g7~(*9u$AQNXNG^y`)Yvl^&sw_;$c1u)MltkgHN94TxBu_Msdn)W?QQ&rz_j7C7K zt8aj^MS?Y^Yc(N@IhC#X@X^Ej-}B`UKlk{pFMjymKmRAb=i_fZ`TXY}f9Xpfy!YPc zAHV(R;e-2ES37A!u?k&4|C`5pt^Ge4{qe)Zq|Yee+F{uh6J4R_XW-^l;J9dQ1c zZlsrE0@zFex&Y?=?3w^xP8IOYZZDkx`1XVT?<(d0)N*Z`18`t+S>d!=rt$Ppgo@#V ziC;W@`rxfc@LEE^1eK~$v*rQ6Ni3;a&U0D}y^6;r#l!SW8EHKEM*WE=jKjoRp0~rK z6dKG5&5t~mfuLFKkD-yR8MRL#p3Grczz-q)^WC3CETTTlw7zv{X*kX`^m|))R;+6|!xHz%^K)}#w?8SI} zqO1a!#sxQ^R;DXTik|0cqPJj(vWA{z1a+yctt~nxTM$IdJ!o&hwyr!($e|g^3N`YidaKZnq;4Hybg;cF7hsX7+y;YGw{-mdS$M)sEa1(3pr@ zw1r5vj7&|dwsVN>SmK+KD;GgTLW9=wtgH|j`Yq3YPenY%*kwr^EX=_nTXmY%f(ZTB63lDC?!wkAaFEGRA z3#NT3!_0JhZ(oZ9HQ$wqok`O>9k3sfkZ7?A05+5>s}Q3pDYr&e8$jHMsqa-hnO{|b z=IKT(q`h0WqKE+0^1SsAHqHf+Q33Ch8UrlNf%7z_rCB3vFBbZ2XC^p0r{{cQkObkx z^`oJ%gbTBMvMge=ub0(OP3o`aHg1t_Ck5G;MKJ(xvjy9U|EscJn$!PtAaHFPa(Y@b z(;Lt~FLI)81^x4l!sKY3Xn`{(ltb0@x1QZkRFP5i29JWB zdAb{aH%*6#XsjZpfVxQr8epF==@6J8YEjq{?N|hAFGLNoftv&TPZ_m0mo<|t zLv0fFwb8#C;bf!IV=({8rbOycOpzE#iW~v{%%m~mxC277jKNc3Fb=F8N@4D*36vQP z@bNdko@)c(R7Clql^<3R@-`Ma(hYAz16=S2XV3x*AAn_g7~QMN#s`BscLtNNc^9pd zM#H3NI}Nuo>%N1d?8c^n9-my2F&XUBwVTnmF{zR21OY=8Y%36j&Lu&Kqibv-09D(a zfRrJ~Vvg*ECWLpv65V2hjwQTbyg#Lz!x@jV#O1}G&C+$c4BS7A@2{*3r}&Ix znjsuKILim$U;_^9$+3A|+sImS7!n^oC0)4oZwxU0B(GTTbclFTm^gs6Tt4Jo{evy|C_&<0~`RY zS^>5X(Y(gz*)#yc(@(y2&#Hjcmd>u#!VtZ4E+d3DB_oKAH8juo@P3NIw?TENQ z9Ek%^$YMFq!(v?>022)`l7VR2M^zetimTeMlVW9wi=lKS)=faF{sRKdY#pC$f$>G; z$@+s~83$y@j^;h10D%2l)8vDgo1j~?GRcmhiXI)pfYP2)yS=a}Wb=nG!J~@0>6I~ zQYx0930_V@G{}O1$!2&pceU3Rjt`FB26o*Sh(wxF`jL&oAuvOWZa*cmww1DZ0w9Jk z5kvRI6=C9f&)jBoC50}7{!h+{)6W+v|5Wt; zD>nd9tp^xEKozH7)zr_>|7PG1)B5XatBLB5xdfv>IXi9rA@Fi%x|5Hci@dYZLzq-Zltlk{inlSk&IMV4zDHgrqar2A{ zCW4Sam4sW!%L!4FrBO2z>D|f1kXPmy3TD}V_I2+gBEBwV&W?iF2vgre|IdXHPNDjL z@mGKS2%3Ke;D5{qfUZg;jY&8ky)rI?}J|Q zGsYUpB&~nkn(ueqb7`M)L2WII$_R!bic0+y3=zb$TI8gFyCMnqkAn*L#+bBQQKc^!VD`~Ukv!H^-0XuZAPZtFafDYLFmp1@U zK5M|nOlQQp9})4-qgpI?-56cw^Cok_2aFFj1F3TC<9xYz=??58=)X6cdm6uXMF#pH zw)X&fca?sR67;UvcepzW4yDK0q1r`S-)n0GUr9MX5J^Dl>V5ZA!O(Mb^%el_?f}^D zdso=CEq?Y0i=@qSoH#uUsD!S;Fsc!gOtiOO8$9pZ61%j!2zLUjQWJ9n6GK{i)OHUa z-1BO~jgP5Z>Z%rWxxPJn^7QKdytzDiy{t3&Q^o!77W#i#Q9mcyr4lV z3KeB#h*-d}Xu{bhfq_tD9H0O*i|u;s)f|gMY0zaJwnmbHiF$nhh(=D>8>FFmNSz>O z!J;c4qgSnocnl{C5)E;Lh6-E~poXN?z;}j$kCerngHMauk+E#zEqLFw#Hxk|9&fnz z23Jc2Ux@yng#K>0PzMyG7$l32q<6If`B6Yk6)Md`kWLL z*KlA9G^b?wRxGdXVFfT?cuEqs5>wOr69^DifR!K&!`g!$uuLG|r5Z31+f}O(?vZ=I zB3^e#;0PmN8v!z%31DdOFR94*h`u<)^x z#*jaa4!*MC<^)0aKk}Uw!J>xj!{q?SWVdtJN+yEXGPg0IfFq?*NYrZHxHzR)oL@!5X1yR)@oCQmQ(W?ASz03~ z8--%d0GU#o03uZ*oW^L~glz9e5T9tG4$dp+h00_{lv6`cP#LP@AEX%DEy6+qHo{7r z)gI`-ncF04fr~T1?EUS z*7gHO1rm$;-^-+g2WWu5_^W?+GBcjT7@S87gowfYaA2^A_U^<#GoX#BYxm^`DK}Bo z1_cQuWsEH1Mr8Di=ZQLJ`*5RS9;5{6y^9D`>|90A-ZnLiF}55_VnKGCL72HiTL`C$ z@MH>)vNJ?kxi-HY_y~^?L0G})G!*@@)}%QDb4@E=cs5{*5ZF@UZ@lsY-CgsW*$P=Y zM1hpBtLZ-2WGIdjDjV@WOq2J0m8*1kCsmX+VJ`}K{@g2uvd_r9$=GIKRvGYG{*U@H znQQaeD`Enw@ZTFw)KYgM0aFnk9g~D0%};QoTLHD~Vk3`78#+`~RlNU<6iVK=?Zq?} z?~~qE;}VR4Fm9nMbl>;ad$k$>RiFbt1%8qdH6gYwiCU{b!M@tE)}){|1=VkNm=4H4b3w zFW&(FpZVK51*igGr#|8n*#Dwi1i)ul^8XT`|J&LHwm1M< z=L%4wlSd(7OiL%bxSxFE8;`&6J`!Qcom+jvY_r6?hc+@-+Q1cQhp3cbu zlvn3_%#p(r7)D$WQiuS1C>Q8v%Cg~L2Gek+{EysZj`YMtE4)4tfJbNtFX3)U)Fa9Z zI)&0QoS!#~#c*K6HFA0=%8Hto=zk`OF46xbm~ssLzk{Lh$X$;I0bPPhoQs5PzAnCK zgea+@YwdqoDldtE!!!WR-2jvU!bfQU)E2c74jK4tB)nHE06CSmWd+da0R}`Z#03Nr zb$Vc`1twn=TZ4ecpEu&J{sskr_%>J_I0h4udOv^=sj{%{l?NVeC$>P%aiBR+80g_T zNapmYrij380_3`Ds9L&s5@1@39mGg}c9xc@Lt%N@82%<^QV3&UZxt&PifCFx zVxZio0YWGnGFMme*omsD)v*T$z~!*pt_C8rAx6AxGonCRYfx6p*kGo%V^v5a?aE*k z0Z5t(3$*V$8YxMmuEbdA07j74FXq0B6Y#Z!bjGPxf*r#0%aTpT?qN0B z%2oww7nN_%#J_oR(%!i%nPuiNb7&twDhusdi?8Wh$2b z9(DH?2xR4;OyF91!CeL5 zXPp}&Yt+4RP*C%E0}SjT(x4qgz`iCo33G?C2zm#RwB{9A690-Q5qFjyh*YGh2os|T z3$xf7TrebSc}Tq)etlX#d-9Zs*4qDy{%@VX7lT(n@(X|UAN=kAut1hCL&)&v_8Q$L z6Tmk5y&TatQ-H=f^U`qOy8`QPYyvp0@yBh@;X4)M?(XQ!_>^(~yM_K=Y1GfjgRs#4 zudD!d3BxC{+A%WCfqmcit}NP>cV3bO9!<4F!svF@`cTfyv#0V=#%V+t$<&R>@vm4E zHBwp+N3Aeq2@+^uX$=^8+~P6|G4@@MrJlY)^+`B)zK`v}s|wLfz3ED3}Q%#sSdSd5nk$ zVOE$<21Fvl+SS#ZLhKS6Cp*+Ev50Lk6wDyB<_Rz?JGJn6CTh&BIejOd2G-cW7H9Di z5QnsuyqP$NYR+9Ih8SPysXiHrF*+yhl_xMKGS$^elcCs>@sXI02ikpHqPidC(OW(W zT7>|TMni>&EGaQpgo}Wl6$S+RIdohQ3 zO|};)h1q$Ch@lgfQZeHIWsD!e zj7S}$%oI>;89dAlO0sM2o^iU`p?pMNeXw4x@h5i$82X>We+edF3+tyE`*Y9%5I@Yx zXzu$>#+s*+Y8c$fXfr(b70Y>bLcNMWH{Ll@6(QZmrj(5FH8YiWihE#yVOSi)2i)yFJtv^mwL zlyRt|GTzH|(AWJ$@d^PLEEUBBG#}zkDgeh%$^+;>=Ea6$3)wl32Kc#O{q-uHxJw@Z zpuJ0DsM(e6NDH%yuo2~o&b(vRt||-=7)mN8bpQlFtnFiGPC_~505x;?j!R=N_o$T6XD_EzPFjJ?|Gmlj+Tn#C%`64`vEW8AujDr(HA7A+dzWn!hJm$|h-TsbDN9xO z1?cY9jqbGI0wVvv)6C4`(NRG`fgFs6KRP{*o=yPPZ^?*Ld@?-n%+T|E`8^ZlEF8$7 ziKRa|o}`Mxqviwzg2PtdXAa09N%HhvS8DI6mTr5jKOS)Rnb*R9p8WWC|MVZN9Kdq@ zeEs;*e|$G4fO{!GPoUgCZWF+(DL~(i3E*=HfbSjp=f{x-{9Yyh=htDc8{Yp_E@*&P zU&axsI==Pg*S~4)4@9-ZSIp#RKwQcN&Zw$)8S?-LS#8^*851hq<4tkU}gglmApWm@L|F5=g) zJU0iC<^my`s>K*UCK4V|xNagEG=R2|GBaq${2W>$o>|zc%48W*L0VLS1YV!~VDbf{ z%j7_^MJ51!KXN(?&E@!OSdSw`CW2Me>6+R50Uk)j`WFqk_Kk1bmShh)MlS0%ZyIF?2j57Ez4e)(zOe&Qgn_CXE z88WdX9d$8ME|35snOzvFiS=jPzYcZ3mgIjaw_oyqt|9*M8L9X?S^sH8`A4+TKKAD% z{NEP}fGX)o;kA;+u+qd{kj!}a z1UyBj#TSHaAS!BHj(A*#@54tIvI36bQXj7_FM2dR>*2Zwz^0f*9k zjcbb6JNBWF|C2)cFaG+Uk6&%zza%cMz^r7tf##(tHlj8g?|5jm;!pZ^G#*?PDd7Dw9KiHn>Lw8+5Aa}S5KhPSUm`J9=Ln#}gV;IpqDqitJK#bJt3G9ejDbQkgG z@v7ik#_oqA9zIP1Ts}N6(f<`}Kl50;ul~V~2gAe3;7-#856MJ_FT49sXI0dkPm2}D z=s=gNnEu%cx4YX8-2ie33{Bd0O!6aTZRX}qgE3^6zT{y_Fjz|&JD zPK)U*h9`v#1YhWGA?$EEGJVk_>TJH;5Za9CcXxM-3a3a!`}Aq6K`Baog`rzYX4=Ox z3BYb0>B&idm30%Lo4HxH?rzq*cgqwY>j9>#>X!11JTK8DoCffEy;MRol*0qFKrnjN z1fr2HP-pVm<4829u!}0Fkgm|KTT@l*efzY9z)_>pYz-S2MaeO-WI>7dmzRVNPmA>j zhW}i00AJ<*zat;ty$K)$j30zCe<2gVdmw(2KZG}Q`;1HBw+H(7?^W`D^*W3r60SLb zhcv+T!*c{xOiSUnzxw4*{_qdde&tcZNkLIn z8&&`>U?D020JxI^uUvX}ng|3S?P0c$aCO z_M|*TOGWE6b?%QOtfJ$=eI_%LcWd%{OE)Q}w*+W9(Rm&6f0Ur8s(}wtDpM?rESQv0 zV_xcsri+4gqNoF98a{E1k`e(_yk|lYJtX$=i!p%40BP91;JT>O~4%B{2G^ z2QJaH0VYtpH2Z&oteQ-{GR~_t;E> zT_x{Zp#M9#|K)ae)dsL%@SjBg@!7i})~ZGPKz7+@2Ad-XFv7nda{!ZIPPtioS~47G8hV>+9LjYSi3T6Lqs6%pi5I%)0 z0ZuV*TpB(v{NV*0cf(`E|9&peTR5V(T~}|dir5{tFMSM;!gj7_i>1`|(inf|B|6e2 z$AltYP%JxM0=olP2{Hz@E_3=L_apDVwpaEUFTDB{WZ^;Umf|QRmvTu7G0j+Yxex7s zc8pCXV61*cT%4JJXW!j*SC};h8SoQ&3-ihj@TAQ^y0}@Ly0dU2oTenLTl}3F*VE&r zb*C08;X=?!h|_61e`hF-BTFq#f$q`qK@m5*-EMA${=4{Pc=o0oAV9do;MO_{4Y+Hls?d8_CjS*?t8Vt-{C(RB5 zMn=-k%W|px|M2jiGY9Y&|Kz`Zf;9U2@f{onm#B^}3+{Y10jyu}@eF}HFaf;!dp~Ug zcryX;;|}`&Q0V_lQ6M`k@L=uwHc2`H`3kBp)MAsf~EJQO9Rk?VuvE~K14B< z{>w-lUo)O@AV?f3gy9IN+=DnM>rx|}=>NE%D$i#JQbeX^=1xOeR+z?I=M&*C!XR=v zWa;S*$Vv9Khlyz@GOq_^z^?P#u?09oG?Ijfm%k2hHFH+T50vzTU1Wt$4zT|7=s(_u z{`39!*_&21Jo|5W&*S0lYJ7D!TnrpDn#E5{-eUpbss_b2tif&nnjas+D6Hs2FjEDem zK##x9S5@mNsbFqVdakz{Xk%jY8%v6L4{j&n17&EqF0P(SpiQtl7J zhiHAWO|j_J45$^uIyft8r8KcT%=N{M;%K0SHp*2&qlhQMrF%haY!jFbc9D<}K4vFR zcQ*v1?``qg4-I5G)Fi_C(~%$)VXNDjA$Jf+yFU;87ijXG$L``^_>HrmD!rrFL0T z_EFpmmKXmvq`=STG(L0E9c|-;^Rno;NXly2e zK`#N>7#u%7xFk4DsH%;DUN}_axZru9I>Y$KIDZN~4-mhO?zE0e{zEs_z0q_9!KmCY#U0*%($E)Nnu=d{i&htyLdzp@$ z%5Hq(5#e5$XIYYeYNcG5fLcJ8iyWN)#W?d{Pv%gVg6 z_$(RUv;|x+0nhEJIM5|o(?NGi1o+I5pZqJtEz1DhJog)pk7(z0H#0N05bV><%EXmQ z_<{0gm7!b2)8!NCLP+@!To~2@XEqRvn|U|4e!Jaz@7}H7ZlouJ<3@Ughzi|>jS^2I z^-N*$3@=d3O}SGVwKexN6G*s!L_|8!1QMbbRi$~`)I`)p+_AL`0s>mgdU91YK)Oj% zATCmziir2zBM$O^9D=+ahX1@9(fXtR>>r89U;N|$<}=SRzvCbHlD)F;dp_qBpq&Ze z8R+P>i|RWx0lf3$-6nw70OarA1hBp3>3+|+{|7?6p&zp9CC)|GcWByL(7E z@pdv3Q%J!t|Ha?@oxl5cr8ObxB$)VGY^~XHFHmG5H{lQrod6T;njq*X!CWBh>4wx& z><-~!ttq8@)x}I1fyg2WqGe9PE~FR|)8BLwl)!)DZk2T~&nj!>KxS{`mOBGlrp}Rj z@uMv0e`$%U1{qT&mt_UANB3oinP8v%bJ6;H7yWK}+6irBNDovp(PTiKE6=aD9MRaSS%|pwz10j{>#3xlT`^+bqA#|(Z zL7e5q$=0zE*<0#ucWw1?;HTH^!;900hSH)An@O*`vII|e~#$?UJ7u8{?}A= z;G=Q>4;q&)3ufNH3Y@|B86febQ2?KRmVC+$`aTXo7KLfTmDL!VA#JIU;_!d#nb>xupwji{DVuVUmH(PMP1MuAudDH4l+F`QL=?z!fAW;)QL1XzCg z*MBp**iYyv-!y354+7dHR~}H^=V^cy{Xb*9@Am<4#T_U!WlAPg7ZQXJ$z~lWD4yz~ zY<>m=4j<8_szRqU&Fx=f2McpYmKzB?Y#%zRmgr8x8^tr#R2zMoB176pX&~c*qNN ztTvR2{V7a;iFX^~|6R82I2!|UPWr(8r-spAT>wLX>*4__xO1fTC-NRk8|N-EijLC| zLz-Do0Pbeit#`NX?#N-CK0AKhMNzr@RnWpZ21c1numcVt;D7I(iT+!^b-#7*{dT)q zzs0Mw3Cz5ii@UqI`L=D=J5;NiS470RMdr`&=){rU-Kr)>ES7n55vn%PK9asH{L_y1 zX>+^jwrLk_r1|z~^9n1lC?QLxLE=@STj+?})>i5F$o=28?GpX}a4_>LeE+-0SG=k_ z$))373eYeCycK|Y!ip0^^l|>Z`nL%jg-Oidh0IxZzKg}jbv&c zb9WRf2Z*nu*>aqpCyy|n2&$TMfh0uZsZ~`YMlO(4L2wSXnRi@?8j2B~s3oQys@VOR z2McphzqwXBf^gAG>Sz_HU%6DCL)V`@16Zv9E7X61{=W$#;79JtPjo@OOVs}c_~va6 z0^AuscjN@`Fafe;JFH0s+%o~($^MVIKo>N?umap6*vVlmnV9W(#>+RBPN(!TU`o=s zNQ@>ckcV*OR_jznX0;0iXd)i=_C^{U5KR@hdnm#sfLsj@05D^K9wG9Kc$Q41SJlK( zk%2?9Xgn)1I$&_el)Fi*=Ls|!ST$yxmxN*(T8e%wjF}24t+hN-qhNTHB0pZc7BH>E z03fqRx6se{WK_|jk_JR}o=RM9{Y;fYn5Jq$3o=qr$t|N$M6$YU_7wm#06*K2F?3!W zg2#Adr%M17nMe^(uxjd5J)!d~-qqPTDRU6j?4$tF& z{K3MkeWr@II5o4VAb=}{p5&QQ)|l*36rb2%-9$w*EQ<_hc|-VB!U+zDid!Vvj6?-u zYVzY6-Gp=vk4#R>pH#hWooZJWA*EHaQ@)bv!^o|yLBdOs{m&wy-d`Ffpv%?)%(N&3 zbESEQ=boidh^lIY4zBF zDV0)7n1my)7Sy>3)Xkfn_Gu^Lssor<7?&E+3FZs)bQh~>9A}qfgN}T63fOC-sYhUW zyxcwL0J^)GyPb0X-+aEi8w7O5Ua>2K{Tw$yKF&w@05D0Hy8QATRFTr*A{-m6g}RY& zcNb{e=+>B26y0ZNVMrSq9n|j8`ar0_1gdIYeZFR0(L9XAPGeVX(p_56JVa|Wm#T`P zIRR~LXq#JWPFF6!PX_j>yJyUYlj72)c;z~ZlIQZ;`-uN#`RyaPpXYB8dH)6XDoSzj zw0Q>NPquZr@_XT&4#bNK>oV@2=a=Df-9FdQM7b<(NgDPoe)s z7mT&SrE>ps^^3$HdX@on*EY5rxS6Voin}+!OZ*YNz8UtDl?-m(BiWb{`;#1l_uH*o zw|?ulo4vfaMf?}sx?AJ?RcO7p?Gv4%77ri%w^^J{!`?=LIE`etTeg76q<+j?2g9PO z5ObY?>}HvxR9Bl~N2-Mg!RpZwUqLjT_n^#8U;JQW>rH-^w?AFFkaQ{H`Y-jni)Px>Bm4@$rU;D4D`Qn zrxg1~6>&8tuVUyC^|J^av6Ls=L;rCtQIz*cbv~0p;4UY8~86bd&0mW{zREQVK zuA#@7LC#YCq^#A2&?N#|lASF-Q|hoIo-BWKO0$#PSR4!^zHD6suo%YU4XsIU+C-M5 zS5bvmd<3N8H4q8Ix%PU-3MUjd3@c@X*d69-ERjq|mP-53a$hYuQ!%h1YJr<(AO_RB zl`&JnRa9NNFlsidC)v5Oy(6khAnWTN`mwN0gm^yFIx2EiTcfAaACgvU7ESF*o8iWcz<}l<6CC4ow??~0n7@3eHPG;1CX@? z;JBtt{(I(CKsh(X5&VT+oxpDQk1Q3-2QM~o*7nAJCN3GAlRDg`306JwpzDepxO~+V z(`gXRZL;>L5i(P6ce+KB*!JqCqD4_jJ;6$0%N(>qrDRRgi(V1ZDs*$aF9~;v(@A;x z&A0XWcjh_X6NKEIL_Ww3Aa|q~@9_bQe$>&Zt97V=(5X@O4pXW$iX+0lqY)q##;S4D z34lNLSqBtKSmY&&QlWHj3Kyk#*u$6wpmCHzgg~XM65`^ZD3zXG0f|3FVz-HJ4HOjw zW$sXvmr|R$r^A_~c&8{s$32{JxlzLDiiL=}M*P=Q8=jB27u5hfTn-Q7`1#1e#Agfu z7iARtJRa^PYF7_)Z#V+({bU>og)_OZz7mIhfLAjRh9!6xufK}`!pPcL$bg~MA8NTL z^HvYfYEBtTA3(OR6rdjsDWy!>(-p%sz>z(<_yUJ6g@Q-#>tf`{a2-$Qil-GoBFzU* zueh@;9h@ivI4ZfwfZ*NStb2Fsx8BX&t#^uB7j4bW>tsu_sD&RyY4~(PjTB~sn1*OZ zccYmAcDtEbe|fpR-1@gKw_ESGTkoCb5qzwGdv`N;ry%+0q?TPxN7 zPX2%YAogB>YyUmwBJxN7@qhUjKmYH(;^x0I{J`&u3E;I9p!>pwFJ}UH_04(01h9Qa zc=vY?xPJun|FIcOZ-xH3++|mQ=zD2^)j&W}@XNpc>woF*{XK0On>4dr4elfSZYYy= z7?Er6&-4gMG1Gn=$KKYTxKLs}+1xAZmyST~qzXz<7GQ_WnBzsy7{bY>5K&J=F2tX+ zJagIqD(#0Ex{|{hlq29}ln!9>8C;*IWOP}<{zKYZut<|7E(U_}f?x;u@6eMc(f^MI z{oeqY;N9Q(w%8zi77FqJNx`vei+f+K>=P1}$C%=s6BEG6PwjGniUwF^l9eSq|CxLy0uzd!gEujNfL$e8j7|p zQp+L_IB!wSiOZM!tl*f!q%=?SBhGaeE^4M4h1@%^A&kb30K62L1r#X1=qZLJlUqhY zi_9E-qyTittA_w{Nu^?$z!H_tAb|3E0M&5D;uR)@Bjo|86~&{Nx6*yaC5>6<5QnlB zZyHPG9!zPB90(UzP#821;eS))SO--V6OZ(#yccHCZUAFZ{E(IJ?wnMy7UDM2nbQ7T zue!66>14Dw7on_l2U=u+WI=*6H2jsp!N%+%&fC_q6*;^tBmQ>E`QbWBd^M-B(M+!+ zJSU~@fC>$|wF)E`anMnucGLi9LtQPRk^Y~tKZX7SEpa47C=jmle@?MK2fhC}^#3~c zN0ut!gYbXsRSWumD7M*i0QJcHB2 zr<6ZCfHdz;`fq;ui$Rp^X4og_fCpaC%eWI<&OcAn0Dt^H{Q09N^C5izSg=y0;925(P_RfKc2xtfJvD z5EYs`)0H4m3Kjp{&5bm7ceif6+wEq(d++_$h16}cuI-Zx#m(Kt-5c4>T5C}=P>BU% z9z|F*XH*W1s$ourSJsBl!A@1Qsl#DS!zc{W*$4+WQOO<R&cw-v!oA`+(`09YCK=sr*iZht9u7iq zI)Zi((@sYAhtIkc6P&sG6RpTfC9a*rGi+zXD|p@{QNS3|$OQq(BMb*~P$AEPQtxX1 zVX7%~d5sPM2MJN7GBpF(CqS!9Tfh*L)>yo+6ut^p-tz#jEsFg3RSa*04<5_`INVM+ zKjw3^!bfclJU+VxYo8LB%L!q;{bwfN!Vs{d0ZJx0bIxTH01O(ILz9``;>PY02VsI598^yB?I1&*A4UHm3pqU88glH6Z0O7F} zrDO>Jq-n^`v-4I!h&HE3y|EI4Mj^CNfhgT=vkkk_agy?j6bNn8K_J>xGe@OW0JLai zwS-B(UbGa5QV^900XHugdQH^2#?H7?!K?>g(t1YkZY_-r=0h`>Ml-4f%9X9uRMAf@ z_B@(ncUb3?s-{Q^8Bc^li4yeB*=e~-1LLR@e}>$relXFTtaPr<=$sNE;&hD_v~CIv z(OQPIs;ZYSAyc=b-H>4|VW!`!d#v3JZXWA1HxaX%IYYoH?pFsI)>|bxOe*qi%t;i9 z_=$+NNN3J3&VGd?c7g@)mi^D7Bt+@-m~az*qv)1VwIbS*P{~fmB(Aq0J|rS~D(WAU z2>wqLz$sg3G^tzVbp`v^THf3(JYq1%wqexy5~`}<7;r!Y8+4%m_5bth&*}dQ;;*u! z0pvRL|CH^sulzlr|JavR%TD-z3H={pgn`#^e>{r+#~0ogt{!z){_^OH@e1Jj3KQ^l z)c!rc9UgK3G72_c;Q(r3AZ1T%kA-w~whcU8Yj0zA>dG#HKmV+y@?KU14zx_8Llvae zvKW>&E-ftiBVvz}h@~TDhQBtrb9x1gBcsx@Ft~~w=XK8^;f#vaE}J~*@_nk4Zazz zck6COH}{)`IY32x3sV6D?{=EnoUA=tg@t_<3Wp;h>;Umevu?MW-MZbZ_k{zn9y^^W z=)V^Xgj*+@^{(4yV(N7?@GN(V=gbnUq)LZrDT|Vi^aRH^;lfWFj8qYUwa{gCh04InlG+Q^cu6IC53F}>4LZ6P;pPpRS*d5<=(FVikD&jr9Kdho$7Kr8^3P93 z9iH!J!|YO92O|0M>)-t3 zr+*M)7B@D@J~x-h_5rOhwN)55OX1)V#$TDnGxJAqCoxk1SJ8id*#-Z7--1W$&;{U+2YUqG_B8oq+2T1hV*d;9c)Y(L11_0>qak3W0XTI& z^RH{cqEwqkaRA)c0;fTCp4rcKf&BnIK>w8t2+^cUSOGlBZkfkX5|KZi7J{uyy++qA%R>L~f0Vt>v1o}!y3 z{u5ZMGt%}|@;gO#g$tUM9~n~W1rde#F2VE}^dB5WRgO!B2OwWB6b4nhBbSRA zLG+9VY?{CLQr$|W#utKOC1q{u^ycF6E2&BZ>G;_G6zL==!9JbS_+AytE8rvJMW<`q zDMm3SXQY_aJ!zDnNRSEOqe!M)0M3f{aj3NLw@rr{Ax>=}8Ey6IwdM3ifuiZ~hsjb? zQwmLdN=8Rp+{jV&EG_8j8m+6JK!-s@v}tQq;T#Ttc0~W<1{mL{#V0AUdK&j)f2tqh zBJ_V>=X*c&UyfVV$^^*jAUWduz@Z`d0t8=a)ay=w=k^7>Hhu7!Z{uB{ej$n<)&{(T z5BLuBPfyKA*BrnAjmXJ34-|iHQiDr~rt!)v%MiNJ9LtsF&iuenqhPE;1IGhq<;75z$#>i5uumjj^)WC8&^;-$imVO zb{K=FkP&T$xv0j&rS}O2S7lv zoJmMP)vf0(3RO6xWJp957rhc***zY08xh4rQp`-n!>Z-oBE>OvMM!l&Mm#SN-M>-# zOLy;`?xcnM-z(E6&#ARmW@F0MFv_fA5*hA*5aPQ9G*35oaqHf@nf2byZXT@wX8m@H zL!ba{YoztwKg9!f!v--^hp83`Tv@DX9FD_r&;TCBpzO-Zi`-Nr2~+ge9nh@-BHero zt*=uWyD6zkXcR1ZMGc613`zjt@W?JB36{}VHC|9su+jjZ1$jLM{eR^Ees?|&L65KE z?hP=$T2lHW=St*@H2Quy6TtS{1pWW0CI63Kz%vIR4`_hbehjf5)hNWbzx>;u{NeA9 zh-a>7bp5d4`co7;r#GArSp#QCA?IkYoQOc^_ah=a6(X6Qad3_X=mcGbjRjR`wER+1 zk{=pMXUNE)8i*IpIQ2ewwuX!hb!$y5KfoG>wq3}lR|l?fhF+^h!fm|JRZ_@o7*vvxnGCv2WoHE6vWrl&$=i)8 z&0(nCfF?TH^NPucZU8W@^ZdWKa~r_A8wG*Gy0bxL3jjWjw2r~Y&34g1fVKQTiSJ89 z{R*%xziR_p&f-mm(_w^`K}6j01&g6O;|K#oAFYq6YR_8Ne2Gb@;&h!Z8R)q%?boO% z0dC<5i096cZxaA<2|_DkH3g_?=BLPQUEJXWjAM*&m>!UC1@{VLsOqK9bdqk$_k(V^8H7r{}@-L!3y-b^mlrfu>w zqw57b4$Z`$R<^bV5rm5&qJEIwZmQZC<8_z=TEo=-H_Q%zxVnZFV80<| z8O|8%$>p^yZ-7S!l+J;h#pHx+3e~BgjNfoB3nY}MN=XOV0QzQZZfJ5VmBO)p;A2? zr(Qj`f6OxT*rIb0_bhiIk!o2NasT#Lf4iu%PmIzVuclYg|F_Wq%YpSD{_N+6+2=70 zAg}rWcCBYSsC0D!;COBusAg3T1#fCBYR4kXABx^B-VhH-ZJaTh(mWSr3P2ZkCjhi2 zV)U38sL>gK@-NddMl^|RI~|GU0S5=(AGH$>&*(s?1Zxoas5A|qUr|q(_L!v9Am@BC z-kCnR&-UMI`B#*G{mjl8z~grvae2OW^-y>|+@F$#xOUv~iHrF%dTv$MKZPf8>H0dn zns~hjW|isWkvQhbNhS^&U<~gZsABp(m!<^ViIB@lO` z(Vgbq%rp3>cXp#2t(&>%#%L2Tw{8HS&AVY%XH^40)T$>lAreKx=5%vs?`GZT?&kgF z#cn&5gLKw#F9VL;SK@E4J-#qrRUBI=#0 zE$Y`(jqVi8i4eu5t}+I_(G>vf@^li6DWT|4nFd@w zXaJ17?T`EOU8sbW82ND!pwHm`xP#B*{+GS_u;vV_qp-Qxq7VfD5%WJc5nVeNszw-9 zl^_Z&t$+L?+P1oVE0+w=3Id9_c2-%rkDP?Oc(jIwtQ=vODn`j0XK&od`m_j7i-a4? zlC#u}rn5m*HD7I)2B1w+D(TG~iZtpetJyeTF07S&TFbaL2w|QA#mGBSf>fbp%2K@c zl^^8!yDDfIH3G(9S`D35uPmOC-Y(SmM0TAef;MMYvEVs0v{teyirlH#Curm*Cx@G` ze-bS5wt90BHr+_is^M_TjLRUPz-)b|0NN14VPr(1HmS&43bHETNZquEJ5+gqN{c@> zZOVu(ijo0snyUYnfPP#^)fGIg07uEc4%Ge_`u};Azx%Z1i&lU=1hb>KPb}|gPq>Kq zc?|5ob(6%ygBI`ZB0N6=FDMM2AL0QS@PlUpE;)dSKq6~Thq-N`^Jb+@q{3C~;)K65 z$|nqHb5UCZe>mpNaiELW+6M?)kr0GY)unLCn~?(83g_7`4uYzGPb+Gm!+b} zj&O>qep!$ssz1A7GJrI@QK=eD7g2r`-53!81;8QV z8bIx!w(`X!m%vcU#4veU@w@oX4ulhoj0_iMO%0dzO!I+FK<7h;TP!t4_5yFRGqK9UgGu~XPqe(a63tHXnADpv48|CWewm@GBgmQ@ z8iEk<3~hnx(*4UhYLU_sHAoSHs%9_lY5>l5-l5A@FLgI&6nkJnA(GWSNiWDHD}n5> zsbt-y%utJElMgNS;II#H2+3=*nT0EzkFjQM~5le6Ywe1xDmKh*{ z!)Nm|;Vq*cq*nPxNC|#dgfRArX*f|)T0F6BbTCxDQnDaX%$t``1vNyUjpiMjS#{wp z$Z5Q3LSZqYhV-~ao$r>>|A1;^Qwlb1v*1^!>c7zc*jNte|NLtq_NN|TIamH-ZaW9` zf2ZqTDg*||vir;l`acAO9135ap>gr>Px5~G&fN^SE3D;hOu&<5z{s-t!O{R{4q$9E zV;vn8yTd<(nS>L8`Xzs6#_P}9o=LYB^@-Vt1L0cD0z`9wL`Ux61d2JJXC24_k5!zt ztU-$$C6kDrm8@`0Bc5txJS=@MSXqyVq4b;qO?+1=Ke+lVM^;IDK(1JsS+t07wV2jK zVWD78e!#2v@)!U7uegUt*KUOO&KGZH5?=j@_qu$1s2866ITIi1RT(`sBC%(TB0bIj>c8UKS zf0_R}N-CCG0p8^sF41%xgM7IEdR$!{e6k=Nhm8h1K7jk}>AlFz)%}2_Fm6QcQ&u)~ zp#fydDMo3^N`2w!n{hRwkEL-m3Sbf}bBb9ElVJ(n-&~&ObkI^TFAhXG7z9lLbrHI^ z*32W=Ki1yhLJ4B{oy<&P{fau15Ts;cKXc$9!-YfA2(-ZHoyH2>H#1{*x9aM>nVE&a zPh9A3y>Fj3catvK=$_?I+0APnO)jyT3dAe@UtDO`d(UFw-rYLmC%U_Nse>>b9?a@1 zzunMUJqdaQj!8;P@s#VK|JI-US^V`Y6Y$&l z@j)hl2VeBW`u!#oz!$=6ztoZbZVJ#-o8(;+!1je+hA)e`|L#HmCk|i&j`CE?+e0@l z1>m>8`ql6M^rzvRYr!PTP@n7%Te@PBH3x>yCG<85kl`U*&v{iToX^#TSq-PiKChJj z*Ut*b5KDVu3hHasDI>Y0BtJ`ehgYEbE;9ppF9#;KaIXDAG0{pQ|ZwE9SYJs^kg%fecN1X+e6x(qCxtnOA z69uorQvDc{N}M%4+&*w|mCeOM3n^wUl&0Zs3&u~JfH<3m-pwB>= zGHywcsZ_~uCR-2!ZCa}Tm7WyM-1bUb3B-0duMeUL1}TD3?JK2`3^Nu7f<<>1W6m;8 zA-#8t@v3+0W;8;fs@i)~Z3;z$`W8Pyp-R;#U7#N7!GV-(H#ftqRrcG~6M+`2>Sz#Q2BxRy| z$fSpX>W!Ng1X{VdN75~J(C?^(K{D7BsDqj@caR{40)5hO!WGb|V;9q?Xja_>+EfXM zHffRjAE9zu@OY`mo3Q_P zt@&~dnc+I7gIdcG$C=h_=vMeJMpk;!JjI^@~ z%-NMt@qi(gZ)ikiB&Ozr&K_>1dPY-L&%?Bb*zYoqa`woNGhclfBXD7C<(bOjl9CXQ zOh}LP_=TnoZL1c28!LIO`D;y!MAc(?Ad=?r2u-UD4Yy!+JLOso&DZV$KAe2`o-678 z{l=59`RX6f*ZPGIfcG3Zm%SU@AJ2Te?Fhy`!a<7}PD)uR=18wF0noq<0F0$mjShv1 zrtw*6CQ5Pl0jsvwhTQ}r4a#_X%U-9LHKBmG=$J_gLk+Po(KOTxbe4fIQ&D|jkgQrW zV~f_DF?rn4;}5KVQUg0!e}ewQ3n0UsvVi^vO5nO-SorwLy92&d^~WO-J|8Ufvr6bu zIq+38&HY93Fil@)UrZ6+-T{!7-y;oB4PO{w{nEuJr&^6CA&hY(S;-Pi#s7}^!0{kg zZ#ma9r>a|2S%l9O5(F3^s@(_tKkr{5J)O36N@kL+?=oo@K>pNvrz=F)kpaFYyEn04OGwZyH((VpNmHW~iZD1$6by zO*V08Q;#f7gEWW0-LhfKKs97w?Bb*ngCu;0s1~n0NXoWw(l4E|A7Sk z^D`ccA9dxDXH@$w55kE^i@0?&LsO@~JadN;`IZdLYn|jE!(4{7@lGork6GSWYDDHx zsQK-)C779@tcBpSdel_&D<^ca2oj5vP*pBT{WW*ycV%Y948LA_9}%I<)R{MmCDgI{ zhnIpWj!f}&DqcorWG!$&qL}%)qw0;E0ZM`kQ6!#Tuy}n|K0OpZVDY~%+kEbaJcal? z_h@+H-oo3y7yB{eY!SeHJ^;jy30U5X(d4_*J6!t(Ft=4!#LF@t$czI@423fi`CctB znY|e+A0dUf_>Kc0=t%~kNmRQg0pV3y0*WoGisSJqKTen!tz1-|oYtZy+& ztQ|f8^#t6fTy0I5-Nm4nQeK;yOVcUD&c&g%F!MK2DSl$1`Nk5nToX|tIkJlC`ml=k zafxY)-6Ha*rh0dCbNAleoYuQJLnhwZwl()n1=OwCEg+IW|FN||m_^aLaf^bnSqzYJ z{R#I|hI;~qxaFUGVCzlP=>k$Enw7zxRVd<6NQALMBsiLSe>BpJ@)fq^c9D~hN3~g{ zjaO7rd@U*Nt+iRMEs)rQFnS<_3DK0G*j=62e_!}}iQ>PyS+`wy3hs^^PhC3XJ7$Du?yf)n+0TzEggdj+JsLpPM$}kF zUX27^9%CUjW+YIGgEER!hQ$P+cvy|8;;u?JphBNWX_`@lv7)NND8fyfMf*{d$1ux# z8D%+nM>wRFoPe1eN($6PK!>*I6%KpAQ1W{>0it;|&x^344F>v&#VIMTdhuceOOn5!L zlu4J935dTgO#tyV)nqk8LT4(=qUbx5A9!V>IXpElCUiCo6T5F62Gg`F)hnFAYSe=0 zgOyB&eHIaU(f?7T!KE)6nL+6h>u*&7Afc&eVe4*Wd068O>Z4sI{H)!`K<6zBd%JnR z(F~Rm{!JCWxtaS-U93af^bY}KIevmofWpnAnpm8X|3kN68?5&z2FNd1hOrvpVoi2q z4j)sgW1fmZh?}dz%(JS4UfDZ?u%x|HX>d1Q@(t?mMLWRd z&=F^WmtXy=wVw)<$~sBsgcp05Mi4b+`eA6M?rR(!XRULM!apdNFonxu4;Zqst*=t9~=YqDlAflud)I&mZKxq zeuCv#g@Ln{XcmkkQ*ON#(}>~3E3q^7Q};8#_j5H_OM&dWnSj@z|F37_LIP(E}ZtV^qut4vL#;>_r2O40+xN@c|ER?_i_t);N(TbeCI_HG8bqt+E{^IhY;oX4YmuN!aZwQvMnR+d;3`z;Efae*RMH`dDa(tB z2-2P3Eop|sZ4c%PBjo(o_yH<|^!gY)sdWrw0n+(+~8q8&SaWw3lnYnskKe@(-xDAwuos;pA#_0 zU)gS2c6 zwFx7EKbQn%k~bNDsxFiI9m%%@T8vWS8OJXkaXoC(M8w5K+N9x@QuaZ%)ukH&&`BuN z+mG72qOpc0+n4H)*%VNqEk(Xf05$~`TT66)qW?4hXXgBz(f>69XzY@&SNBa%^; z64GC)c61C9u z_uUSBh$C=SS#Yre$l=5_qIpnt)=~Eb6}oBDNcdI}H`A>#(h<=}5C0(P#6}XzrT!r# zN|{+VZPUXIn%Jt7!Iy(06iee^;RB{KPXIB3WJb#SRO|1B+`E|mb=F(d{X1#@A<(~M z(i8NT66oLQ1CZ-HDSpN^b^hA}isL*_j2(H*GdM$MsKNx#R3E@-cG?dBms7~q*1#z`!WAEO?plk*Z^A%v;vnTiC0^p1^I}gyQBZkVeMr7CO#cRqi#je+=}0K>t4z8~Zo^gFj7g-SYAO z{vZF#SD^j-`uHdlz~|!NKLQiLomb)es{+3FvAy}e{LW!_|BRRH2O|0Z60Fefz`(zEi2#i!d4rwixD&1Yl;VN1TX=PZji44|o)KJPZ=#iif(ALaMv_+er zo$914eutt2xYWa@Z?Lv@A*Jc!JeVmJ;8ms$o(nX1zkmBp>)l=G|I6e4p9265^#4w{ zGoHLZ&+5>FMF2-KV1~hudhHVpFv3{Zz|gU|mdbyMuIt6#R{|Uy2q|gY%@Iqc!ifVA zitelcamT1r0Jccg51%Pj+yu=Tplq-hN?7#OX33Vc(0iwnQ45H76F|{49mBqx-BjVL zBe*GUfe_5nLZCq#@E*1zi*@)r!y><4@vq&+pdUEgHIZlgRUtaQjdnwDJR8F1->6glIUvI1Pz(2)i51INd_RKwoM3Z zN`azfHMFW~ng9S*RT9XzN-O^ESo!-1{XbOxo(%zKSbzUlT+skK@$RuXV7FP|46oo- z&>!zy=N~TAcfXNOJ`V3N0gnv^EHg_k=Xn?!~9WNCb?B${mQALbSk(GnBp62Qz_xPixO5|5^p z?Wpq<8D(NLcZJ5SG$clcjtK7lFpn08JfAiEXDt9YCjO68#$X6!?G^Z}NgL0^{NJe= zIK$ntW0uIh@PFUpw$BKvUF$k3ts?&C;d4ANmX(}CARz#=4@^VhzXcp5DX}WQ3e?In!>O^&Re( zF9=8PFT>Vq-4f8}tYi1iz^2`+B_VYAZr-h0gPrDdqnY1sG^1H8$28^bmSMk;xH)oS zQc&o9)UbebdM1K;auVhMh(LG0=Dpv9wBG4aCd^ry5R-)hA-8uYK%<50%Pkinvq+p#KxN`&_{7;*|Xi?Zbb|55(Nx4gLRcB>(b- zi{37d+ON%!dt>ngz|wu|4iD1bMWr$5XU(r=wuk0V#h8yv{NfZyQy9faUGfnZ=>Q?E zPN!44I5L6~qZ+V3}S9NJK_ws)E_TG%SbLw?=G-8sllxI9~j* zm(=$7?1(dx`NgFq7>)}LmjDi!$@AzxpHkZ3L)Ia@75c{$pMKmHfTz~SSH6XB&i^@} zId|{gqd4b?<{X#+?4&@G1~?@G5wp>Ehu2S$(Aps^OQrBAy4~3VI3t*k9KiA$3=Tl4 zp;S~8lYQgJskUJ<%wIgp^vJ%T`jkTdLv-;L6g7ItZ800~YYmB*%eh z@(^trKPy20rp=|6saSsi6*OQ3-`G zTWa0>*8SG)+n3w7x7*9ht(#>JuzNSV^$x+dwXHRc*nibet$p+9(>LFI`n_+qZ?^5z z*0!b%Xbr!&ZQEuI8lU`TYrprYZLR5s4XMw{`62w>LLH3~)iV+KI1LGexqB2ut5O)z ztX_azI3r|4hvel5n6yxaxy(ruw6Ou%9FyU-ia!|djQ4?}H4#JzEYP&b zq>&UfyMN0oP@#Mi?tdHlfA9g^i~ZUA1NPr?&iuIp{htAUylJPn{f3bcCAN^iD(_)dw;@L7C*JZ$sEN>o^G?iciq^Y_YRGr??tP5z;6qa_c z$X5xwNwV-Ezzt{NV7}4}7fOaooC>`Hy+W-xJ8c9JCN7y4&M>$zf`Gc`vRvIv1Kyp< z`jZK{==eS5|Lo=bN3nl)QzwQv|4HOrD)5%U^9^f0&(qE;z7UG+aQqeAujBYtJwRQ2 z=NQ(5&}*02xR1R{e1BvBhT3CB@Kujt-UJAqfg7-Ez%Cd#9s!?G<4<(m3<~cdPe^{%_}J_ z0)#clSZ37~Nz%;CqPaKEyKa6n_D(a2lpa7}uApfbHs1t7Xs!B~p~Ur46d94{WGCIb zko|TeX=bym9?=S~n$rX$$0*LNU{Pi6WM&ElDLCB33Us;xbgMT$GRK+_QQ-k^P*;3{ zYHIdl>w$=hy9XeG1~)co76;#^Dq?gsHCp>5mc40k_e{$aWplVdn}`WP*RRYrOIo0P_CzfB2tV3L^gU|N8Ttz-ik zQ4fiIGY`~xMDXbPkgC|s0CJ|XzEV4)HZi(GrD@4}5pvwA{$i?qD?SkwtcZ1vNa4je z^hNS!{Cr(bghV-x>mO6Q8ZsZvryBtl@e&16xI{{_&XD7mE`b*7RY9HDM;&lAc5yUN zCd4>$Bp$x?&-!fnSscJyp?^I0x%VnS-xv__WXLg}A4KpPAAmCxaHIj2P@s!Mpq&+9 zk?J3@`-?cBef0m11K4l5@h9K4f>j(4hi^HbqJ~LbqAM5Dnnrz<%ZM`-DB(09i}Di8 z^c1yFC>l+?J``D?IGc!QLzU=O+wHz%c2rJ=a0VjUYN}DVCrXoY?iBbHAeBYM9QW*4h{q9uHcai$YDSpFBq;_8fu1%MXr#NyVnu2p>xO!I0Fr`;1=GohcNwV} zk`jJG#GNnQdbiuHzjXWd)^9iK<}cQN^V0w37r*}7U;pOiW;e5LX1%}MZnu})%gf8H zzj!*A$(ZM67HT|+SWflR_Dy_jpSG>FZQDMz_RTljPk-{wzx;>4|C4V%ebaRN)LvS9 z>04L znA#HgqeGaVB}X|2ov zs_vfbQQ-$UMr(OS01pNT;?Pg6#nuVIlkkAJ&@R z@yT5r&>{9`U-NtL2RtMEA0Zcap#N8Je|+|G|8V{1E87X5(M_M3fGa})&yW2&6L60P z_^d>rH=YgnMh;-6_N=X*)oZ!#RY#6MgvAGAw0nDH7B8+Hj*b<{Kn2b20Ll2|3BxOt z5sC(Nx2&$mY$?Z#J<{rO$3VRPfA-#`N46|W6I$Qe=f;gkMrK!wuA-UH-MXsgb9Vjpc(OBswDdY8Hl00IcmgOYSceO+188UsLP+DfsxD{&2{cy&q0*w{Bm8NqErLIF zS=@5&5M5epcJQ{qS8Iwa8gEL{R+k15SA-I!mbzH%wC5JrjN^U|^soPZ2>N&T;~V*M zd=_}ZQiLZiTYvKF|KR>A4OJW9btrW^vCNFL?( zw`BjLk7lLYhpnGG{8Y6JZ^aR1>)Y?A~b30?r4OO z8O`6Q%zT)P1#?MMKixoa$aQf&I=%^{2^>|u7$`wg@l1-3st+#*djiKm&v18^;8Pp6 zfKAUJia`G=Bc^CaM+2f2sESjE78?QD289qsLApV_kL+t1z{4*vPu_GV#Q6r!y=vzpH5 z(kN|?h#_j^M%8D4$dgq-oF3`h0tHC-O3|ouT0_JeiKN_Y+7wcwQ9>$hLA#C*S?9cf z9zA$Pt4T@SyifetC`~)e7aw;ONa$dTQtOfW`?|Qn4QTnpw6$t>hc*rFqb+R|Stpub zvHqH4NCeU}GOCgo$N@JeN}WLeaTfjGX84Tk{v%lbEDdm8_3o0;5P8fTu*dq3V*TZ0bMPZfz!0kARjdFPHk4trZ+?t7pI!($R<%+6v$vJb6m&7x zp7)zosA6vh2vb>?mCl*gsq~CWd1UqX6eH&Ji7@Y5F&V*M72v~)DVr?}94m}4+JIyH zXQLHWG&7?&KC~%ZFBY{?VkwrNq-H|2WP@a+ySTYlHBDf~?iMRZ^khc$ zZFsi}7dbT$%%6b^Gioe$dLw4N}})qDt7-h{22-f^;4ZzOF*|)!WiQ zmjL+JgOTxG!s^MAO?0)7jKHFh$cURe%~p4FanenSsK~yTzKP0rV{{}gNiyq#y;={_ z)6=bOX)bd%O}Nbk6l$YHjd-*MXk>{+&VqrA=!Mh-GK|-8kP>LK!$DiC&tjDW+p<`M z5gEdpYO6(NQ8*}KnWR!1l^VuX_;wjMy3w8r{jaO-_kd4U=J6>j&Z~iHfBc{R**Rk2 zxBt)g$PMh@;XnH?{^e^u_22xTfAOha^dFcB;HUAmyacfRAxQpT@n!Heo`|1zDmZtH zd-jE^(?}kmNRjLJ?>_tD^JvXgeG@9$1hoZ1xQaTnEKy`j*kP#3l8n#n>|EG1S%D6v zvGi5}l(5jb3E-&1TO0Mi+ZY7xmBrGJgNhNJGCCZ4xcDUK>#5BYYTuY4_t%=T;;g%r zL3!jaYcUh7L+ezO8A3Igea^s9Zli3@KK%+l3;jP2hu}%j|D~w?qqzTtpwDG^4<7ul zXI&OKQTcoNXtRyp-+wA|2f$-AKpu^8Yz0714Jw#qES|?!fD+Pe90Oha$eErPaXFkI zrk<`++BYE;p}nMvK-{Eh6sRW33Ah;*U=u<~S2W>j0!pIl>P=I#A8>Fb#Kb{qxODT> z#F4opy#^dLWzeICeB_jbm{hAeyn%*qJN+DuSki5D6@Zsv}SHJxF zkACshFTeWYmtTGH)fbUC zhzOBjEIL~~R)8$6p(IwcwIKKC`hV|GerF8PnOKtRuQdBd#@yA|f+N zMMLi&7Y$`W@1TEAn%biOx{Lam;(!XiA0X5*`u~9N{{;Gfl=<^0^pB^4{;$>pe}0C? zN#N*VGT`B0ADnLpc$^8~hGu_`6#(b-(N8>IvDd9%a(F8h5jNXUm4bz`Xg% zm*21)QH2_}AxeN5%j6`L-2#6T36MXEasdszUPS1KsG(Y3y(kIp$q7u9eA0>xeYRyi z4tnistW!3Bq6#IGcI=UEvSnrGOXZdRLyCLar!wx^J@T(_KYplYfTIkcmu~o9?I`i5 z|LU*ikLF<-py#XXddo5yrRNpu@q6W2Rm`b>klWVOITOF@<_kIC5m4+G^HkSV{xcHmL-- z{Oqc~eMDOYT<SA75(KtXx{%t&WC zKSj)4TeFq{$lCG{=+;pc4RIu$YzkFzwAPrsi>9kUn+jY^Rz_s1!=NfOS#&)dT5CdT zYbI<<%fKQPVGqHZC19M<{3k*G=kDg0%l|Kg;_%5*SpLy}@@MlqgYK8M-@GbA@X!9s zfB71S-s4~Y^gsU>yYKwlzy6CSPTY^00A333|0qlV&t@QAZUT78*Ukj6{G9glBZK~T zaPc!HjU&}F=B9cP5xMzz_0_L_71^Y!nuSm33VC?n2;iXg^C_1ZzQa2jTOn=zm?d%yBoQjF(tBei$ zKLC|nM?)x-!r?AVO8`+y+_~3*AAhK?j{eJ&(f`Mx|Htt9)6oCPwc|o~=-Gn*=UtpR z=>Np=<(ZP7fdBEEoT1f(fE3U(Qh=T6tA9toH3XmOgQi-bBw0daA-4uxjccVvLF zHj>0tl0D>BEw=e$6iuuL+G3jy?GjoU5!F=}9^jI@cT%or5JO8)lj)xgMb}9gm*Tb- z6-6Sp0q91-Ysmkbsta5I%AzU)>U0o6G~Gr#K$Yt`&Ft=AhkLueJKWyg-`pLpZtg$c z+`PZKdw+HF?&I}`j~{Puujy;4z=`ecdilEghL0BY zn^I)!SeSE1x(5l%lf7>x!YjKcMZ6biSTrRXb02-K;05WymW3CF=VExgo zES(JKwfDKGov!?yDG}&$D*#@S6m$Uxz-{g!H-`w0B_*Kzo+)Fo%`*ep98GR2Zm6 zeTAoySBw3Lz(7@H1UVt?h@v8{vCnTRWSYZ79E6L9mT3ye$~DeAUp>(KURKs2?7A_8 zZUWU*YH7U>N?LDlHrt0gWS=uba1!^IR8`2fD&TYh08e7?myemvFP#GPj{<*qjuJTW zGFbWeo=3y|s~d{@$VWNR51iSRU4oxbAjE7+Z9?c57=iB)5wtLddMd;?#{~s<*rRJz zb68_gUQQ{oc1GAkHr!8tsvh{H3NzmwEA#(IhBqB`q)3Ff_XlLAO=nh|rQLy8bbn<_ ziX)POBr}H?El(A)&t8|&ZBXv{SRd4scU=lSYX&@1e+01A^2qPbb*(3fl5qsX0SMf+ zwf?R$b4emDI9y@yMI%NTcbmanH&|F-psvs3y3H4MesVJhP*;Sh^Vqo-7snB5R z&~@dqxUGuClLQyKh*MjW*oUh_piR4Ej8kFoGob&}{y(-TVGdvTWB?zZ4Upi;tEsm3 zkN@<)ec%CYX}j;d`TXtpX=~3z#y`c^Kl$hX;w5~*4oBTaoISK(eINzsd%G4tlCPJf z0PVh(pP~OB5cGd>j^b&P>=Rv9+#dYqZmHX=tIxmwg%}Jbs!&EMcv9SwD2ZrQZH>*8 zj*-YIG}h}U6U;y-nu0Rh?&y@(dmGWk5E!urC8HQ>#mYAk3VN47Q3zcDF{K6dFp1dK zrNpuyA)>UP&Vp0()(nemgOg@1yUe*G8xlAHcwqNfCz}ImgpXt)6*3Gq z0sk_i&PjFgtOc&Zj^F@7!yK9Ip~i^-XV1ji2CgFR0F@wJ8w(dsNJu-FPRb&U*uY{c zG{#=L2!W7OX}FsM?uqk~3uOUB8LDy-P(A4baYhkuD*+!xAdL(bLt7jfBIiBJBtxdk zfoqjhC?j72lbU=7ncJT6?ormND%utipsf=^)=fuwfS<}ToiwxCyTkoqy}mnK-`!u` z+`s#H^Zw(_`|F$cS2rI%UR~c@+u;sis~!Q&J6(=)y63HQ{m#;SefQT_>;3)R&CTuA z%~#i7eew0(=fAvPzy9iTFUagI1R`(VL<#PgK6J8Fi3&VPpb2JIp`oe9$t^Mr!YH0_ zxl05cfNtG|tt#SPZA%rpAE|PMxmLqUq1XyIqBsIxo-HJHzR7*>^KA+B@|8kB^=Opq zyR33^6Zvt}VumJZ0#8kTbVTRmA8@}2v`LHlne6zL)}Y}g0V$$NLDRYW7wBVbSOIo@ zzXQ|9h837%f3|S{5e+a2|GPEq1p5Dw@E<4nUYwo(e+;v_oX+=uz!0!&g1?keIHCbg zS^*y50A3&$I>7-vw03V^Mwh&Y^#@xkO$SrDxox0tJ$OYlr52$tC5Hhe=4bCN(kSIf z!E6JdLOuNrdBvz z0q--eC%~3e_XuJs#LQ{t(EyxC)RFolA@ry2`JcLRyo?6;(|`3>o0HgOG(dW~W^dmZ z0_D6lkyf2pexjgakN)qve~-lP8|->!AI8aqxqy+0StjP}Nor?2AXGDxBxAT`s$9xy zfe2m+BC2=1))ugO!XTu3mx*T!P~I=Xde=@WN;QBKeCJ)^*p7@%?*9h*&!3hF;B3^- z<~t-edjEm@b9(~cU(`!EfCnJFb0&aexPMm?eB75EceA-FkPTSa{8oBKB|@Gi)l8m4 zwO34qIYg0{Zl}$6n;-+Ys{-2c?o?Zb;h@V&yUS?|?U$S%=Mso-iFtZGMBpIqH zbu0^=`X+7_0|`?sjZVU$%4ikSw#uQg86@|V5MN2ME#hntr@rB89-oA^@I1@XWIeRD zc+|Jiqr^-A8kl9~+U-YAh5k3_|8wR4Pn{v~Bf*1pX+K_YdB+F5kP>({ynl%a;4uyU z&nAF#_t7u`EHAt#zf0)lrf^vG0jt%77o*c`k~?P8vx2i3yBR?kbyzH<|ZVTQFM1Iprqcl8@}N6B^Eg z=#QiSPlx{T6iokN3gOAP|10hZc-cigjTt>c0~{p+owNc>NyekYaQg?Q&||@Vr9kDI zAFpn`3;+|`SI?$Y3W*SM(&?Hum?jZL8Goxa7$F{jkBd zQ+LF9aRx6`0_4x=8}0K?oZwsFvmz8FutXe84`AV-SGAHrNwI_7t#-ez*Z1r7?cx3P z&AX4c-@LnecXj>#m zrT-r#{?Ez&yMONce&_t32Z{kE)P5qg9?ty1B@5AI6Za>d-f*p z`iWM6hd6*u5D=aY`QqYJ*(Q;$2v*PLIafOC;JKW({m9anr_p6 zc-+V;o1WZ#LoB(4etY20Hg-Sp_X)kt1=^>YfS{x`1;^ca87YFAyAhDpWE~7vtA--2 z-WPg4ZMVvqPkS$cin~o0Fk^zUCe5?ywS-VES{7#Ktl45!Odmt}dnSNKhJe#Fz)9SH zyOr3d|6Ep5cW$KdB;0=%@#mvHfEoZQB1Q^~-gI2GD)Xob#TCO~t>; zW(t8Lih?9hzksiyTk}|CouUmS;LffjV;{^KmAri|9vPMW-T0WXdP2VsLy1%XW}2jY z%@5SX`U>t=q=+ZmRAgi~EX7-lf?W%l|A>gm@so0;s`X+I&<{*~I;yaDZ$~&=bOm(b ze97)96f0$Zn8_rqVA--8GbDm707z4cc*X>Yq7nrJQ13CM5r&ijq(UUC!Kfs#Rh&ZS zYL#yQg@PWTU*SU%i+j1OyKd2BKzgu%Ze<+_C+leNCfz+onOW(Fpo`F4MWiiuIH)`6 zs*9-W8s!a$Oh{0vv5^kbvq9A;P*+hQRVlJi)}_U2*`VsSMs_P3CHvCIrp+Nu1iE5X z4V#=xwZ8Qk`x5A1jvsIg#5sSDJ;tIIBI20{bj{zu%P%6l~%L-zvrM0=% zP*}zbRz{R`$1+B!H8j+sjK0Y*^yS2|5kF3Vd~Lu~dX-ax>~j&olpZwB{iVR}5^bSq z6Ef1G+nmHZ&=O3d|0!%C2W*u82HO$at7$33@d-*sHznot1j{FW>W`rCIPvcX)PD~E zJkMz z9IC1shNp<3fwnwn6b-St1Tz&iDuAhx_|= zT|JL{s*0upwn#HPR9fWOU|fY5XCL z89=2?Gv&LfNQv??z$zlSTWRWoA%Z|6)gx#Cjf}d6v0%_On_a|N8T=xO*28eel_Gio zK=2>^&ym#Bc}b2C##v4Uks+l3pg|QBtRKa{G453*Q-gv;*3II$bpXi3Gj-Mf^kCTw z|1rb*n`oe2;{PiN|MBEm{Ygv7lXqG;)!K65tbPW*m&Y3d=7r@l8er4-$jdo^%XgEw z=xROk0c|pMlKm?fG4$uyjG@iI!9Xpt}p$-Dg`V`o;mUgZ_6w{~qffg~4@BJI4JfJ8Ffm zdOkjr=6?e8=OYj6KMmnR|J5d9&V~%8pLtq3E8jmTK=uTgP`){b++KqEiJYIhuj`Wy zzfnI=b}71=BlO{^gV~g#Td7mV!X0PWOzg=Ql7Avv0s1gZn10&D`NKg!jQm)AB?+xF@e=(T~n)_G__>y~m*cJ^KFw z`9Gc_=|6t#vkCy7^E<}{05AM9v-2rHKQcbxZ~po(U$iZMknH(`HUWIfuWkZZz5~qt zXXyV^K>wfQRSo$tMdaPz{pOGU@xQMMH*3-&5i{<)P;cgTXHW={x**l&sZ#;dCX6`u zSOW*a_HYR=iDD4^ld5sGEvt+1taR zS;_w6HB2jE%1j&?-N1pu;zWFR-!Be%_5&xsr^4*G1pR+7mf;lI{xsZQUP{O>KIyDv-o-8v-5(`lsN}BJ-Z(t+TM9(g0$)?6-Jno)!2%@^iLQbE zN5%_#s%uoT)f+MQ)p>VVZ|~QS*LS~vfA!mMKmPr@5AQ#GxVya}54vS4Pl6jcDzWba zz_~>M69_QhaUD8~4?f99xAo@g-Tmi%uwg&)h^}v;fzy#fc zQxO;)7R_j>sTWd3QYacMofcHQ_Gd3sKVQ@}`=6QDVNd%lRKB2^oJDpw&PZfKV7$n&8alO6BiBMUNyF&p+MS*p^t=wao z`R{?#nPZR~-Z|R>RQr4GitUPHae72bn_Yi=w?Cy&c){-e**pJ>_@JW)P1VV#PHX#} z{GJ9FVcAo#NL4jY+nsq}@?R@6(oH?i9CU{wl5k&(EWyP4h(vZsD(Vc6kBCQ=c3$U7lVpj>Mi+~m`z6_O7(fIUK zl{7(w9OgC{fUM*c?CB$zf4EAzQNEA)zIbqifL35)^}i-2&7sOKe^Lz6tiCW-MX$R+ z+$_%5u_4T6+7wYRi>-Q2ktOpmvZvT1^LtOQ7jfV$iGAcTd6^VE_Mak$bq&id-~zaL zlSN|+CQz2#C`=M_Pny|N4poz`TeTybk*-ejXeLPcN!m6dufSF`NnclWAM_T>Cz zR2-*132E?xkVcQSBa3fnvA@+O6v#>e*EPBUU`-c|Evv>ew1#^^Vd~nNqq?5iq>V^Nze1dZFLg*ms8sROG)UTN&&#n zU-Q>L{pbI~?mK_;*MIpKwetiMz#s0{W8}rFm;jcaJoHa~H#t48_WR$%-H=Y#OqHl} znnQ4ReWS|~Zs>pynp4z;D4{y`0pye@MiZvnmy|$%$R1zW!H5o0)VZrfkp=%C3)e#L zIm&Zmd#$OL?)`_NlPMt9@jS7NqYH<`ct}B}_kuzRwQB9U+yfiv16vesMs&`Aol!QDbJ*8ma@ z7ZPaVWWPa+Y|FaFc>fIr*%t*SqwZB(OHFr$cV${YhbEZ`4|(7Z7a=15*_e zuqFkH3o_m(YzR7Gsf0AN4Xz5UIV@;PaghdXeZG=vEDt@Yv+G!;x{i%>cU%4bVE2dh z>h|vU?>_$KoA(V9enamhQaKHaR&E$kG}C)fR=KnjOCy>yK)90?Gqdu|HK-57`(6 zPNe-{7xJ@}|92rjc5wd>O8EaBH2|Og!{CDmKBsQpGY@!tbvR-I&d~ro@yw^ z^+Mr(C~H8a3vsN>-Q!uvTExF)xfR$8L;voJ1|D zzh>!2&1fd>w;!*nc6_5(-^$=W&EEehG{CR_{9pG~02_9vK+sZ%%piTZQ_O{QoF6zI?x4{R#s{%~dht*a&Zy`zzPNUa4(HkcZN!3pk=Z zKDHcQd%xW9dC3$I?>Z@jI*fQh{H3VqaaXD408O&XctXIoMF^BLmA_lb|A{Q1)6xG& zfr77hn&rOEp{8eSaetlz{U;iyzqh1acIT|P%AT1vB4UAnCpO+ogV|G=T%<8Wer%OF zmNE4VFY}d39f-aVuA6SgSUacphsuhe@Bu)>4no0;1VlJ&VNBz>J zm3Sq&&A}*JRs+zAl>9tdfFQj>eWl;oX zD@mBq8FwO};&gFU70WKeh&NJIn&slAxf=;a*re**n~O#c5s{?9p#_-8cuCq@bU+yCpYp0(S|`&aR}AN55z zI=&ak^#{N&03??m8ub4Il>Gl>p?~f*6cMT``6-B`Uomveaz0>qpN_8TV;sOq?d5aO{})34 zxa{9QMCkuKg7c8x^OysWxoPgyBj=x{OmW;slNDeJ=>aC}GEy=X&GV$=go3e2rnWq%xH%TMd2GwwbE`doEcH&| zNrdtz#it#BkqHlmKow^0G8yo+0H(&&Cb>rhP4uBb8*`7^nCYJB>~wV~x}^f8!0(YN zG8q9P-9im%voevFUbkvMW*aH{cwNt z`)^ivHsHWISb9IHT*imPtb zfum_<(Rdk}z1QgrL5?+nRy=e=50AoB@SCjjdGvom^S3#8_03IT^+x!=?*!fm|2vF& zf$;ye(ElIA+`fh6<$R=1*}RS(a!D@G=|`TR0nS(fHrASlIDid@K=S$OwujDT*p-v93<++*(Iwe zq%*I01iUEJHNdJ^A~clPQ4G+*>&d7W>}sTaWe`L(f6$y;RdolVV>*ry3@2BkyWd>B z=Zsa#0COq(#J2C52G}02&e8zD@yKUoLSc$2=}0rlqvl{A3`qaKDF|!&_~+x^SU+YZ z`;-*KxfY;qE}vu?*&LLGtFb8p=@g}Mcs9#YLMk#TapoyF4jgr~p>#*14|W0+GppDi zN41QNj7SLGYr_+-vEKs3#x8O(^uM`o=cE7SsOFbX-#%Y3sCc?nc<%|={y(=5=lpn= z;rYn9A?6uPls_(%Vg@Ui3bu%HsVifBpTOz3hLFa1-}2F;TeT9L#@eb-ij!s~V8g}~ z6zTbZ0A^Mdd+@4ynqz!&a#0~=wGQ}8f$SRiyS7Z2=}8)Hh|OWRY)Ma}3YpdAR?aCe z>3&>Hvm6akew%k;UzSL70OlDzS~*3G;(;_@mTgcGk)67w1oLA;#76OyCl^sW+ zlo5LD=$g2@yEdg$ybp17msVV4GY^s@YzMxsx%G7y2+e}dWw-#ObrF?2`f}$*0F(nD zKR8MLB)^rt1*m2mH+u9#OBY3=HKTykwnXHxkZzH*DR5O)ZH=k`Va?&7(y5Dh70)bK z!XYu{R7evVsZ`bG^r!}Qf%~DUT8r~bOD$6{lZsvuar|YI-|q5ToaT5u=;r4FfS>r+ zKl#u8yHk9?tC;}wHF~EnVIyAs1-!fp_~j;m<<(*LpHkY-OF?;lCx7KxuZm~KKX-Wk z?Z>Mxe)V+#7OHSU+*Nxl56i;68JW(#lNU4h1QleFaOfTK5sJY?=MK7cD2^T5h+KvG zHBP8S(Eu6@KvVPWIYD3qa;J5R4u6(N;jR@0G3o1 z4~_mgfnggFbn(&r(e(>^D&UdWADm$mUIzVNn)dVfbd2xr*2a-k^8}ED{XF(42e6L= zI<^8}>HyeuP8Y|;6EQ*C5{ZFV^!jQJ9A+0Nl(&mQTvVbEIH3-WB-<7ZQfT64s*Q9J zRW}#U0F;#AQdjJ>&CVPqzQ;Pmbh6uq)A)d z+z)2&uWtVCckln*Z@>BW-S6p#7I`omJf&Olq3sP?qq}pBnMtu!pu9r0X;W=Y7j27X z=n&mj^VQtkOf@hkBk5d`?u#Y)Mu!P~z5o3;zXRmW(!PBA=JU79(sXI9 zDOM~?pSW5bd9y&8K=c3<9UI5Ei0yYH8psB5aaHl&dFK?>7@yEQFR@D&CUym_u}k-B za#n2-+mQ9YK$rU#XEQ~}1?tyJ;)aMA>FQQ=LN~|^nW&*Wv}%)~u#Z6^+Tx`Lp`+S# z8b#R{vDf}j4uCoCA16Zp=UD&ZoKCj>Vy+e(9fLc#9~buhUXK2M8fN#C&GwfW0>A+t zp9A;h5<|d-2H@HC<-tmTlk3nN1calE+^13kyT^0)!Eq=p`h4uY5*)+3l!?rg>}}n3bggl1S@3Sb+W)9o1v6s>vqRyU1*op3It= zQb6|1yX1oS{ok^1OU_yz(gg|1rHkkN5!|4UFU2 zIOO?#CtDY1aF@Mwx96NqWfB6=*4SfI0ZEJzB@aRFL}+{<$|~yXR9zk&S=I|jw4>DV zd4iJ|F6M30QE5aNTveJwkd@SR^kx;P#0Zm!B8!bN?TxWP&&Ku$vl<*{{~%WHt=ruq;7;~%H+OSpRY9if#Cy!DhL|0kjM+5Q zdNeXO%o68XVi)8|9_$Jb)08v*}?FBq~l(}y16RpMv?)PID zQlB1ke-5|%9t!||{`$mxz`y?41n_-*0a(6w=>K(X2S1dc{~sFk&x`)nHVQlm^6L-p z-~QrD=(56>RYlpi5Qs3t_$`&m#)#aePDlVp1VQFE1ZLrdeU7fM5=+h~_z2$t=z`Y2 z8_Pjq@Z-GP`S%opiikKwhlouz``Ck)+vpSp-C$K{24&Q8iqL z;YY4JkLNgc`zueR7(W2o%ei1XY)F`sK+LnD|ECrFz6koqbJ>EEM}w!_h7WT9=T?)G z9Kg&LY~p}6R)B%oSAsGo`QfQJAUUcB7zF?_9ZHXX5j~~37b&WU2mT7G1Ma4+iBrTP z;2Els>k@ADMVq@z^FVk&@sLLiZ5%sdA_dv@v5Cls@se9scvqw>j61Cex^dvkowJ0M zURBLJD9erqW%@f9QM?|$doXQB+UkT~QLRE%%|EP)oM0kUUPZ)H)&(7z{gub+lEt$u zo}XgohxM?oc6YFMS2w@;=KVL{4)kB=+jGcTwJo1%d&8{lTH;MMEI~x5DilqZH|>qK zC7D%;vsyD>4(q)|1+Tk#qdPL9JIIYFP!_jCQJ$RgU)V%M#r*L5Z@+o_*_%K5`m104 z;`6s}7B_P)I*AUo?CS;jHPXibiWd2xVAVw$7$s(^4dNaN`C*1e3=bKWf^Lfm%ubs+ zGtR$9%?6QUq>4sNQ%Uq70yK0ZefMW5;}BV`XcVWngee)`kwoWHqg5UCzZpg zWoG&}C3BX8eT8P89D6HoCL@bPeJ(3#Y&tAtYFPF%Wp4UFz2b>7k)uk7V`3i#1Kora zEU)La>DuU|b%ktn3zE_qX=I*sLF^AJSFR^xA{|PYuwwMo?4jZ2$Svua(<7>`3dMT_ zwlfL<%xo=?cW8po4O8wmFrR=7c*G5`NA{mW1Edby1Pf^qWsRP%nM)@`i|tA;ERQLu zUGXnB8~}wgox(YmYD&{_LMAl4XDNCxMgUyA+wqESYEDw3rIQ}J9LCx)&6}t*1tY5^ z`>AUm$FZ;tsYb;Im8d$hz>|viDf%zNlqwW{BtvrcJsj2i4xs-G^uM`K`vQQ?e8=-g zS?s^}09H5Q+Gh}fbGU#1i2IN0j?3I1Lbp}gr1kvw>9|M3E30p@Lnutf{rg!}hbFVwBFC)WpQ=kzE zQBFqja5ZTF(aa5RiC!3epXOPLq3FL7$?B(o*1gSF(x* zqU0qD0HQ!$zrexdiQrJU$kLJrR1|qo(|b}EVIX5>ZITe0xvB(b9In@l8_lsmY4CLw zRaznvMk<>C+7{-vHA2BCi-78MtuAJzu3X#FXhLlc3QP>GHG1TSH7d2K%Hrm5QB@a% z!c9n3Z=z!Tcoc&$Lo;O~E9TR;XGik?pHcz9t9JsQ-hKU{@B#mQrGfe1{NMlU^Pc1n z*#z*yujQu!{r~7B|E~!Bzb1piDTsAa8-4iu-~Z}Q{#ZY>>(y z56`B%YuEy`Hw%QBK*#0im2y2n2y+Dcumx~lVrJv~JlzabcX#;O_9{Gx{$H@FJsJJS zC3p=k{??13f1H2D%jetqJg_ZXyzrJh8ScNw`Y*@=l6@t>90zo&8F(w|-$(q<>HZV+ zKh^y9t#jI9WV#`X(<%vf`JC%KEEI7S5pC`c6|ku|>0rpJ>F#L7+SSV!x=O19mDKii zmROHXJ$kN<_QKK#*i|Z9fCJ8`(;6+EuB_=LGdBekYHQ)o4xB~MvUwp=oY{J%4Ky5}my##Yqq@ zx`??qLgdV|r(W@{n-kUT5}8+Cz@>*Wggd(cdc$cpCHAoXK9@t>MWLa4E%wf>TcL{7({!RG zsnFkWZL!!nnN~!vS0uCUmnR*aPky(k_H&nM2Ko-#}GJ_ z1*9XnUS$!Hm9N9Iy8%u)WBM}_aEv0)5&45%AL8**3+z2&l##8`S)_Ufjf072G*#b9 zg>TI_O}VV{p|S?+NFX&&NxA}2tmt}4kHha;z>R?0w?P`AaS^u3# zIad91zP`s3!a4mvpL5VXSL(YD_}Q5c{0IW<4cioh3(JTd(&(xW*$v=`h^g562&^v- zAn;IXdb&gH-h&rBI>g6|(i}k<0TiHrI1E^!6@odxlj$6SznHSPdX#^sE!OWlGPJXPq^HuDt0*3hB?6Q3@~DULm{W= zew7+l9&>t>?q(g76thrvn7YS;LCK(fPj-+VjWB7=taTv{^05!i+ci4~BrA>!mlulA zEaRZu(x^&?kQ-7SyM@2l&+tAo$ z%BHM%u64bzN%4i~KQ4vrUkm!b;N<#vvB7f|_8A!B<86+Y&ame=fRn%SlsKToW66R+ zuRXQaO_i=YbmWz9Mgdhal zrlq$kXe$Ija*I6gpkl(PK8?grOY23UG)BR$Xm4+ullMt;Z7oh9$bN4Zs5GjGEXl7V zTC1ZoJPol$0~F@3b(N#lRfQsL__wpruQCSeG$`)kLU-QZA3j{)e7L?n+}$>aLUhLp zc5xekriFsUv977=q6-wu(%vjf1D4iWYY?;sRax316tmSDSJS1nH{K3r?tZZKur_sC zp0#}BcW48>V1;|77gXSm}11z#FmuM)-d!_D3EI{eNIC$CH+fPsjD1e{SrVfX8V7Iad$xL>l11 z=NZ%g37Yx&9DqDK?C#8lwSy_x$r?hM+z6AdgYOF!YbB|$3^J2a(1CGGTx|WB=-nNe zF3IVYT6MIKq|8-?-it6<41@GKO!nVvj6Ew^8A1>hT4Z!o{DmmRIAuZlhz8H~B$wn0 zO3p^jA}m~7AykRv33C@0C*65-bxm#>$6w+6!G~|97tsJGjvtrN027&LHE6|++H_+S zMkwV&Aygk}l1bweothpt48XPrc9Q?^aIIMsKh*J4s8t;R^7Aiw!Prw(-nK?6O06W6 zfsRVr$W+{8;OAIP&p_<51;p(}?@z6VrO{WuLjnEA8s{(Ttw z=aE3{fEs0B2WP4K>piKZ3%=5XSRp+%HlpLpJDBaBMqa^s$a-K#2ykyC&iWG8XHw-=MW0$l z!>tEPcR-Z{2!wPucB_p5$;(O&>}V!t@^ji+76LoNk(_@hM0-rGp}&a8{PBLF%7##7 z0RjQnRaK)C!DxyG2`8txiz>XzB;xvr(=$6r++9VZR5`AJ=Pl3HG)mE8a~Qp46kshR zLPa#oPoOHQA}#pOs3FiMv>*dSAr2L|!YPy{poXw$1sfa=w^H9A`Vms62or6wdZ}?$ zRc%U0Q)TF>NP?5ait=EK?;}bN;7P02<4EIoi_iXC0PtO)|5G004E@J9|AYVdzutk& zzx{vzkFz-VkJbe6a`NIOU(X}}zW1PizAE_5@9H;SQ>@QVaYNP_nI)vEUC+C}``thI zlRs94t7)15NEdBz$)b6uBrh;acCyn=F*>|ZU2&pa{fmeRL2aWW7a{SK(Gl4X@jzzf zL8p?WLO?J?^cgH(dJB?sp%Rj(=kQNThI;gKC{t0|+oPlh2W`;*2|6kGOXldJyuLoo zGlL-*;!E(Pz={`u?yrFUKQ8>gAnoUsq5n@Bd^;`?F9`TKhSSe-04K2iM>qg^Y8+7B zrz{(BuduF+|52Ma37@u=0CE=k?%VU905`6ft*Ybbf1e@HV&;t*LkR z%NY?dk*^i^X&lcI=udoqa2OHXC0+PGhH=-NhVUxy)Yc*a6s4*Yjl@pYu|cBXOLa^j z@wOB2PsDaoQ)ePsB-lhb`H*ajPUWkkidLYY(T7}-BoFTIukYSp-Cp0^I@h*Iq~9L1 z6Y3=yS@Mx_qmV|3s(#j%&qDXFON%(arb}zf(nMr6J**Z-#%TPa6ZbGb7`?ScxjI!) z%B)J*;LZe)*MJJRAFgh0-(TNe-`@Z7t1lwaha#;v9b(2VM+&$=MOhz1=BEj1w8+C1 zrHYEWPi?^P>3BaaCnM}5Bib}Gda4%LW7vdlKW-5X`T<6zNDJB~r}_j0H4anJM58Tv z7)0Jk!Z$H6vh2V2AIYTu1QiETAWzAlPNsCx30U3v6~- zLYs4ti|iQ@Md3;BFOAlBaEP+w83mzl!bp@DG1-~Cj@d>Hso?ZA^sP}}2 zasTPx-aE+If7N@m4YOJzHf}LXcx5rgw7u3Y1LY2{Kc|v~QZX7u0^t?57!W?hE|e$* z$!Wx$DoU%lEGdKF8u>uJgYY;`7;%)%VDS`H`8_)e*3Vn#C& zp_qt9afy_Uy%#`8CfFncQDp_j&VxiXg?X?nu+rR6tPAZ&vG+)+a*x(wnE-ln4T(Q1 zuBj4%tjD-XNAtB6+rSKcOw)`&C}uX@-$aBpxub&Ds-W2W-~h$l^LBG9-)(d@1T3#2 zVwPw`GzptI6hZyCQ=&{D3Pn;6<3UBcRXsyKTx6v#i+_k zMOrOgve8Ae>YGJKUky#5Yzki?E#&{=tFeWFgW3d;)!3ZAG^J>3?k<3;(~MBHRkYdR zpvxkYV&oa={~`Z>KsbMn8@L?N!p~v;KLPar6z+fY{mm!+kN%_os{i+n4EXVy03J^P zdX#&3feGNr1i;Ud|DPW8f2{M^XoyJ)+}7Kx>o0%xwX8&QS2Sq?jg-tTn|00!LZK}U z)lSmVrSK227MN$X*x66=&f~-SFm9sj|6>=8o;ozq*QzBV4Lm4Q`UgOhB~DT8ShN5! zdA;)`YTr8sXebeQtvz!QbHsXzJfsWb#%oF$lR_-K#FA#`-cz|bS3iCi<1EmBG5UWD zxBOv2|GR7TbPnJNkGPlvctIRcDk1yB=eISC=zGMUry3C|PI-9Oq0Trugx0?Yxg&*| z0k(opRnikShv!kCA$q;y9!}Yj0x5v$DLO-wh4evePWoB%8&xETD2jONUhq@u`JGg4 zspIPtObWdvvwSKpM*Ce{HLo81A5&#(Ch(&oUpPsvWptJFj+B`0R?8UC!|Ly^Zm(|c zu5WHZ4sG`|4|BqUa&m+(+EhbEt^%~y-ZWVPm@;#f&-6`GeY3QswHzq!Lc2E?XHybf zn!IIOgRAxCLU+GMwc>^1k}{hB`Tz~e<@)C4>gN94)y+Tr)mN$higP4W^j@Ttj*@Cs zKy0=8zKANzuRK1Ln~GIn#fu z>pw33-LwM8Se^#*j~TsvE%YB3&apoT^#26=`zdJvxgZzl?s3e&UV?3iOh|iA^Y0LEM^4#yN-T^$;+7*OGJ*9jfXX?Z@j` zsD0wJKzUq*`MhJx6Q6M?txsY%XRH7ld_PVAtw%IL~CWOL%GZh34`~# z-svyR!v6tZ?Uq%JqGis(_hYCI6uLX&WIJ|9$<4+n4(OZw*pTILirBe)x*DgW?;$d= zGDaL-CIlHYLp&yuOOplng1S8^FHV$3=g=OC{h7bH!}+!saF_qX#|9IgaWFpm8-9G& zDAnjKQ=7sEaF>kw4CNha2gPUOBM zSXh^syW+sIJz{jc3*U)uy=7_LeNbxk88Gq}BTk7^ErwfY=iTc2S&8l;E{Q0%h$fm0 zAoUS96(fB$Rd~P)4X`lCXjKm|!NmT@>D2?AqsQHo;d7EScc60LGWki|JeM-B(}lQX z6flCNqgm}cqeCklCz5P1H5koGM`oPiR0UG$|AfH&psmG3C=|4ieHlcZLQRmZtFo?V?(Qt$i-UpBsWn5Nhft_ZYI=->LfIvJ?rSCkf)DtF8vF}^`0x7#Jmc#L1i;VG|MPzH z#{~V?mab=@)(M0nxO(^P=U;s(3uthtD#QCG8Vh46x*V;=RwFxzyesbKc#Zk!3YoHt zbD`~+NCy1P+D7m=b*EefnJ=5KymC1PDj!DmNb=AT^%y?5$`|Yq4>;BNmIw@rI(w^% zFq)9jQ&r~jNf}WC{d{Y&%uAPOuV@$P=|FQPyKEajRB7IIRTP->>h|vA_1)F=-QC@7CV8IO&ZbA5 zR5us(Xs*q-roz=sOXi1VX$_+8<`i0-QO(V4Jsf;B1E>^p3vYKVrxtB&;fCh?S|jZRb?C7^x6WlnzbD3BQPX#Rs0Fr1_HOH*3#7Rv&W&wy&qS6joskBM&gJgV_M`zc z>!*`3o>TiJ3jkzN_cL1M`@87LKYBLwzY`MUn=+V#4L2~zibrFAUWWcZG;u%mEcX4O z|J${4E=zov26#?4z!PZzo~#6T5eFcrqPsJpVmBF`jQGZGfRwzEn+~IFSM5Um4k^wl z<`eZY^d>}amnw&wcS~IH37$JZ=QPDv&|<3o8R1|)>;UjA?^d|8yg`-zKW>QLklN`1 zX9D<9!e?n7t#Pcb$s}DW>X>OSjKF2jv|F6LIb$?ppQo zP~=-6k#b1%KzXo6LJ8gT{7LVyMitJbH!(kmgy)?mqC+?5wJ0-RzUg zS57k-@w&pu5t^E)Y_+tytTt#25$gri94;A!*qo*r2`*mU?{cwdV5k;6AIxI!ev!mW`tL++ebYFIf}|Pyw^5OsRaG?(B_N z$cP|{X+N|5A>!)d0+?8QjtMG6r$NxWbT65|MyQs1?R3M;p(ZTOjTfvoucu zA~4H%Q8p|MVJvGc%6?U7u4qb8WiwA$Mi!80P+HVLqfT=kj#XQ&HPPjKfA53x|5t~$ zUJs@J*){NkLH{WyvHl0N|4-rr{`PEA(1j*|@4AQiWcG>&#dRFRu@i$L#>oEig4#@ox<630~SodL{0 zs{I_{!4Op4ac4-nOjM3=_Nt0Y@?(QJ?2c+Ud78RdIeBvBoGFGgu|JQbI=mSAm#5VH zexKz0(>Z`A%-fG~0s}lc!2wK_0P=7gP;JHc(Esigbkqog3kVpD;5d=hQ8&&;1U!t@ zLb3%V;8ncQgoJy<-m8c(l7k|A67H^9p@(44WYGa2w1U4vyVS`71te+3wEjlza46^s zY(-NMclYr4h*Mgs#-oTftN^{b910D(Q8j@uWQRB*8Zz^QU&9BWJ^8)vWtAQJAF`W> zdsmHk(>UXq^W*jX)$QH&?XB4XICC@92^TJ+?jmr%bHj?JOO_P~mWGA~71iaiu7{>? z7X9o#CoUuJjqB>GSrq)z#b~Q1K1ZYb8j>xBSv_R6(+PDqkpW_MxW2u;y1oB+b7y0C zp?5WOA$-2Gxc-e|DTj?Ogr!7CXLCpkWnQYN&=7J_gnY^(e?Nw%ZqQS$$u&CSD*#vP zP(C5`we$>ca*w0{&?UNK=ZR1M>xJp!KPdEnyY5^<13bSX_!JGmN7n+`E(fwLk9n8_I6*qh zdklSW!5xi68(l)ZvMki?7bS2SO}TLp!Cj$08M%6r|NOe=?N9{rWGGoW3-Z3~O8rW6 zWWq!A5^->tF}oGD5Fu2WcFYFBE4od3&IG%)q{vnNVfi{ebJBukK!CiVE!`x}Ly$OM zqF?TGirad3b=~_)Pl>F#$LU{21Mtj3^VC~62g5nZ|MB-bNZ125DK3SDoYa89uLC&Y4|2&1ipE-bXKX>!7 z5qIMEc}4;;y%^uo1I7QiNjKrt^+wo(!gs^L{D=r?9ne_&$y6$tQW!VqUkzriqNFitgkGWRW1cJ&h;IGwCS74Q6vfSkKbaBeSQJ!f^2y>8 zL?mnq?!EN89@cxaCEAB48m?*u&9z1GipAD1a*L|3IJV&~Mdtzt??G5S6b$83_%_@v z-hw+-wMe0e+$nP}v-_;GoEVOXcP#r^SB^8ZCb|GIivdTMu8@<$hlpT7U$!*}0t zbG6RX!)VGPL)Mb1mXSL+Vzk4%JIW4IKtVA;pc(LO1G8LmbuvO>U@&8f&J3UWi6!`C zC*~b>T?K`tcz<~?W)w+a|rNp4&J^Iv}c>6gc!fB6NY*zIg0_T`KoVaHyWZcisWXzg*cX3dOI#QXSY zKbxHltr5cJ>JE1g@l@}dyShC6(fN=C9}LV)qnBl2eV5CV_n&|M^~Ya+{qxViJa(-K zHZ~*gZFi&RfkoM>AZg=4ZoL4q|8&G;bCEmRyVtaDVg!kbBS{Rwff(&H35m z{(Ip+78}ai1b|n>{(Ovc(0xIjpZ)yx5oiG12IlX#0vsvpy5kOUMw&jjEDwkYm!lRu zjxZVZlM`+;_$&{g`?9er5HS#?N&`1qfKbY1C@yBohclBsDR9WMhaeaMq~FQA%YE~% z-u=fP{C zg}fXrie?!rMyvBk@rl#L&VhnM_|FmyeklGOAn{V}pxy1NRS3U8=YvF=38#yhKa+$^pzbqL)Pvp4gu z?9a^-UBnXwx{$9mv1|^;V8jAfffy`oTfJLM?&bdpM?#kUdJp@8Bvk;Ccg2S|ygY$6 z=3!w_E@t`7x)>MCY-YO!IpNM&n}Q8;H)Ga5SBF-3Z5Qbwf+tqw2MB=6WNcDL&kW42 zjXJ?Vqh>vue4~hVI`wU{b`rN1!o?0SFCf-W?_C~C z*97q56rj�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

; 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


Bw5_Mpb~>$}Z|`nzZ-4*%`^Vou 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�%S@!k-Z;Mz^TG*a2RoJB&GJ<^c4Z)U`ivc#f&z)4LJ_tg^Q&qA1;$0?i39z8 zGs~+A^gkWQ0kAa=kU{ht0*UwDJI5y|(w)o~8*@va*lM$5J$%5}AVZwg`;zPyUC9Y> z!)1z-Ju`UG{OzncF)}iM&1^Qa*_yT8uFbQxdAHr}wwt!uI{LreY-r7FW+({;N`zdR z0KE1u3)cUTkHS}#0=%pp(9;e&4`~7p&wl4L1IV=l2$$bgi&9Lnte|YKfEr{knV2J% z)49rZL{3KE^W3U3raxHtrURbv`quxuBI$IE|zn53HhC+MuQw z)?1k#|69pz-X{j8Fk9um=UY~JN;BhPqmD~g;cTq+AkBcrUmxP9a?_5VIK9Saw~}U_ z2xhFz-Z1xzq&yhej9J7Q%k3{)0W_foVZ|fvMv)?pES`^R100hAthT0K2Ktw?&3_#I zFZ%!g^S}S2$GzQO{PVxnmW9-x{*(JRiLHN;F8SZwR06lhnGJw11^SmSi}-&8{=N?M z|3c{hs}TQ}?~AAO1UNtj$3y@J_39C<|LCLmMdlRYw)y<|-8b+0=C4rz3f>EZGp2V5 z{E3RNvFW6a){_Dli3v_!Cun{uBa%cLV5MsqHDC#n6g4nxSfhkeQ@HLD^iU?%h*Tm# zp*l9IVI!bA*t)vkk8rq?^|6M+H;=?rjLQl%+=s%;h=Zt=Wz>VhbG_;dU(2LPmOD^| z#nB?(5E&Zm7DjHp;uTz=B8Y-lp^RU|XvC0~3VA>MFbOP#?alzzK9(vfalr}tI;8+_ z@?lYAFAr5zb?^7-tC`f$x+^_P^bITPK&T{{{9j;}GB zXX%y`ICW3X^$0VdnNK-s5iAz49z;kjdyr_d5%obW;yMkYGCO4}@R362gFTgCi}h3t zE5&mKCD0mW5S7gp138K^wfF+vTts0O%zsOeEuP>t2G(Co2?oY7M$qlHb}=r z5QbZ6;$@lFAEQ+3#!3TQ6yaAmJ61*u6Ra@4}zf%$hZ` zc@6`h?Y8Z9ZM)lTH=lp}xV^s*?!U38h@Ueyco_)0*5-Uf51<<#9S2)3smY(m4(Jd5 z)xR`qLG-BvnoBeRk7x$4a+6Tplpdm~I_gt~14AcI)HK8)Xud?=%EQN}TQFaG7I3#U zmr4zAW6C|^_K{Y=8Fd@v5c1tC0FQzA$G(Si^UR(LN&kvW|DSxS#hEv8Z5W)hI^iLX z5YPT%xVJ1;0^C>*(`7dqfkPAVgsR#ty>trhf6N*a!p3dmEG%N%Sc&mB_fyweU4S+`zF~KtQTu7Zh#l+%xtV? z(cyrK0IC*5lsFVr&BNzu1DuuuycqO<_&7oTAJP9O^&1YVg}?CUR%q;h`cF1;dtBr3 z-S@w^-Gtj?(E#}Bp?|p%|Gzx+|El#c)Gs ziJ~ORe!ho@$m9m)oFMU_>DKu|2~ahdCeXpbIQSV< z#oE~jW)uyS-rvrD4N|5k=wA}T3Y=+1=~Nqq^FA|u%I^~pUrCZAd&n{~{h{Z}75X11 z$({_H5wXi200&CWR}VP83jIHCtQ(XL7trbFneJQ?ken7iCM}Espn?eEPW;P?M(pvk zIXr5_0n^kYtHlYzk*^Ey+NI}@yNG!FFI22G)jMfT0mG1wF)5ot)tg%sVVk4RhSc!% z=-%M{x~Mu*bNy<;RPlh;e66rx^o*=rOX`1yix!R;fTLC8q(#epY z+j#=zzaYr+^s;tVn(z64JHY1_u<^+5mr55*s_%e+r)VI71(Z8*W#&|xX^le=B1Xb` zb77DaR9Y#Gf>z1Z8JSVh!RXN)Bo(nqi>g@@vxCpijI*!_IW%;tIC&GWpQx7*!zx4Yl$wwvw!X7l;p z%+Y_#D3QwwZJcTaEX`7NUsI)mG5BCsVU+$?IPWP!X^)^|! zW;vAKBus%=5d%mB-zO<8tmfEBFf}7o5qniqsj{$U@L)Xa-cM}BDzjdyW?ol!)g1cV zr2&X*YvkUH21HsCOp+MWe4C1d8!4B+{(im!gb1L^{>H`O>TQ4%Qh;B-Ec*XU=08t= z{DnXFjWv64{`~3xyIoebuUYeBn!bqR!WSxTxIM1Z0Jx$5FNywN2K~P>`u_yzU#`Uc z$2EEaz>(^E?Z;0baVJGJ%r;cSU_br%0aJqhfr5n|z@U!rDN=`MG--}CYEXRL(8olS zCYX$bv?RLv+{995ir_#ZjD5z^)EC zx)=hnJt{W4Kq5qZs|l?Q=Z%Wq6@gglfze}hvmt;X(nvqXXXfid(Hu{2 z21RT0G^tT&HmTOpA93z{Ntz2`YS;H=c4~hcae_%bKwA!z1Qe!2MQtHi>e(*RI)8M za?erc|H8t%YjD0!Ige0=&~Klr6agD!1~bXbLLd5-6A;tShTu{$5n4OA1L-alU5b>% zN%AYx=#0kduUoB2W*s$mVx=;jmJ^(?GzbbspGOg;8$!%*PyKCeHs}7&b8GY5c5eN@ zZS!v4Y<~LjgIV*0fWTwOr;e`&>UFLU>5JbNSJMH=_3eQE@Q?q}f#KqQC*VrWfJ-z1 zd&fmxvB62J#R20FJ0BBO1$;Zv{=IQ*0cEU}h3mJl->b?6(5^5*a8JUpBo}-7wCN6V zK|eke|8jMCh29$T&ove}<;)gOZW1X|I zjO~%Zy*Cb+dFMXheD~iQ)TL1ctHOcl^rfwOuY&4_Ar$A;sKax+_B~F76ibamvpQTl ze>vN5H&XcibH7@F*S4Eo{rUge zJ^;$!y?cK#kox|;+#a{b7uNu|LH}2PO)1;;CQz1Ejd6{)X@)PWvPn92v=M*P%#Q>E-7_c<{Cyr)Cys%HhcV$A~4AAu1sJ^9OUE9PgO`Y@I5ZR>0(5 z(a8~MNx(mx21K;B999TMYkhev=46fB1%0sq1d6IB@gh5ltea5)NUcjE5vmvw0G5rk zfL)kw2U1z(xf3RULnFm{9HMvV%_wHp%-U@305s3@ZoAuT=iPR<+02{G#~(kMHMVBf zNE?ltk9_5PN^Oqoqm@qs{Z}jAtJ(pLcJ(Kk0eXQe*Xikai6%e>ZY-92v<>YtB$Dq& z9BE+}VeJ?gnxluC$K5PkKTweYW8D|HRVr^xC=pvV@bCR;&Y0oa2gliP^*$Q`3;Xr8 zm|q@s1HwxbhJ3`oyrG`JOJDm1HnUi^0dQSe(WwuL!wQ_e@)`Z>`s~q~uui=)nwBzv zDYn#%tPyilOi4Asq!3ZkW>=Y~u@Gy6!qE2{V_L!!HyQzl&F&t?OZFfQFP;S+9G(P~ zu(b5zb71bXZx4*1tT>a3K+$FsSJDSFhRs^43z*v^MAS&!-BBT`-d!IO{%``jzg8Qd z%{z$b-Me4Ep6!o6j?w=Q(f>F87}0+b`Dfm@{ZA_I@^qyYMn68`V|$A#sc&!Q{xX=D%3N3{Rrb2WZ7Z_T{wZ!BuTLmV0vgYK#9>1$m2+> zcmkas;!gcWxzjq+bgm1-PF$gm9~cQS6-~Y{MX0LoP)=(Ql?hpkvD>7WQACv}pvQmi zWK4E~SdfaXAbIZvu)x-|W>0~6g@{^?#E41;>B+>4Wd-49nT|$Ug>>1$Q?efIwcy%_ z2sX=})hw=g^!ZsnaEz%p=AQNc#lp}W3Ng*nJlsZ$PF{lwc{&)QfFp-i#r=5z1`#n+ zHzgUJn9ydo(+Mbpqs4{~Qier0lB}z$o_<@dUFGRPci|~RA@3aYo>ccCcRvtk@D^X* ztU*ypp5oN11OeUPJI5!g6W~d~2#P8t-2YSBAaygjp zg6Tio3I0AGF>JQz4K+a6b3*Fd&Hw=d2j)L}i~VihUAu~49|{iw`?)?2Hr#tpI_mg8 zMyy-9;tY_o)($2^I88SShrrN@_sA^7Z~(C6919|qS23Xf=*}h#&nw412SX4YB(&JK zM01NFYZ)F8xg&Dmf*)66hTi9s$^>>ng9QwM3UBP8si84obu>%86be1&R_>j_R#pm< zsmNq&Ap~ep$R!BQt1ZV5S79Q?wNCo44W9VM1VSPvX54)VX4;$5zV1>oV^dSWNyla4r- zo_oJ2yMI36DOdTRc;ei-`c2@&*9%Zci?CngVlEg3!Qx7KhWJrVi16+4Gm(30LBulk zR|T0P;H)V>DFv-+coR)_OAuQSyF@y6R#J}Z+0$^%on zlt4V?uEIrV(dRa!HKzc%4X(KUwS{!#>lK5kx*v^F#9&Gn zV!B|`9f2|MK1@tRwa4=Yw>aJcN&HtQ+eY|P_-G?*6mb%=hTnar?z-Gtq0L&^EX0w| z*wCCj>9{J5qUerFW&%XJfL64TI0Bc!dieA&PKSZRreecALn;n&8Fy*`ERMq&vk<;O z<@lVHrfbBf46F-GN2Qty`*eO5x288ytl~zy{+5RaNsdGA)&sagBVai04`I~#t@R#2 z!OHOq89dg@o$weAgW?v;uV%t@w1#z+1666)Ce~u)|4K5 zmW63asUeDK-1eArGc?x%TC3cQ7)|Nl;jOipHFFo(K;Qwsv=;3Hc4MFjCN15zm^E`g zv?Qb1W!(c|vmaXm@>CUw>g1C){xfV_8Duc{C=W+02r!lPQbwCB8fx+7BAO5V&9Maf zU(!_h%X;h|Vjo#mK`wrkNctO@ba^r_kDnoJW#AA7G0;;w>Ns8OMa#fl%TD%ync8sG zD3|{nM%@A-sfR#B=`2?29O%6+t_F(P`;Yd3IlgbHj z{ZRV&GiG-}{Nb^pZsF7KZQ2acTiRC6Ma*aq??y5S|KYc6B%Ag4-+7*QySCfSyY0N& z&KpPne+cxyS@t#gIJ9d0DO@Ys_)rf(9+3(B&5cnq?86Kkv zK!^F)?&wG%Nu6Z`cn-NxL-S1iMU+d^9UCgF@aRCgS>{D}i=SzW$DT-lrxagfjQrrK z{=j+RK+b_jd)b3no(0#sxGFI+TZl1Ug5v+Y^mj`Fv`=1Pr* zP5_Ou)Qs8fg0&_dnF}~vr=GphOhnXkrL56|xdZITU!m26W2PT^7cduYIONw4C>-FK zIQ2KF6A=sWVe+!Ow}U#vONU5@9<%4o zm-_OT%*r+N|2Eh5&#_OQi8xhoQ4So?uz3GEMY~8VThFZg3|UgMQK=ZQT_hxtslQ{l zAoE^~k?;~@l9_OkXM3a$phkOM8?w0`$%TE%UKkUBtvLfS#&;-bDrY9J`*I$ri|oxw zBL`lwFDWzxw^4e-I+lw-|7|f{iv`}Z5%XJ683PYXT0pmmwlH2WM%FKBX3d&eYi*v} zJh#?%yY0N)w(V}-Zts8k$>zq^7{R~B)8O68FyRs0e>E(Em!b5JlL9P$>l!)$d88fC zA0+*s4^_PnYXSm9dwMhAlqO(o2`>|!A>F5LES|l=6<*;g1FX0RgUY1e4i96I*ns5_ z=}dqW(vo?R1aSeA8|NU`(FO>~C~)v?;R$H?R|5UNE_m>>{veUzRMoAwnN7=omHWkj zh4?d#@@synNE!I_m9_A3_CG^}R9D0e%e8SqHp$ag?()q>onJ)+bb}x3>$2CbZp6wm z^!E}s^`>4gG~eB70crlRXw3k$**C9@Js^R}yhTBX!qB6|4srkIYXiIr`oH(M)cohq z{_+3v0t4RK7vNX^ZmANOr|;g{6@K^qFK*|c+vBY_0KN|5zuatpp5-d8`_lX7?R#)7 z1iY+rAI}iMu8$r-!)9|YAMl+3s!-i2TiOAI4+-F~B_gKNf1Q;VYHV(^W64!?D{*x`bMgn_RtDve05s#I0%SL!8QiP~xRxV5xEV3lJph*J^nLAUpChUFzv#Pp1X@fsC2OINFG(Qnjl^olNYA ze*e-&kg8XEVc1O30rZeAXtzytMIF@1-$z!Cj-1e|HM zk#WrqSV9F_@(m*v*v7Em^cLzKCJ6JPp1Tp5iAF!D2eQE0&YI{X z#t7DqlwItj|CIWG4yTw6pT!n<2g0Sm#!g7;;ZW%Rm}%^B;FUR?eZELBNjtj%mo+v| zAvPC68EMv;1&z&!5lo~!qc-fq<9FA$EDx#!JT|)w|U{pk8g9wz@x97XM8+f z?;;+Nd;ick%*TIiJnMKHara1L%V0F6OxDxGqt=T^HF4gTjXAo(u!@GaLh^{2*0!|{ zvlrm8k#XoWi1-n&&SidK#?a`6Hn0ct#0OQN(SQ*1^<9rHoz4AMq6=64V3u?*BUR8^ zBgOKf+iczmhoBjuB9k^FMX7FLre>k;UNHKexef5w|G|IqD%0^C^B+h5Z;#6W*8AQp znZNz+ZC>R2Z@;~LQ?~}d*MRH+Dnm74Edij~9KUZ(CKUphLXSB$b0o3cY3QsBL{$OJlv<;uFJhvN;p#)p_(Enh zp!X2Usz#H2p|C6o7ZUuUKeL}(dzw`Ilet+stL{k}J}j^kSh$B*i75k;QUBrS@{>8M z$tH1drxkrHy?oO1Q3ML3sZK6U0NoR*FkA}{=|Sm9F+VRyB|7rkQe-grQjbPJ2UQ=i zq7{)>Y6E-?5a>z|K=wGI-IFQs=(kpu`^iv7rxPpc! zx23(6pQ#jPCJ5Wp0S-z~!h~$j=uZ=r9+<|UDhF`r1Gvn@J!KT0jNL7);rymB?MW`M zd#2XWE7TFjoWiz*V1g)JtXO1fv1qCkDndLOC@PQ?K1gp5lIx~+s(Y)&D-5>yZ!v}r|tcHp#QXFP`*{B?W3gt*U|yV#dbh{_*ehMJrwC& z7=CC5Jgf=0LNfq|2R2t$mQUCIOImdMCPf<&$p=n=Si1v->W`LJsP=% zN|#Y&EI$57V%$hwm)wloy0?9=3L$HASMCa&f&75lx|Wp^t<*e_zDdJTt(ObUbOm zrl}Hj=HleH(1FYjbV0Zwpbt`BUhQ;~58wArbs7`=3R)rq^Tji#6jYY-S zBBofv|J<$8!y^_R`Q(m4ew20o2uKeyEh1W8K){z8>=?7|#|Tl;{f+11@m(f?s zI*&e_cZ6Mf1GnShxPAj}^3$W>yPaJ(19a;IX4`!MXG9_n#K;Mu+q23(O@yVe04WUt zG)z>SElH_3@8l_1+Mj1ig3Fgm*hBG5a*nJ{R|r{4BBl8iT5IASKy$O%%+3EdyLq#l zx0`w1?l$+^`+Kvr{jm-JJ=d_}TH(2XtH*#CBBc!@^s^d4M2s+9FU(*T`<`4qx7MDGGDYccgjj~$?VTc1yNu3O$5{wbS zhoAJ|hYwU{*HBfS=mhZRvz73*wy<;58z=l=Uj&mlaqZY!19cdf7lrSABQ@z(vgf#|Q5*J?=8Cxr2ckdug+!zqeI02?qn9Zt_!_6ktw6iZ9 z%$l?K`vHt$biTmMd*x9YYG-)BBSsB^kOGL?G~WqYgs`#D1b{Bmq@w(aS!g%}CSji5 z&7B?7aE~JuiaHpN;mpWHXhu|>^?8B`%1jaHEK|RG^k1YD2{aRurL0@R8K$C|7jK^o zXQa6V2H)n+O~!)j%X zL=!Ig$iwM5EVD*rE}ay*p;ZE)6->H>JPZHte+d6BzxXk7mkJdX&;{h43PMbpBxuFL z;W=#_^3XT|m8~rm)W{U*WE3P8`mo$D6ej`y+ibcIJ};0zjl28mHM^k1Z%zK0jKx7exAX z2jz2Ohr|Bh7$y{9qi`TOj?lkJfuSM!k-T79lKr!#jhfL2+ZE#w_S1i>lFZ%a3&8

{{IVQfIF1Yxlvi%DC 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

V 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 z

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

S^`o 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 z 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

=qbiJJ$_4DBOK12BbIGE1o5s9D^JAE&IqGn#q zYk1h=KrKn+2wUU+eEvNcko7_8KvdyK;c6Kfb%U5sk4Vb-G=t&!jg?roG-cZ** zM?b6j*p8?!5Jh|C?1{NxQpFg7+LsU5GyR!HHT|0JPX>#Skt5y;5S#&v8YpLxD)t&p z%Vrp(1&#FF&;3{Q!d8HHP6NDiGGOz>eRG=L|IC$u_X5TG%whS(wtnXxj0Ie-W($yL z171B~qBH?6@hXNk)3(BqPc7oQ-hC0V)Jl+M$Ur98JD?E4J&Pq`5mntwltjuy;?>#; zg2iVY*m-u4AYNQj3(acE);~-J27{}>);I%VjlEDf)Vj<uRFVZge$sHq96trR&MHQF_n zwtnahSeklw2xnGKniLBjL_Da>_JK?TCda_kNVqB7otKGZb-SVN--I}O;z6>E&_y5+ zwThL5Of;k6I#k){kWdgVtg^^eI4ET}}JQ$;Mafz`C<7PRUg5ACMgGMEXvSR}GbIgD<#1iOIIg9I~I8vC=I z`PqqRP7jx>@^^dllt`>g*;8)HpQ}YzAW8^gvs1^2%6Xfgr`o%b^#Q`Xn<^sKqU_3h z;y(EI+TuXc7r1xG`x1k99VrJ2)i`sctYP-^51*CDQ@LhELLys?bB6QeZ?_ zaU>!CE6*QVu@YUF2I%MfcjXCqnP{MW0^|7YgEv=1gx&Tasqnx3pZ{Wu^zorI9j(JT z`3UQoN>BOGoh{gW{InXA{_ww=k!SIiab)iV$nL)0wOx_h=8;DiwC4G~46?Y8*cL+) zcGlk`gxwTIai$RXqCp}IRURXij>bcHX>gE|spYc3pD;vAA(^IV_6TC}U{(0m)5VEh z>YAZI9vhOIU}GXPijA2tiAPIYcE6o%QZ7EI)i}086H&!}hvqfY0>{yZAad!Ij79O| zem^Jk<21l|Gwq9d0#3cbFGU8N?Fl$Q14M=uGh0ly2=~_CM;2{B=hW?XdwX~PmQq|tB?Qn)0dw<|NPVE z&!0bCZLaKg+iZqsJSHGeZ%Yn@lv-g16F*)Ed-3y7tmony%4K));wxh;wlycboFE`% z)5w`42jU92h&x8Kaj&l6KlJdyowW6()(f?OE zPvfz;{{t_y+TC+5ZJAHjdy~?rmh4U3E5S0`GJ86xeWgeL3r)q4Qk9wHe}ZI*V2^<1 zY}?Ey={CEd9hA^VR*tO?T6~U+k!;5d7Cz7t$s@F_a&dwbGs+pn?|QWSUe5NQGB=ob zNF#fd5Fx=_yWIiR$f3>arL6#e2pZrWk^!4@pt8#ag&jU$wX;_X^^;2^}Bj2DMdyhDM8l zCu~KyQH$is$Agw`k%`k(WLG_O)&e4=JI(o%W3fP!%j!ed6EoQ!YMnf)jYyC0(m=0f ze4f#sJNQ{GW9nnc9+yPvU2NARV6k; zv_+Xw_4+CnL8;5Wz{s~@*6=H3b~-OAm|9F?J2Zz?%MS}ZYiNkfsOk;)Pn#_v4-YLz zm?SflONbr*D%CzZ0wCrVxMW0R=IS)?rfz4lM4@x|31chloVl zq=7X4q>Lw4Z;q|B7Aa)e0p0|fnHkf(pD8Z^S#yB+C!selr3UK2x@#F9k8Id4 zO#}3wa_9v4HlBcs;xNzg1gvO){RgSSRh+aZo|q-LhZ3GTRwWiD!n?cMqygrmf`&gH zJ+KI=&w}_|f_xG%q7V(=pa>RIV8|k8$B$4FO{nbYrsViQiv2+V%dos4&KoP*hC@4V z$peYWyH}|vsfY)$NgjV-J)eZK8Bp&Bjy`!#X9HDa14pH5R3CMnSOp+S-6n2hZmIn_ zS1>P3dy&Ei&LbK-1ut<3bpXZLea*tTDu5A*e);rJHZb_aWB)t!1f0qCF`xZPp6Ll# zz(%e=3)`GITpK$0$SAIg-PG-NcXM<5{rmOTuO|P$zTe)@P{!DuwB)Q7vYNb=gqQ|d zfuI6+ciZb9-@pF$@xOlg{N>A+kDoqWT@3*G%a<>oKW#)pzQ{CZ=>;?F51oPPA0xlg zQk6QE!8B{sd=O!`t392U`R~0UbuR+Q5dYBrqxb+cwjc$LPw%`-T{DipqK`U!qFn&{ zUx`!ifxS43g`DMy$77`H2RNYr^ ztQZ9nzi~yVkq17e2VUt{vE9ga%T2AYYo<`+a&*-}u+$bsXcbdmKQgYvw>qwN(lqng zD;;9hz#;>owI>!9;W2_3Xh}gt!VDH+F<};vbbEJ`YrDPoK902s_%*Bme;^v*osa>W zWAC&}w}U)=n(`r1GI$3`&c_B)Y764F0mE8zQ4_1(nP7Np~uNh=Rs}t1|EDVN_ zSTv89#AH6*1P^PI>j?`05hi3~(oj;GZq&;{nEW7MCCQG4km2c`BJGj1tq6ekqlNq0BB|L2EsYLu2`9DvtZZAdybTZ)mcmiH58t9?T;z%06*7K16FCU!G zqye781e`HbB@ z532&M#hw8S8DwVwVK)fcA4cI3Oe`$EQ7c5m3*jwN2&LkRd%+GLDnmf1$e<7e9ElL2RV0@#6m5*aDoSmb~_!T^92gsHpT?(Y8n z`sU{Ax9?wn|9<`b$NlZ?+*#cn4I!yc%~Vf>;>8W7=#xcehN$BD_U`KY_uqg0^Fo68ER4;{KmE`7BO#2d9{Wy}8&6Z8`;o zd>iy13jzy=IDpcf86#rnOwS7sdW<5gze0g(ac>gUvL8x{rS7>mZLYDz5aKw%)$fWSjB8lC@q3ivHl#g;+^lb;G%{Q_F{NZSTHzWf#N9+Ax=_9QqktPrWr=XbEfIOr5scGRB%x>YvH{AhWf6i! zGOML$vIyob<_{)eQZ_*!go!YB>L>cZh*$((E=fenOj;*im}A$71cSGXlmt|S?Hz)e z7?GgU9&+LFM|ljXfd#6{EUG(7X(9VYuBz@HaB(BEh#FhKRL$lf87wZ$9^xp7mTq0G?fZmxh36(g6Sa|NZO#{6GA|o1_2#Ci#CH&9OG!5vP=4 zl>p0GPZ#id9eUOQ3*6>oCYKNQ;$JP5PG+aHZ{^Uo*20((rLk6LMezFJ<53oexI~uy z2?zc((SqJl@WI~kOr`E?D0cPm)6l78_7DG%$M; zfVmcmM_HiNTsC{oBIp#CY5?B|(~3Q3-xjk0J8dg&10j*d)xdM85FeSF29z`+sN%EW zr8z)WUU(zkg;)c%w@Y1?>jry#Hs@(4o2P4G5(>PJ6zT^7gy92aVlauWM;G!6@5UOZ zP87Jk4tVWzM*ZxKj=Wrt@YXay|5=B~fLHYdyZ{qG=XwH+2KZn9^Z)zU!=6q9&|4S+ za)Yz`@fb4TBzoYDxq+-@iN4)9u~@2ph5S@2u!zN+BiJx8=-$X|xLr(QB`oBWDM5V8 zMoANkWQQ2&t)oago=2@U zlCo{*nek%vY9eB8IjHgw&N}k|kg}jP!{C@lU?F{JzykW`&?!e85XuqPhpm1`96vef#nK z+xP41o9*^~2beZP!jnUdr(gAI8D@%_iH-kuu7Pk+mW4!|e8igjp23;s+e z!hxHTm-q(vY|}-qriGa*QW~btEXi0D1yo$-3Th5fRvtjKDcXXk=4yqhKH;XwIZ%hi z*>A70*D8g{j09xioPKpr30F6X$HuzrP7LKSY*WB95>$qImZ82Z21UxbVP2pL;! zWOxL2uRZH6tN?#d8sL@5fX(ZG{%2xdexMd=X<5B-ui8P}uh-VE_AV^AKA2LaPTgSz z^;ThF$+AP#aK=T=A+DqfO7_~Q=*6_a1PS6UawR--pRw2sZ5Sm)axt?QIA%IW3lB5^ zokdL7301FoWWvl-JFA)!lMKAJwveza*`f#rv5WC7Ex{6j(4#-B6hSewXvYaa+c>jK z02+}+G*u1IsdaL1hKqpaI_s95YN1@*+hFkGHxl~v*)G@J)aTFu=N(yjjCVu>ye|5G zHuV3el>9$|-7NocDoAK7jucEL65j`5453|Oc#BXV&a{-^54!4@h1yPEURz#CP-{Iw z0&DeevEZih&4F>1@R+lVc;E>WgVnfL ztWm>cLuE+Xw0hiRwB#m997!}wd!(k{)I{)}A0OGrSYL3eC`u+;8xUf4E@;{4!!V#~ zM6eO7Pk;WYSB>x%ybu!>Wi5kW7nFi^EW8#)AWU&q)V*4jY?R!ZN&?;j= zkpaDTD+N5GN!!yp;D142waUI8;%`4hSgH%bsPtOcVG{e;)Y|CDfdXVSUsXZ6)TP=c zsMNRah+DlFW>uB_wl6F@Dk6K|-kF(vLyje6%3Kaksks%Ip_W=e1U@V<_r@SG5UQn9 z_xY&WmlN#DkExn?aGgD$uCR;bTZ(*c>-R51~_U%IrU+m zK?BfR7y^1jK#~E+GXd|A8|bJWyLq4Dl_oXNQtFV<2r3lRyXl1BAj+r3%7Si9N~d}XP$uP zFrz2%te0aP7g_vv!;WFMfOrRHzp);9#{lSVx4YkN@9yrtf4}+m{rmUtKkjaCcOi5e zk^zbV`?Z+v%=%>_Z4ttj1gsXop}4u*{{HR9$B!Scu09ac{r3L%uivgdTz&j-_0yLx zzx@2=FTZ^G>E|zBK7YE}Y_6`x)rYH$-tvX-)RM86S+E{J&pFp7>)MJ5H5DbL_g~s( z0{z#3{!R5yoftUd>cOEre4GgVkn%}iT|=<4ZFhTU>6ry>9$pQjSi(mFj0Jz*$TNcWv{@B+aQP|e34UG6=Y?U0mF zea;*+35m8wzU5`fm6hw5DXP$(L{&*P%)%lS_2aH$W)X<7g&P*v{-Z5`9Aau{Jk2=x zBb#otFV}K_1E9CD0{o$AfL9;`Hjl2(ZwLMNS%{-Ns-gKI%8VvUk!4b^OFWk6GmZ2K z?aN|1<1$jYulu=j8Qn(F8AugRp%J_B}zKJSH2EQ%A>cjI056IDcj*7$ zB>%@l|JuO5K}^O8HWW+Yu78bFsI3^??Xkm|~Tf>d-(gyaBjJekkG`5rwqURR)%sXi+9hxKA0vLL4K5 zE+SUKD2DDuv-4b})x{Gdvp1~I42z1_{A({}W^bMGHhaU7(GE!-t&`pAi78NP04|PI z7=R`DFqgVa;kC3XFk6}bfC(bfRecpm25YVs)ATJY!eoB2>91Ad8rVP8EJFT zRq0+pEnURl@Eoq73x8@_&cA5cjoE>v)hof%3jI$`Bq9T>7?Vb3E@=3q!RBv;9VpPjj# z;JD&1q#ap61k#8DYdQaJ24Z3!)Z@M^6~Qj1wo~L0h0&HOe;2vk%Zt9tT40u|7{3b| zp#Q`}WWeir0$#=tK+o$5c!CDFC_MLSGyt7z3pkG(NSEiOehG_K>nvN9NL2r|+*IqH zH9o-lZ$&&1Ss@a^|1p2Vg2|*3hgqC)428bo2w)y81XbA#RwWtkHg?OG^vgKt1o0R* z$1AdXFlAlqJB0J(;^A+_XxNL2RXlcK7UR50)xIM7PjMi9yu9G3z!w`WM08H63?+{i zOq+w3EpsnH2^zl)e6Frg53i%u>GFX);%FM+;iLYWcmiI63}_{PC(r#)cmg;Yy&0;`8T1ja|(d|R2L9(l1i zXN0()0ZGD|!UUDk%GjjQQ|KE0Hs~$|>pzWej8G{rGujG?PBGx@E z-nAQuxl)*VY$o;-w=rj=J$nrqR*uR?7BoN($ zYOU#0xpjtcL=S`zhtp*A;8pV+am!h^(<)^AnTCKjrvZqFw%b!_fMd}AXIB0u`v3PV z`9BJmS$>K3XURNMr7P`oOuw;J=29_RmM5d#hK@x{Xz`KjjYO<>AWGE3!y6cV?d74W z7GjM)*edr0b-9DHftEj`q(N0uEDrgY3d%TDFfz3ueUpg#LwjSTko1KEfF+LQ$OV{H zJvE4lA%qzLIKF6Br#fg{dUow9Iw-nq@w!WsAzoIpTIOgc$~l}NO&711iML`1rsCc<O}YCPHyb|nBUO23eG z)x5m6?IC$}HbI9aY=GD3?D1zMv5OnhV5I^Hv=K8whA1gffkUclsFUzQ-b$@sIuC7m zcO&w?%hN!n7|7ORPX$ak&))4cFE*_}`bCt|)L7NewI*0{h>b-G2=C?LX5Rt!?W2&99eN2dzX!sX0PABCIo`$-aP{Hp$eH#zWWa&P zc?KDPb^fc0NQPM*75!gmsP0s^yWQRG-H)5wA3tt>T;JT?-s;=|Bsq!uooZP?p|8zb zAPTzdvek$K(YOQM+qs+He_XThZqDl;*H<4tY&L^ML`25eY{q7@`S|g}=g*(MeEIy# zFF*bDufP1`KmNOa`ltW!AO7(lzI^&L2EQ5f-++TtzOu0bD5Ebm;6I9g{V!TGu!7E$ z|Kq4Ip96UXc#wC)v(K-OzIBUbqz+2wey(Fl_qZg+$3T}!+0E#znKW} zjqti#*-o`_gt0SD`P;cIAyzO#;-#JbvV>Vs91MpEK)@m*riVh(lJ3PLxUAVJd5?Bg z5|Q0b4_u43@#zZ6e_vLBKMf6VK{8sUnq|MW)^aP*2tbL2mc+ef3BWc3 zoh(DAvXx4~nsPxsO~_fnD5hyGmzE8TK!^%iBcGzz*7iK)XWBr3a26?$S6&hfj^OxB zj&>V_JCHoC$L94pHIggxo{4qD`m9JvHDG*V5lj%Gt3WIoqE<$o%46_U^0I)SJYyme zk*PB)4ZX-QamYdujb9X<(}JF@N72`3L#DFwE2eWolf*uG1-%#<@X$?_WWZa|0GDI} zPN4xVgZ@7X{r{ay{+|W?$5b?!W`=Akx|%}|T;i@4tfiEChi#0|>mTfZLd1!Ano2r{ zEPbUslS<}dE(|t^%i8rj^^kES#!?LF2>@AA8fAX0pdq3~!B*dJii%pDShN}#3c*5( zX*n%Hjd<6qx1>TF$zVr^mm|u*rbc4$^1y+pce5;-tTKj6#i3OG1}4D6h@CKS zVxc}5uN)vI)}1=h8*y-s19`WyCr5TmnG8`?8B9t%T(hoilvco?XvADJn|6kBTZxa@ z5NR)NQFF3;$M2jIb!A_d{Y zxez}s+7FAi0-9=e3L?O98TOzg-|`ZEa^D*wXFDpa74_^RJgVZTDLZvQCBK6@MaR+d zZ1=KSvV@&NB%S;Dv+NZ}_#GX1GMR$M2j%=zH*)YxAev!(9L!T;4Pp)8h&d<~xmX`x z+av;~v%<1y?}o{RyIyGpWIZKE#S=^K>(c=J=N=*hUfUD!0^|AxJppe>1JLCR0k1{| zJ zaWa6J&pr(DUK)0%=5BX=btPkn43?k(Hsk8*>gww1)2EN0K7ab@ zr!T+!<>$Zs`t@&r`}*JicmK_Q{Ez?bzyF87ZZ7RWy3nBw4~D%Y2vPsJK=}*qUsV2r z7A}DcKF@<+g~M0bVeSDJe)DK$xU7_XvuN+%FWfUD`QYn29NKfzZMzrUcIpepgD-P= z7iMP8`X_cngD=Rsz||VS%tV-qUdocKquPS;7e#Z;2p*@~(9Yyvbe097F3GgbaEGPf ztiMFlVEMv}MkSZ_tt4ECvR~8GvbgYnVabi4@licJP7FkCfEspB(NGZeJD`SGE(yA# z0rofmdS_OEKN$`1Oful|o5Ay;f8OhWjblIW-SeqV2lIder0n^>We6~4%qBa^Vk=!( ziZnz2UGEP^y?g$IxoA}@e*k${3|GEX0JLQURqYQ)&q_r=)-7Zcwqx$7J}YD18e1DP zfw1m0b2n@%Eo08qhUI!-5D`c<*@bNUYj!7BCo(ZeGn{P5m^5Sk0kc4-fi;-3XZlm| z4Z+!y7Y?&8BJQ;E?g2+tvgf#Gbew|1UX%=Y@}{yq(`nETySvrU+!GmKbAGW6%G0l}VJ@X5THkx+K27D&kQYKN%;TB$n2^ksIyD<&u&dms#5n`zpyFyk{R7m<9rF3un{|t8VJ5hPEeilVGY24=d2uil zG>DjWr;-QdfR%eAg|`iB{Tz#85a}}_;=9c}k(82e)~#k@eNJ!+0m9B=Fq_LkXzp}~ zEHF*yknGAyqzXNc6j)(E4CxLMpGa(w2zm?wI`QfzcMgET&03@W_X&9MV<#n4$=-}o z;=Pj;?@Lz8+aMelRA?8a0z-6a$p6XB&#NOxFl4l}Ts*bpJxl|<8WTY8$rJFx(Lkr| zN-stO(7Q1N?2`d6$^;zb17vI-8C1}?X8Z75+1JqR9_nmsvhY~n=FBXtz>rav9fb@@ z1V0>6k$WbIL)hU0Nn09Q$q_hUVZ(t;Su-J9@c>8P2o{Tr<)MH_B>AL*GMalRb^E#Y z+S!d6;e(Wn7|mcg-;7#T&%)1yj05V~hU+o_FHN>bRVIPBIgf2mLYWmP2=eq?V;KZ= z%v!PZ1e|ayK28IiH&;LC2{`4*_Ixtn!ACgdwPmNYc~$7>=>MQ~bgJ&=+)cf^yS=`- z{qf`a=H_;8?>Re}+LIje;Bm@F0)_>Co0ncg@F51-381vy-Ye$)opX0_lZ%L%0Ise+ zeE9hJ<4<3{eE5Jq3=qNOWB`Qfrj%M~_?l0b7aB#VUF;4xu2Zjee@a7l1&AgA@ z06lxhfikqg7J$oe{Dd4+u!-E@`m2NSNgh3F%sYwZnD3xngnKp6vaRFHo!PCADm%$i zU*tkPa}YHt4c9W9o4h@OdDQX}V1_~b5={Wa#Nvtp=jkP?!h`q70YR-$9B6GfhxI&v z5G%l+k_I?~47k`%@C-g52dA9naSwxsq5>uD1kM&^I|d;m_#@E2H*-X>ycs)5B#FKv z)XWe{o@vZdE}NJUK@R9=;x1=8P+n1q0kIc$Gc#c}PBV3M-U0%Vp%PXF7A1Aarsr=E zM-wDi1ao?jPc-qiyM$Ghha}r!HULN3WI(6O|2;U{hExVAv}FO2fOcMH=<~F;S=j?X z{1#;)3l6emF?+9Ofjx%i)a}iY8SeFrZn#kBBNxcA*Vqe_0jpcfXn^N10q>m#cp3Dc z$A>=|^nZED|I^U_;#p5%-4C>+)3nT<9W(bf5Xun$R6#fzsFdBFeup9q1_kvmY>re> z0h;(g4XoN>Z#Np*Lc)u?!9^70D}RV73bNN;*ka*rQdPffBKS}!hiuuOzjq;6oRG&o zy8bz2&cy1$L7p&ka0(5KzmdXO4U1OU1czVJCTbk2N8z(VrCwP!#e@OQ{xZ%&SZ?p? zuS+bwhlGS#r~2bY8YVn=z9M263ms4hHi>#H5A3-~kG%wi?+dLHHgkJ4gY~Py*FkgJ zttNP|H`p67JjpP90(3$~9N%PFc$F0hrpttvBzrqCGZB*C7cN0f2wCc)cNc&);# zEPsy_LjnFJW=RpR~IZ)MN~2^}+FB zCg7E6fE5X`M+Ur-C*Z}H06IPY=V=;%{tSkI6%+6}WB?KA+yxUb_U?d)n-fXmG4O)6 zjk9>KZXA&uwl}GuWO%Z&-Mt1LcxI2wjneOD7+F~7jE8T+IL zo;QKu!N0_jU;YGF7drwLKw}5q*{#;WO?zqORI*zbw65l|llY+ACP*VnM|*^|8^$tC z)Gy;w1yR`26SN5K zg-+|aa1~}EA9gv!V7ff1I$FQReiorWDbUN8M!6cq`r@}y>}i~N%`4;;_1yJih!e zD=wugcWN!%u8f)lO`wn?py${`i@Ri0O^O<8 z{m%8he~2CFM#<#;u%{@r9ShlExSd+}FcB@cf+`udvK2Q=C6bSb39_!;31UL@)5av) zewG)sbK{0R$SC(9wxYtEF_DOO@YV4S6zJc%Ot@6UG?IRW2=#ckyc{hB&Xx${$PHcw zIhyY^6{^+KgGj5)_UR~iNS;C4SgE^7QtiIxg{$s_h%j=hpspn*q9JS|vkGqFR=wML za#b}Hp5}EcU8cM-F(QmjQbATnEPH3mWuNb&53jV24*gRA(LgT0quD4kxB@ym|E%}` z4e**w0KGp?0KZYD^N}F9RVdc-dN5C5uJlgoOG}S_Z57 z7;dbc1)s9G^j@O6%mVRk^%fTidN@9Fo{fxxZK3&`9VhV&J&T|MPJNY-*0;)Slk&&6 zs3KJ*?;p;j9k6ZLws0}r{YSa^py5<)63SQ}U-B~coxEX~2%r%OLg_T98&D*AgA^0&NpUbV;Kh-Ymz4SOYXzS-B)^O&;HWwFxEt|VT1%AH*`q(g3GVr=hAbDFCx5 zk2zJgyWRcn{(gIZzuWFqrx|9fA>iuj>X)Ct$hq6_%i~oz2nMI7rvHXB0ZOXb08CXC zfK#ORc>13nNB?omqwxt9!N<23pjEf6j3?(j52_<19f$Jcq*L@$Z}n5?KlWaIq*h2@ z4~v~5pRt_|ww>kB|Z969D{d-tS51e{tT*6nk^5%qnrRd!}?5w)(SBYVQ2RZn_pVFI{N) zqs_@IsgV%Ip#!Okt<=Po%x;N*)M{Cajw{>^*r*q#TwNjYZbtMFh2`HwfY>3vmNkkH z;Wk%zmYYy;n4FWo2%9lK`^Skr<1Aq@v{VXanR91PMW;^;2#u z_8-=bY>rV9`TPXk+06xh)Gl|Lm#6~Dy|!-6;B^4e+|T~upv?&krlfImiRrMKtEc~Ri;&f7var`iUO!IP84u@Pul zQ5jm2Wdf`@@U)CBYF*s2U>_(sfSF?dCB9$sh}OHn#Q=JZgO3p+2Zf($yvVo0Zjk5E z0EZUuS2hIDd-4Qa&Jgg=|M|Z>3=+N#4M1;K6f8%Nrmsl`U{2G@StELDH7w#d1Wd@v zkoZuQyLizO15#9Fd8(e$BNet|kvNqR7zslb{WpS|4iLc~&>Mgw@;DDlW;{r@c6`_3 z&Pn3X+ki%H6P|e*jEC)D+z$qZc_jOtQ9SW+=ElKmo-WY;G3@K18f>v)M2WWeL!mH(=$Lu56SKDn$I z;5>KO?Qnm$y}7x)zPY`-y_>tOSU{ASND|rSV?P{81|M}_`J6o1a6WXkV5z?q#877F zR;TJzHHSTKHsj;R51&7O{QUXT)z#+nr;q$zY2)SH7+0xlFum!}!w>AY!W{r=DL{b# zG`@ko? zseEwVK(8_DEiiUs(gx85YAy9DZI*Ayb+nk-BWrtHRTW|1l;a4|BY^yTj)hM@srt5U zbI*mPY8Y)vNB$BdeE^y|VQ-reu#ku!RYXXH+0MkwW%d>JBf0oXlEIM+WYDV@Y^=w* zBQ}jcjuqhVga%mc`J1!ert`OrqgD%k=$nF1Q}7rr4D{q2=5`sSZju|tlsRE=ak~$u zuC5FhJTC*#Eg8q*k`|JX_jc&}ER9zWUZzxXOCMeh#HaXnL)6lQP@o@>kiJ`Wd0=X# z_Vc2yFI#G%Y6V}8_~)1{64BrAcWpP-4iY-eQLEW35XS~1DpPFcMGK?`cFZO2+>sq- znz{sfgjrdH{nlQDu`SXP&n5$oq6A)y4Cpu5-F6bu$E(+%0qCNJfIS-EboBo$;s4*Y z$OVPb$N$kl7~(EIwzWL4rdKWFRyiIL%E_Q)|=Ad+c>T3Qd>HOaItoh=g= z(ry{XeP)4omUu@?E^)%FXozIT;acbraV?4Vk4nmr#26^d!~x6O^5)Wis|Qe<2LU41 z^jA3&Z@R~?C(rn3*KofDPLZu)k~MV)LxDeAHlO%Vt?FW}^j z`&E}1^?d3^y_OoR!u-FFm<%TT!J z?MnXJ%?et&0F*3ud7jZ`PB9arW_}a}J7YwGh3RXEfv`x!-3Lb5?0aZp{TOQCQ^%q6 zp5=y->ur;ZS49+i(#pxwoyjFUV%b-EYCjb03B;a91N1ld5DoCkOaQ$bPr&7vfPbR_ z=(u`-2gv}dS^MzuWjFw1uPfum)cVQXdnvae2i3F1BvN%9A%~QN_`3)Y3|98G0K*3& zUXLZ>O(QQ=1_(k#5fa96JhOW9l>f7Lm3tG8arPn`lVM>2o%G$qjRjmCzD#XR3Y4cc ziDimwd{a;U;c#QGCOQxd{jbtEu{lIc&c&p@Z8jQ$nSDh=JcYQ_TWqTI6(C*_?b87H z1;?)yXBqVYJ>o6TS<}7*`)YeERh1r=Pz3 z{L|ll`to@*#?{s46*+(-BWYTv2@V0`tB{}Q05AstVP+5T$@2fR(f<>m|3mKv&cglI zxa$FtzC5(iu7@!PrSk#SVGOArTa8sXa?HT7Ux23d)TKNWFs1GQ6OJ;X9V$qXo$epH+b%ay~RjN9#KaT4=oVweBwvL zrQ)8sLGkPyyFs1oj(KJV*y8m#9RM6jzo|~?`K>biWT%O9w%ppM_l-Zc72xlR1~`oX zc;;5YCx6lYZmo7pnHa<(v0Ua6mjy2!hpY2Dsqz?v2bTM)sLNu?v~1SO5+aU}4z`;) zWR)arYF3AzB2lNtju_k7r$A+(Xg*KntimgQ?J*RF?!Nc$ijY?VYE8dEbZE%}T@LAL z#GT}z@jv^=Us1@v@Qh>r^$g*g| zTPwC41k}umVJ}GnrSPp7&1ewfcGX1GfHwf6oo(t(K!&X}n?9S@l9*Mqw%6F!P{f1C zdrt~>*GLDLh8BA|Kn=m>k>XyFsQ%a@tjNrCB4USSGbJVpbN#I5d869hqG(e%TKTD} zN|dvdH#C;h5DeBLXfiG#R-!J&2vT8DoE!N(vLFQ}XfUSo5VXc+U#=xPB0Ln1g)!^I z$=;Ws65-AXQpgaU0I7%+$suh^P0LAkM}c@O>jQygp6#pw()3K&erG-a874#`VWN!? z0EKLXnZbZsM?Ik64U>Wf12jhS97Gbfb3aThtU5W^akWq?#0gxY$T1)r-{qz3{aF!V z23!vg3NYOvspK^buhO2(<#)_-LGVGNr|d|JR!?J}f<)2myX39~G2hAlNe!zm-V6+N z*Ne3D|Ey(pWlhMXS_sm5{s%u%Jp(Iz~1Wq`i1~{f1ZFd#;4_J^u=ia`t#HS z?0=#}w7b8n2nf1248N=Z1fPtJl zSK!gX96C^q^}^_XTN~NrhaB6WKSxy_!d5~MIjH%esA?1uP{jgOumwj}gCiZex^bGh zb6nx7AMZKNRVU#1sc2Jx!9C@X-ll3eQ5p>qTt=GG?fQrSqXjn9hM~Q?`_Xuu^E?4( zl520_3E*zqcr7wu_4R;qmO>wiW@aU=>Td3)V(#?r?*8s>dv|xY-EN_i`}=m*k;8m8 zStYu`f_K9uT>kMhjw>Lk&Z9aVb_~pyzzkK`o>$mT}{r2_K#}7aM{CTt4 zye}UB4p!_UUtIg0x&N9S044vgbmFJ43O**^=91`tjtA>`@61zj<&-|S4P|bdL-~vJ z3ht4pE#$TB&;g6?=`C>1<-K~sPXq!ruXjw(z3!m<-BNgF?%}LqtNNHE!mHjUmsuwE zR7{_VeeqQe++WueO1&eMQ<@1U5xr5}ZLLSA*oc%Pp+8=3cSyV4TEye8dVrm0sCF*j z$01^cz(&Xm`Nk?P1@P2B@BRgo^eR69cw*4n;|1tXUy%*1y{67o&-#b8R zek7sw(2DI*a9r6ow6T};A*39(O8AMJWl&W6de3l1?{m;<%;K&)U`AF0Gh+d6SDCF< z|C9mH&&)zZLlT^|h<#OE-0$AEn=1$P9s^8ak;e?CGU0gF1&jGkR|@bcnGV=;0sHrl}4(soZ8p zA#fo+i=_-opqUZLoMyOSqI|2(94gbe6A^hFka|ymdPa~7-mFwv?a5oj9D{w2L$+Hv zxg?bU;KrB=yX$?{O=N223d5#SujG>KqZVeb*WoA`M$${18Jg|f1gEfwqR6M+2p$}? zz$NBHrErHDX|!40FClJcGg*cAx08$bq7%0me6Gpc+DI=CDT1_OvEaI>xPiE9G$OyK zJ6s-K?k_C4jFoPh&%f?j z-2t81^11diz~<$5n}4D%P>bIoVG%zH1%Pf>tm*s75d=w%yTb~+NXCz2RH5x6Y}tC2 zb=TVm{SP2jY=!_{Z(4YZh4RPzBC!e?mf^}LBI#9R>_bGx7}@#4o)r+Qs1ygx@sez< zQ_pv^@MH#&42kxa=%2IGiiiTtqthp`okrQaJ(*smW3}obcshVN;t3jnIz4;DT5-N1 zfZn1fAjkkP_HXdZk^%cCO7C83+w0y;ac0P#En86T&HJ+`tZ$I%z&0AT6ra2l)0$+ zCH5WMBylG8A&Ev~Ynb=^A7x@o{t+>*Bf5VLpd3c#%Md&AQ8?Ms?A)q|AJF{&Nv!~X z4>Z8$g>e7Vq5q>ddm#q%80K%!O#E6_vU|`D-z=61z=dMFwO=uFO|WPS85^qzUX5t( zP9@D@lMkbPwjfv~m9;767M|U_nnr;b#0`QM7l|SSBe7s0x`2X|^W(K~5~lk1tZgaSSFOBkBsp73Kp(P6438m9`wZaq!eA05jcjr1 zB@OhHWbHZnxW_4hHz5PgV*=i=9^h2;|KFhhlc4`2x0I)#|E`wMRa{3ev0KKrYoq$m zRTa(O!@h;5gTU7WVxf#^=YC#oij6h9(En50S8{XZWBJx&ZCKTW=59; zi0><*Lj@(!bF9|>|6c4)-%u*Neo=Gcy~)~MWRw3(^c`{*##+#PkgP4Mh00BuFp~l@ z*bX>}U3gC~RrNt{xN_mS+gEFUO@o&|CEdRgy`ygFAa%f{!KEBAL<|N84-FPpB@&2;?o@@Rg z04@an;OzbaG{AECe-lFhy&F%!aZJEopwN4#0qBon2x!yo+-`k0HzoiFlyS#@%DwVF z^W`NDuFQj59k7|4sImuQ%k(^agNmlm#+2_eLdfsI|E#KGY?v6TB7;Ocna6}vl?shg zSb00JseFh@j8_2E5&B@eI~8FIU@YUpQjS7dbRm{ZA?1Umr_^NY+xFemrzpYWBCMsQ z^!ZZH5%D_4MyEP=(vOFLAH=vnCEF}UoY9b$bUtp~+9v}}@&uf(+&|6}aOuTz?Fo1} zGGNhggYK4mV$JYjNTE7+yScrebGN&@-`?MEce^d-jxV=H#+1QWE^*8b9XRg=dq#w4 z{}Lu;8cGV?%_;YHw>LLGeq4Y5eq&t)*EctxKYzTsx)Kq24+H@Ab@pq8c!vHEkgEUS z02Df-1X!Pz|MSt;F&;<%anv&XP^~SVbuyNo&R^ZXr5RCz*+hicjI)6|QJw6#-x02i zQ9xFAL`15}!Dis2xU=O4x>xF}aSmc+pIFskANX0#>qb2Ygd?Lh&JVq?6W%dT1QIcK zI0;v`O%k`-BE=(rHOmGt9qd~qbwy@Re*(M&#lc{q0qGWicFJ}Xu(rYgUXnpzAyOqC z(c|XncM@%TVv>JyyWXIz2MFzQ{428vY!jB?+;jKLo%p!z;!kM>_;b?$n~OvLeDar` zmZ~9;>f`OJL0mB|MbW%B;D|{bXhUM@SWC8SsO4wbS=YYBAP?)sl`%YH0`WJNWy#g^ zk%7Gm%`|9#Rvn6RAj{z-58tQ6#1}6)9fvKN-yJ}(xB~UyN%9zf${39-d-PqCs~a5| zPo!*t{xMl*R6?2&QqGEu^2cnBF>31F9tsqapKP!+0g=wgH1iVky4jB^oPRMg;6X~@ z#mIn@n1Hu31e{v=`w05~N5TD%zqD}1w0|!2KaW8fR(Fx-c<9=V49}uTbAL7DVkt}H zkk z#m-a&WNezD#=uH1$7tqDkSQj#TT=EjXXvSTIW_kz$*$W~f##FbEavst=Z9uad zDtqGk^b?&4VM?PcmcN9#mE(NxF)%T%%!x> ztLUck`~)|wO@EgR7V)7w(~0{1Wg7~EJiA|AiP|!n-B(e~^N0XFchMP&tqM=AnE)U| zn3#oir@V135fUGdD?Sr5Sjw+!UnSgNp=iQ{qOhn~oGlb6EqzcLbxl>Y6)z8;ex|aZ zCwJp{G9MN=z;bJbvkRG6n$RIkPq2T2mL>hhEpJf#3RKnJE3jBF;+j-|Nu{Cn?KbGS z-3!opg}@)IO1dZwa0tVGLqh<)Cr`kk$N67E{{P3N0qC6@0+w&SF##(>0FLGZvgAxv zEw;YwMp?wtQO*FtGvL(d$L_|4>?7ywU+-X*j;^-IXzP?rg)d z{YaS5sfKFh}-F7>-+wFF{-R*XLB)b#`pgxo>28Vje(FZ`1u!qeiqykn_ z)j4 z0D7GK|M+bak3UBo@fbMf82H$uJ&lP#7G=B*{rBk3dSp{iE&72YC8y*>t+djH%P5E; zc?9%-aLK}B1j^nf&TUAljRiLbJO;7&Fo0qu4gmR&_{09ZR)9Y%4Y0Ws?tdcmfBp|rsPO13Bd1Q2 z3r#{oKM|4HFpUN}IVWbNPvY4CER%PxC0ZB2AV9WeP@JIM}$aY`ezeH%TKgO!qCb)}nTGKtelnp3I?>OBXs^X??K8(>@C zu-Cd9ePSy6>Y}Ck+}NKW`xO$8?#zJ~3AnDlArxFMHky(1I!O_Jz6oaOC}STMmts4A zqcWib^|FW`hvdYMI6?v<5uQ7>q#(zt#E;Dx&YxvJ4Haq|I=ORN*q^#pS*ofxqd|SA zXxqCN`MU7RdLqF=|8%&jLI79pLr>aqQ-o!HP<0b976%D6g|F*;J%&P}tU?z!rCSrM zwo{angpwv2C^pNlywLkcQ22Vt_vB*Wp@V*>0UojfyciA8mYcUS1kn5N1RR>NR@nR7 z(*X3xC<>-i4FQK}09!p|jJ>bbhd%Czn-6-G99y84ZNT6Yz30KwO;{AOj987t+qb$&B+Jx{2!Sgerq~JJsE8x6|F+ZFh5fznxP#J@J?O zC5t4&!=KCuUGOwnyt@R5m?ogAbGN;}ySu%;yS=@?y}i4?-|cq0sj3!(@`fnX9xlA> zOKgAZ=s&FK*Pwr6VW86r0Nlxo=k$r{pSb1_G$G0scgh!aFCz}G?1LUJtgML zDq!&?(&+*2%LAGM3iZ_WFbW5u2l|JxKja(-0^lGyS}a9$xf9j?wcHuq2A$nm%q>K! zpgfQCv5GkVF&d;YmQ0DCak^7J4hR*k&2a)Ob#K6jXlNijB-{Y{s4EM+O=&^!F{lJM zwi|QAak%|A0`<6rMJA165D&7TZ!ZAO$^pp^HdW#c6N!fcQ3(3L8M_q67~-SXv_G*G z;Lk?`NWOh%gQs~79(#2>lV;!!7r7fCB@dr=;}R!x6QSy z*dmdEri6`wyd1*>i2DOm(-WoPK|FfmSn?j|d1aib6#bDMNiY@?dyDvTYXeT0rqF&} zY&cO}{XTs4Uv7Z9+fMs^%#rnsgD#K3W1RFY|LOnv_9Xhx=zDK((YoY8+r3}aKS5#WROvfJZbSofkpgsro>PAtx z%sKX6Kb;^j8#!rn}oEYWFsBzLMzI3(qvL;Cdm~~=|bpR zfIUf7sG2A(Jz>^k8=H|y=Bt3dAXHctt#_*R}OfSIw3MK1yc)mji9VES5$|5!KnN^=Boj;??Q%AzYPS zV6<+FhdmFx9s0p|h=hRu8$Z;t_nbKgd-BRm|KD4h_mUZK!EyenE%@9Wor%wb^3R*8 zk_J%UfR3X9+Q;WB_?$ZD(Njl(4u(NX6U8Tm>7pNdhBMktM5@zw+2~_zH5>5Gj*G;; zQPFC4!iqzUg%6vHD^Ye{+5)I*eOZ=~2OP2Goan!i^mfi_>lP#0dZWgza4pYFb1=gj zK|L(lo^aG1=Id?3rqoAB+OnlRV4ljN!o|xQbt)q1-_rv7Eh1c91+7N;kvSPhtXumu zK>j{vt+>FEw~kh$i+c>s_JKTsI@AHsk2X%#s3e8mUS_!ob|Qy4Zsg8t)Z?f*&r0f+y|24LwS zXsLXUdAUWq=atccqsA6DokudwXk-O5!$hbS^6c+>4)pmyZb?~v`-;)Y<7zx1=F(Bc zV}dh?`hsw3+HVp+*7<%NY7){tT?;b@ka zP~T`nIy|KzA&UjA$=qh*CNo4-6(l;&(sY z(0YB*Y4t&Wz@?o5odbBp7VyUP0D=CW^C4Xh`o9RLc+y36;$%yD@s|WVaeKf!RH=s~ zc1gP(_+8zAHBUc?GQn)6^@wcsrZ}nBrzpqhH2s|^<`ucU>zpEznLIJ*Q=-NZI_%k| zk>r^2@E9{gkl6GqZtb*g)9_u@vo2AEt^Dz=!qvUfR$YpART6GpzW$LqTw?NlwMukq zh3$?-NBI7-94?*@lbRqUGFoPwg;rYzr|F8LDVch-oxL}%2aHxLI|GPTowAv_0@cBR zYddzV7TrVHVL-4k(W!Uem0F>$;U)lO$9t5}5Hrs?hYZ&UIm<%KmJQMRpqHxux~SD; zr;%>=|FicdJCbJEnb`TxHTRe@a;jn$D1uN6-GBgT!+L>U76C1^(gU!#*85061EjVR zBuJ2;1-WRT2@u^2s*9~A0RdtQsOD5%tZELGm6;K4_Z%(Gcz-i@Hy^_zGaZ4dNDp^2 z`=@))`OY`^hG;ujg$j!(hh9P0t8#mTu)_*j9k*wW(QJ|^$n5s7+yVM(Aw|JH>gM2| zrWD4`zE{;$RY9L>=#rPwW5m41@t>C}qhdcUd#I%r!9pw5mgJTZ8UK=-c(IM&C%LqPyN2~EIe@qa>U0D8~j z0q918fK?4(wPk;1j%fmlsTp1$Eq*Yg=~bA=iU@B6buor85`J5G9p|)F*)qmxB%<#t zQ@ZOAFk%bfyrC6DY={h^hvIx|ZLa$*dbqL=K_CXplrcCo#3VAAN5VA>_WT~zOcU~k zXI(FBS!QO@2ov^0E$+WJfWbUKI4s$M&KRnb@ZNyh!~fetB{6;x z)u}qktp8;i|K-N!Ke%-#dC6S933act54vHOjDvL{N#E|@zJ=PlF)4R;dGSP$ev%sy zCgfY%5u}3>M4K=Dc4x_#r{>015d|&6Ocy?yqZzEcl>X9$+{hHP;MOeg8fkP=wpa@h zYbqotn zB@yOUf`E?x9}@q+rTlNs#Z4*yC&W@+uZwByjuN6b%%Smi)yqdSsSTc-`v`1T@>cs` zVVrQ#Sph)mor)xFLvt~QFlOy^OSF77(S;+WG;E2cnlzM4P4UpNP%lx-V4i`bio}}f zMksb9qCwuQiw%HlJR5E{5`BI9*^0)ki62@j*XuWUeUs)C&QOMKZ7m%CW+r zy1G#4_9rExv30rY;BK?0?Q4PI%=cy3K)o)E(ZMl0WjPABZAGfg}MiZ?hFTR zY2;-Dk-6VryuEn)_Tpl{7YXsoJI?^F=ZH%7nzwjo zmWyOp8S(5K6F@gWgWFH8WO#She&6yl6h~)LUW}7 zwK*+yifuJJ+Q*4m&KDKna8B6(+{(3Vi2p)lY!?zmKZ~((_}4|~b?Dei@jw#jf13N- z*%QY-UGKgL+@xbe#2gnVn<_^F9sPHfvHQ#+AFMuVO;Az^`8s6=6^%K%WgB?f5phe$ zL27)=gJV!Yey)!*?>ul)y;}Tl)Aw060NdbToC4mQt^=TNfE0k-n-l22VsFl52jDuj(vJxqMZD8?eQPU-#;nvJFp(uU4yy>D1X#JsL$k~Cwo^trau zR+2mm_2kCD2rO7Qb8*={m}?mpqYQ+hzIO$&I2xQl3eu^}oIVw0x#P1z&9KI~-@EL~ zKcm(8MwS!?#N`gAA<$6iiiX#Ms3g0HmP7@|j+oh?8D9>~Te|snm`f%PntKT+A$I$Z z+q=Hv2K)CzDg*K|^|fI80qeCwwA%x)XV|0pbT%v zR=dXWuc9S56WoJ&-O|U6Cc~a6@4O(KX`0>;DNPShAjCUY2>mKKOF*jrFn+ET2QAhj6%rAzoGjXUzfK#XB`JeQ|yJVIx~sS;QkJl%{k5Q^%97uvM1{Zd{r z26(XQ`hbRycSntVL`{I9|3CQQ4}br6e|Oo8zFukodisKZV`>2SAalk;mwF{gY+IyC z9C?DKt23{B3p-hG2iJ}zU&Kmy#!O&_%i`o_mNeurPaHa)Z^;C&PX(B+zd zYad=jTr-%x(D3b+n>4SWO4(1b-dr`3S5-vWX?U$_1jGT(o9|Cg{eJSCWS{f`?o zRoDL1NStcCtnFSao$r9RPg;qyY5ZssToFi0-*5T$(UhZ2-^B+52A`VQ-&*AC`&8bacliz zrWnHKnkgc{2%>9oUaSBQSjCH1<`GWBhG}IMu#F&D994ovQcV#cX+cU%I@Q6cs8HK_ zoAN*-wlLXzQAx-`3Cmi#P6DN;vL;gC9vI9b`*`l4hLwQ^So9!K=k~?Xsfhby4g;2v zz-{sJw{O0RzZ^CUIQ=QSA@ol~^ap?XH~;j%{FS57|9gb{pLn6~q!hUk^nU}_tCK@` zXaN9QIJ#5mG}?3O&)ueGMNUH-e%HoyMne{=u)kx4??E)NIWjgtyRnkXG|U|gz&-|u zE?px!mas&X^dga?>0Vd#7B3k)gJ<`dMJC#HclUKMUt^L?(AC6pDah~K?Uf=n(9M1CcX($8z=!i%VF23l z%{;b1H?3R?G0SAl;vAH_absYoHI|>TEeiCr`7{J$L=4!$fs>B0Z6bQAGF7U28St>9c z4+;~}!QS}41qiFD#9io|rewZQZ_c);fCp8uZzKlWfIPanv{N&KyX+PZ zt?+mZk(u~!FF&$`y4@Int{nzkJ_hJ-ec4)ZhXn4YG7QjTEB4_ez&mD;n5nN@T5+NL zDCZwiqolaS55>SqEV|=L`IX(@6RS;8%)H7v_g;IY0g^C|^r6(8vcI@^d$GUR&;1Mr z#$%%YX!baIuYvBUsC&-Gk`|_KPgi8RCr%6gDdqU^#7_C)XQfP*KL9& z+AUlBx|6i6C!1+EdSnVp6}>rt2xHL&NvI+g)Mf#?%umv=8jXL-Sx_HLDmuuH)o}}2 z$XtF%ZbE9a_pw9>ju3a|tY(AFJH_6g)6Ww$wdcMlDNWjj_ z@kxM>>OnkMl@{s8!A7!Kqm~Eaglg}SAHk6s0MX$X;K&T%;N>v*a0YM$?Ba1`20--9 z90Tm`4RL$mU1YOMsjAL>2|qnnayZ>m)m$lq%Sp)&a+vitz^d{`sHO0T*xI94>8o4Ltp@(Enxz(9!>IDgR4{ zuMcxbr+p;7{Gy0z7jas5u8v1iy4E&$Q$0AHux0FOBP1ID8Ya08{@V7(aWBg9iG+m2 zc*kP@o!O*0*Ed4CCzXcDm_(&(G(ZgpoaRopPY@A0r$@oy^2{u)&* zuIufl3JQj%N1L+QvlM|poElYpY`{o68V%P)pAb~ho8FMVm*nwkvL4fCA(DGlH}YhE z1)rn1lk$cq)nq5 z`kdt0FyM4ezy|%l6hr))jsfV23j!`51Efj4<@Yc*zfVhDWCF8_VuaaFapcwfgwqwt z6ke{W(k6-rGpDv)dsw89a$xADXW|{(%Cvw8D2}6u5LhJ?36@f*HZ=4UM`q-Z8*a-U zzWilpYBTQ;r(uC<(%E0PK}RLpP8O}GGEraFOOaPE(p2VNc%*bJ41z!u%b-aFq6ZZl zNGB(1Q~2Fl4R9UQf6qAq@9!8O7Rw`=0JNipks<({0)~=!jg-%o83b91l@acOgR)~M zsklMmCD#HVWrD=$omOCtlAd^j4Hp zL^Go~F;JHpgNHX|82-@)JHW_niCh}~KQUg9|79j(Ff5`6UeAxX^!=N)`r1w*IsBa1Lh&h7_}E08w}Rcfae(DRF-rm4)p_R@=2_ zTY~InR7!U)_U_pwbpS`r+E{YQO5dD1k&^979nxpPR^lgjS zO!ESwmWD0~c)7SKXPytz(;qsq^6u;btC_jK_Gd1f&W|h5-X{Y6*N>f_)3=oWyFmXp zI;0zaDqMDG2($A@{41DPRu5dtWvzHRaO0HLb~gG$^IEYdYrr99-FkwjlSwXv_P=he z>%&4e(BHwC<(LTSpt8->>p@No8gy+adcFld;X&17z-&U6E;>wn0b1#1u2CX8TK7D(9VN zExEXt)0F996fs|M484JbIVmXcm_b6q1;g1e8^i4PQlO7!n&YppBwoBDxkW4WjOi#o z=n)37@o_e3$s1z7r=;L8p~3948R^rhZC$I0nJ2v{qYO+e;!29zY?X*f!vB9=LU2fS zwyimDOPkOv9#*QCqrr4!3~;#=Ajbe#udRRo`Z{niNZFh6yT{fUs)bGa08hN)3f>}~(2Omg(Nk;LUyK^%60 zDpOshL|84!G83{~jzjH7oc~3I{zvYP9XWW&+}n_ooddD#Al-Y~&TwedDqkfs;W=~Q z0cLKyEnPAUz1tXot{n#4O%t$ruO|`!aHC-~3CC_y1IcWO?Vb6&U$kcC3MJJ7$o$QOf#sE+~C z`akLaQ%I)G11N)kx8VyXV(NOZ*lzkM-NM2rqW|{-{dbZCj$Ggn<4QO-H)EM}Ia9?! z`ZTpi+jA~EjIh+tj11cBO<}m~yUVre!9vvKVX@}OEi zmnYbvT>kyXNM(Cv0lUJmS6xjmm5r?Am*?iHG#4LfWsB%e!(y>B#=l0ImJ-WjQrIakb8=NDh6b3Ts8He zsKUX-Qjb(#r`37i5Gla>G6vwo>u|Gl-v>7QL0|q5P=#jJpKhvgcI2Z4`HGGAEdrZG zW_=mvDN=QDVWmdDw5qj)YV^(pmgHZ;up*XYj`UYMsF*NU#h0~CgbezYG*Y`5Azf+V+nX5; zU+Ksm;X094lrs}ySnd{ZU+DiqH1EUKIA~w72JH_2>@VK-Kij8m69jj_(OuWC8)UI; zes`0Rf^6hYNJRM;Kl;nZDHrc6j^qL7X8teX{+^4he*ig%BS?-{YCJts7?!L{K8((OaScXDn>A4eF=uEL zwJHHke;ZV5Y9z8wNd|JY_aD}D7os`s-U%J4WD*4);;e@EJM=YviuK5&bv1qBl$3N@wxZums|C|9_hLC(MBZ9N7 z#chB8l(^BW_xWpzkeBG<%l#aSVmjEdAJc# zv$ye=NWZk0#4`_W3V;gNSwTLRbmx9yi}2VP%aYBuDC!gT;rXSvhpmG4C$He~JN#yF z=COafE;RUx3fXsLdSAaRE*OehHIq^Y_FYB^-3QXj01=0srv?6c?61r@_j~uBNyzoE z=Ll{yg=6=!QlZZw@A>SSzetop&~Pi7bI$$T&l!d5JKfJVU2oK+BrWnc(SH?Et59bI z07x+jR4>2j5B{heMYKeZzQU#7IQeNj0sTMR05WsqiN?PfE^;dD|vjNa(;(N)F#!Zjca&WLBHn~3s3lD4d|%)EJ& z)IsPr5kwfw!w9uRP^14RQ0YrLXB>{*R(}RGq_33^S>sk8{%aclR)BD>E1A37IH$}InGNl7%g9s-Se5IUgzA$)#t@m+ zihFFY4Mihe#JznHYE!FY+;<{|b(#{f^e0!h50>Qm#Ys>z?ocNx$}lg>EJ+!zw=+o2 zZT!(3kV@cX`Nm+jC3sho|nL@%?Mpkt@C~zWVamUjII^{vY++KGp?# zqLhES9aR!nA7HmTbW9Zr!b1K*GhtloPHiu^;X4H6j!QpDQ9#Pc#5vS(VgRE+T)%m~ zVsRm?Gzlz2ogH5dY2yr1`Q;-J*bO-vnOeR$9l1(Wow65L&Dj-GXGw1J z?V>hIuDWIhZ^uxzFIK_6mkQ~1qFR$er}t6s#bXlQHZ%sQPKixWvoS~yNlcllL^>mE z%H0ec1D|s_X(rwBK`+#lvvO#y;6=1$$s|4%_l)oev7K8^0h$x(h}&{(K_`-2sqSb; z-MiX%vUF$iQFt$3$qauqI|;*OEESU?oxl;QXfi0?(RR|f6Ow3~1{$Ga#&Uz#U_3mt z4I0c=Mf^8tCnZ#o=ClcQl)gLtGNIO#oXLh%;du@?MH{*_jSpZN5^q_0O zm&eoI9h~!qh%v|pN+TjbUE_=%^@a`Z-E=#$*)K4woox=GpgN+1G(YyK#y%MnT`Ss zI~0yc;U1(*qQpwr*|d^UgcXiGY!WUuP&}yj?8A9~Ru#SA@DHE-g4p6(kZ*?Gcfi1Z z!?o0nujQS^;7nMHv|jJ=!@~!as4kL*Z)pMKn<@2|CY=K2v`@+Ty4$ab@2z2%dQu%2 zYvC=`0Eg|v18D-@^RH$*&Tf{Gvmh@E)#LF3trZ;pT_dnQ-HNhYwtj!wSQV2Zg0vIUY|4lR52Fy!n@aB#QL0o#fQ3=0{AO+MM9dxJ_sZ@g`C~Brr~D^&UkTW_q|g@M%50$y4}?V-S_8WVZLtMrZA}59{IMJ- z*ZmRFSizpjF*L_G0raHav_l_RfZ9*0^9P&xK2cVyUTg(7)`AU8*k!)j2}UHxBv%su zj6U;YsM@XE&8hvZ7o;&VjopaN?~=U-@HHV)$IIB7 zh?!jqiCS!}@M708pY-QlvHMS?5b$l=W_?S23a$f zYY2^WU^7O)63ue?bfQP6D$?@oi1CbiZKln~H%81o zS3tyUl98}-z{u)U`pBpX4!l%h#E3ZAEu+)8?bh^AAo9*mL|EC0hz~nacS^9=P0Zcc zqypD|hBQG$gB)(1l?eq%RQG~SIbv&gXb5zQJNA^?+V)8EkrUaA<26%sik}woZ_3P} z1>koFOl08y>fY5_1pd|~*H&v6BY2sJj<&+$S|VgJ(~V6Q=@$`{m6zVf43rSRF10>f zDKf<_XeZ-)TWwO6Y;S_u)EhGmc}+m}l$Yk{DiPKZuHLh%BzqR0owsM)Ue?fgX#~ay zgeZ7zsgt!$BVg7S7S&Ka4az+nmh=O(nqz(5j)9hKPIbk?>kQcUND8p7tWN|MyHXSI z;`={13H>Mf!4H4yNQLo@Q3KFB5(M=9|M}l<2TpGqkUV@kbjvGHrOATb zB*oUA(a(gn9d6CzNP?phVJ=)SlW)+7E{U2UTZFB9^5FpzS92U&{h2LSz}_UhdBXpi z+3>4`;GOlz=z{I!{wH6GvyD>!dosXyFbF)Dz>JZccaKCu<*AOrIr~G=ie9f&6lhb4XgE$>%FRE_>`{y)cJf3IG8PoJ{jC}w}~!0089l3x1!>A@6W!%W)1*10lj zH~9&+@=m;F7*U2B1s#a z28|Qs6HvHOa0eX#eUqdB^d!{)d;{qJ5w>LDn%cdus3xK(Pvg-!H|{g> zv~o7utYDA+0iR^m$sf@3;<&c`wou*ZAKp< zfXX$x8-RdE1g$p;QbPPzT}4JYhL`nDmSMy6<;uo>`Fc`t{~`K+QpfxRp#P^(-{Y~M z|3hzzhl2j`7|?&zP)E@Jql;=%^8!UL+;FLzQ$){fBHZ%RT}htV=ewpSfON|hqOK6# zoRLf@jS(~-ROcS-(lFD=1_+xMQetk;O&{!+Yh30=QKb_?`z{moa&62?Xsc7>prjJp zHBDBWWtot9Tly+&FmQRA{_;8n+n`GGygnxj~xji^nopso6W-V|(yCz@H=iEz| z8%XNF{Gc7wCZdty!|vrH)8P4(S?k=39ZUYj@c(=h-K$LdJ4ii3jPwS%X z5CM3G%oK|76|Fc;8+$m05Kv3B1I+XS^6#s=(_GmV9i7?V zC3T^nCB6J#FMrN-n*>cEL8gOBX(jKkE4(4{=~)va+{o+Neu`>1s$XLRf_!)dU((AC zPRzQ~PjV?XWf>2^Lt*^@tEw1^%vtK$+)1%d9!DRMF-I5eB+OXy zoB@iQS87X`n$tY`lTiX@6|sCr$_3mxo0PHSt3Dt+ewWJK6;G~0fcxk07$Vc7&rxOy zaF16_w;f5}VH07AfdLbPMTm52FdfC?V=S~vKoGOS4Zwz)#Aaf=G$&?JX#oi@$k1uKF@|*S2qk3e+AG#0EpFjA~ zU;fkY|JvQ5|Hrw4PuK0|4!5{o2mK#@BveskwUSWs8r;S-79$T2L_;BaDy?Ux1>KL_ zoG~T{MdHBmvY|URu51Hk?UaSp3 zoBwPx_B0MC6RFN*(?@WwPjOX5*Bt+#oKtlG$>7fxL`8(T$%={Egaaxf<~fl#zNh?! z-M{q;lZc?K2E}t%TZ2;CVoG2k&*X_rY7*}PRF%Z$?>-D`9hqni%X20Kh$=g5L@C*h zJG_aZyPz@3iyBs;A~8HjV97D_WMH3CNSuEdVV0X#n*Bf{goCq2sOy#M?V50~-FJ>J zY}))1uUfjjIKFNSaOKkc4jh3Fcl4(~pM?_9i{JRoyKl71Mg7K@0@2-4g8MJt2>ji~ zW2gU5r+k7kW}U+g4LsWX51qJ*A^Z3A5 zg$;3VQFS;LTd%H!XiUG$O2M!5md|xobcGWxlWp1o@xSf_Y<))@UhcAR{TkOjXf}Gg< zo_`s|&DqdnpuGBF_LvYACI}deGtk9F%i&Q{uX9A^Zs6Io^W7L{XS=hrGafr3o)aM5 zahaP_7;ULUcb@aFxG~hJ(3{ldyDpA7Nb~A}!OX*rj)|N%;#@{H4`Dp)+3(eIB>;;S z-`_N*75_VRcGG_;2wpF1rZ0J0;QH-3tMQHB8je0MdKFZ4^n2kpmIKAi9064+*qS8D z3OMQfI#>Qv^WGte?P3FGcOqBrGvO;4cOfFO3(F^GDh56WufLqI)dn#x0PxJI=o%d! zQ&bvlee!hgnG%w$iVCpAu1v3V<5qU*!19!6c)&K7q2_zrIbN{{cO|Poo^9XntsFYv zh#*v!r^w;Dmf5VoGSg}t)beR6K{;VL%Q%RrOi-Vf7~&=s>SK!)ykbuggH!$7=LgI} zfVfOak=lLjq^Q_cbz74y56e~D9i=sE`sM}ZF*_hS;s|tL2Sm+X=dzb`bEN}EphG(# zB0Ay-bl*lJPs9|6Z#0y72zQrTib>4EK)yAHCKRls@7O zJeJv@;mYN(xMZektAQ)(GnJb$7=SB84NH}S(}IT8)?)0LQo*`baRF)hgz=$FU@a8# zGxFf#{^!_Lil)sJpKFbwqVyrx!{HgsVJDOjQDa7utyg1ZPoy%#*v3~scgc^Mxz1rB z^m*4x=%3BtQIfsE21D4mcRy$PxCXwDfP!i6r_AuOkI(Cj{=Lj8nXPNkPXO*R=gbge znUaS4nxl?LNY<&|gh&V@riqJXUhIRvuXBny0};{O3r(#Z)=vBs3Ok=j|MClDnTl>h zM--9Epe5-#U?TSCoIz5v=q${U@5YqD&)v{(A^ym6 zCFAzibQY>7mZMH^8dskQ1;|oz^<#i57Vvka1~|IGzl*QkC%=Ac^uI&^mtE9v z)c`ld9B(>BSZahs$};a>HB4+MN8n4+ZmmpK!26I@BlyMKguM1QPLA`E;6W_WA&)VN z|4+d1m^3RJ+yfm6MG49zFqTW_XDX%1if5taLR+Eib_~YG-k3hD54dwB!S<2BJNHHa zb7lls8wT?+8^Z{a9L8!D`VyvsY3mvR!b+l>7F|WB2*V4l$S^~W-DI=At+)7XZ>JXd zaEBJ=E}DR|XXo^F`C^8l{~nkdVp$RS#V^17tDpS*r$76<&%gL`KZTfi3?AC@!J=wEXNAcg)L?qBG?v?irt?0QgaG{x?TV~Iu7=&2=P zqqAAU*Ua4GY^S5&Yp%*M(Jjijiq+L^>fq#aQVEM037sfPhTL%f=HVmD#HAll>X}oZ zRfv64k1B;2qpuw(O-U*;?E6AGt(Xj;J7FHXkTY;kq57@-UDq?W`@@C`rWGKf(H#GC zQi651k)Lf5)^353HA7*k>f?FjqWRlsq;OMhH2*rGloJPl5n$ZG9M@hs4Kvi{DI%dK zAc$qj0>954Y3-&^J#CKu2;IM`!#`i}g?U9rk+*5x}>U|D!js)3gKxs_t{lgqz| ziAZJw{Yf5B5)g^bn1W2Hle z%7|IM5J1M>ux>5qF~waE1l?dPo&ILBx8_NO*ivmQmL?GS_0iBE!`eIyf`txUN09k` zIY)_!xQesw?17DYa=l7xR|Dn@kv2GwLjllsim-9zB@Z)dU!@$aEz>k?GJ%o&+kE}L zc{P(iT$L($iO%>iqWtm|_D)g&3Z>J#90T0r{&yPae_t>4gCG9Z@Bi-qaO9%Ww`zdf zj{)){G5ExKp&9waF@&?X#!lMpZgP}u+1x!YteV~|?!{*SW)|#Fyb=bR!$5G82tqVM zQ|0M=*4LOXS9&$13Su`HbqqA-wMveV1|!zFqv~pfkbj{iy=QU4(V$h3 zBT_$rT>C2sJ~>znQ2~$TG^SQ8FL(_;MJ%0|$hR{_k5au{-n87}x4oS@L+tiyfa8zk zO&aj`7WZe$y)$cE11P8b{ojB77k~ZJAOHBTe)hBfcz%BNYyZjjKKty`4?lQyezs#) z5}hgplKo!9oHlTNe)jU^^XJdc&(F`Eo$Yw+2oS-Ps@DcU%vQ<`6BtZr_8uogrl$L3S^p=_+*mJ{ z-1(8ZgloI#GEl~{$RF7%bcs2FUeeDm?Z+iy!f1MenZ>gA0~qdg8owTfquk2o*)jd# zwquDe4&_JtMkJP@SnW#|0Rd1*bwp)?n&SZx9Sl{P1{?(|KVPK!N2HIx5ok;xs|?Kc zpIPPg*MaA6wbQL38E;i|1sb;)ZM3F#qc@cjf@@h4#TI2BG^b)9B0=A{b6?7I8I3xh znkL}L{bruJh!Y=k?Q$ol%nkt)#P=o6^aL_!P9dbsL)A7Qr|zj)Z7?e(R1NQOT#>1J!$CwT5UkMjs^DJ8|*lh6`ZA+SLuo5jwM+0 ztsrP9aLDq|;|9VQBDyrRMG(=RCy|xa+p^!{r zlqF@bMawsUxn&@Gj9~^_D-qEYSpH;p0aj$}u!~+PKnj2}TuYUiMWz8NhyX*Xv@aj7 z`2E^q0hGjaVrlE)@E-`wvfrEM;*^=r4^I~Ew=eVeKd3prS6N&#vez6_c5&brL`d*_cciO)J!&;ep*)X7PRu5J!uSRYAu@-qajDzJMXiJaw z&!)RaIQ;t7p9JPwX`x->6?4Tj>FSUXryD=aU+>!3K z9@&R`L33i){84j3h!C2b0RSZCVifqg%o&4cw;M`HYK7eTMq)gj35Ie1#TNf|a&00W zxdbzMUlxxiHZF>U_DeFtU1|0r$vqSTP-$lIHiS1lux$Zqf$*v}c2-fL>CG&+Ta+1D z1t~P$pCzmOC|+e+rVdgMVafxSnjuVb7?N`7P_!fuAlUX~4yUGH;lVbq#NKtjo$N#&?f;WU2lM_eh~sQkKOL<{OtT} zcQ$sr-SB8Wvu{ygVB^~U7(1eo9HsJpwL}23S^v*a04Qy>-3xC*H&F`Okn%(HzamW9 z099A)zKr3EzN6u$d}LSIh|ku8t@_Ey9|)sJEUywK3+ariGn%yx;e@s<4R}htGu06T z3mZO#@g`)d?Ib$wMztbS-DZbDQi+d-;2Uj4m4d&bVVfOzeGyfSIji}vjX>jX;gz!n zC&o~?bn?;eQd?538q$QJX=jI(6Ay4$Ubdg@;c!})-J*7hQxF!X)O)f(`4;^Eis_Y+ zqe`*MkouU%PF3dh<~=C{!|0gDR8e-PF59e`Sf3L=H?qo-x3VvPZw!`M2y?AdFiY(W4RRK78pr2jQ0l`tc9~{RSyZr)S6A^ zfxzK+2DFa6=zLMbFVZh z?|3mLEl zSE(iq5_P=h$55wR22$UTU88#gwd{nJmL56q6mT%QQ)Vs9p%)-Gs-2U3XkFQZY9Rv> zm@X+1=3acREY?66F+>8fCyIHDJLHI4C$-##V5?cL!nF_04{W%r0qy^G69Wt3-%M#bsq!7UCdWkA4vjA#2#)(8g5;&uy7CZapGs?5)zV9&uJl{X5>?@ z20jI}TAjg;I5_jtf5*K^ksN;xT*HP9Fch9g7_2wYq-F;c*2ccxvaYnnG z=f+CT+{}Tr4Ghfo#D>!hcA}Vja3eEmK+9M(l?2rI5X>wg5wHXRVg&kcr!?4Ar)WFw zc?>{z9|K&!K0Td~^E*KQRF)CQ>h-UG^0Pnump}T~fAnwv<|jYdzkO>Z+TgJ}Kl_`X z{D)T`eDM0C*PngwyZ`9dfAv>C`}D=L^RwaN8zLIO%NNgIzk2cV<+EqcpPfHD|LTh! z;bMwcWOK?+bnF;9KoE$8|2SHJ>vBVEE`wHPZ@+;~x!i-Xp9)}%v)$R*`T6;?XXj_n z&d$zu0|VSiJRm&enEId*DI?5A{HNJP05Jo|)ZfLxWI-bo&`Y~E9AAMoog^X&Otn)w zXbF|83Ub$a|DzA~Kj$o;2-0!!jbry#$ge zJbWoO^q-X6jY^5wD?p7nHwzX{-V7k+7E|4xE&(X7#UXb?nc5M~(uNJFB#owYiV zRuIg0GRplRZ=e+5@y7tWCj|Z9X5U#JQLF7t;2Aj>nQFubZXsEo(e9vC${=j@2I+KB_ly^mgcChq?&^#6cQ@ExFky$`d1Q(gY=Qsmw%^iL-f|2OEr9!|nL zULQbd&%dfgOteqkv@Ci`E!j9AISEYSe3Y{_B1O;mv!Bmb2)z07>o1E%rmoQ%trXlG zEKcMj%xt_qK%#Belh7fHvs!h@ zm33?^P3kJQ*(c?}#1Cp$+U~h*K_-~U#sJB>%TzS~VT~jS5yXJUHghD3-|EgjHtz=A zz6PPc>lolkNC7rw!L2rz$K?B8GXr=RV}M)NgHLu05SznQ zngCClZGL(>%ICtilhINO%L&;yfH0j=P>8`EckfC7PCG9o6c}z`OpW#~M8hI~Muw2N zen1qXV!(nOr3?;1z@RSC#_E9{RC*EN;VNn{Cpymo-)999y;TkoDWMs49}Q=N+3}J& zyH;G!0YDI8Z&8hCX2yues3@abc$8~))=xLXIqqi+K;1_1zQzEL2L?YD^iM>b7SE~# z%qc(q^S}N-{?C8@CqMePpa1>e%Eg5xI9X#09%Fa@4}bf2fBW+n|M72r{`oIH-|zpk zU;Ey7K6v$f07^QDc;I}u`{?xtuV1}<@%-6~=g)q5b}sw3N_sJMFwHsVoMSh5SQcj{ z{l@sOin@kD;RuS2+=qL@(A8-U@$l@<&d#4bd;a{{v**vBKRZ7^JKK$L;o79eJ<<*s z7C=(g{|^1n_#+b0RoZp7M{m`WjQ%&xy3_wn>j|ROATej5N46r+(bnCIuymw20CCoj zVYX-PbZV7oSgzHZYkSYuSTXZ7nyH18gQf^KO8iveG>T9qAw!uZM5U&uvRSVoXCxj3 zBU30mDkF3^jPjKP%1CmE12}5Y+0|Bt5SeIJpsv@Z2@>mC3xPP=Q0|RtTKc4@c@|KA z`0#ipaNi&M8tVw0K~Linj_B#@0O*@41$fLcz(WlH9u$8( z%Kk1AVjuMYePXQrE{{5o$}BP)=3I9W`GVqH(I67W?d9KOVA}F&EJcyBVQ!mwaPBGB zGfksOaoftE=QJQJT**XiFyN>SB8xp3j#9=)qUlN$%o@@uv6{23S3;gZuXA!l0@#DCS10FX?Rn*DcC-3I=#WV}P4X0&W5NpZ%x* z#UoDsza0bI=NMo!35W$g$Cezv^X;3~Cy*r&r1%U;^~c*qLC zgAEGJp4l};95$q83KZ&r=8zMt{tzD74({ulD0b{L(i#O=K(Egz5DTm|M`p_q!6%9% zCvlNExRse^ni1#bhlmGoHdUI2M+uQPhxa|9>#}xeijpc14?-Y@N88-a%k=)o01YI* zrzPrr90Obm{l|p;;?3K?_^bc$KmRYk_a}e!f4%wQbCtcSOr<&fCS_oZulUV)`{mh} zpMU=4mtR70HpbvjUpzY>!-B8q?2KQ3@bcr2U;pgqfBWLav**vw=i8w&MRhN40t_Npx~j3x5x!Xjp`89q6?s{jB4{bywVPLf%~f6dh0Bay#y+Dc7X^R{FaN-MBT zW0Ht_#kv*w6p(85=z+7eIhEZ>zZG`zF~UqL5)-2(GYYrHbb`Zt(iU6mL=5X?hD0ME zNutvDetP&Yg^i@s|A|RR%>^h!Cs~`HPoVqkBVxDQq^gRg1M#v`hHds9_BkG#=aJm$z>2kwG z^=)1my^Kf_z2-gSQoQi(6pi*dL~IhN4c<0@W8?$CY@gsk$N<^D65PMT7|?zQ3|JBX zN@BDbVwp+cL+b#DzLf$z2$IEqWdQ_SK_m{p2R6h^Dpqr| zyK^|Xl07Oh5EMfbth}~)vZmOqmDOOLqE>a6W16RHYT%SmRN_{SKw|9+-lb(%`iySY zwdi*?96;ZAl1)B>bUC~x3tfAI>qvJP%Fh_$MnX8}{2*R1=Z>shZ9vEsF;;#D{>`eA z)m!>JmQp*d)e+TfK_#sD^Pt=@(*SkLKldaRm8raAwdsKe$@ErbtwS7%H)tHo7^a04 zdfZ~>w3%4VEdH~dl8`}&O4h_|<(&{&$clUKn5NV+49&kNM;SgyNmm~dRdHV$2dBj8 z?HX=1(Km?1JXc9%TA?bQkehnnOeHp&Jrk2mK><=eRETgz0YmoU`H*FFPZfNoCEpFk zDOAK-6t;H88kl%`nAx;yZrxuycuS?W%6_y~u5E}u^D@q>R(OKn%pqt<*C$W^N&&LR zW@=*vG_Sv0p*&0o&5Tg`^2pJE+U!3V32X*{QFr(fq29ViP^Y>5h%iS8VAr5W6sP3P z=*^2aoOgtXt|bH62RmVbe*c33PB@2;ZSH^U>v|Euw_||&9s}4Uzyo+uOva$kD+ysR zIT-IdposENfZfdpPMME&Kogy}s52$A0rxNfb`KzA-@}Xu63}!%;9UW)CD&{doT-DXIg~b^I=Alezm#E-*F264+22v>flxPy8x}>3igN^FVQ>Rw zPMtSZO0r{KSYSV2lm=@{K&iAOrU*zA4l?H5M`(Axo%A8b0AB;>KfnI)U;P^*`oll` zqkr?S{^kD7mnO>G3%%VhvG=?e=D8dDi??qt-hTD}61{x+{OoM^*{2^pf3~xS3_4ys zKmYXO*B^iM`XBz`7hk-5{^qMMW$tC_#Z(6N`^j(j%xuQ{iU9~f`$-UidH{8lxG)b9 zE#pN!xDseeMskndOZp}-@6Mk+d->wk>sPNoc=hV#i{~$%pY3)4AKSL^Si4n{vvMuU(#AyefpQSE^`?V-%Xd8bPr`*a-daJjK0zYznkd`n#*MG-f^^hLzQ#e zS&sH(5uj+7DvH6*nF(8p{NWrAixbX0xFPA^wl2w3p8;5;u(;um+dSHT8sS5HTEL#! zd%%(g5y7MeYJFK{Nv0`i%X886-qhSl@*1UH%KJ_c%d>Y(Y$+A;StyrCJ=iO4{ILAG zQlF``fEHRNG15B#st=o{muU?}3iI9+U+|0FjwJrK+PnxzLsU#wOCIIMw5aQ$Vc=8Z zb>qc4k%e;GiwpoutqYnIKp2(*Y&$)L@hB|g#0CnhtWZ7m^Jve70MkBTPW>mN3iqlwzXjF~9vN`oTZ6aH#LPa{3jG zTJUTDB<-}7YBeVxB4P$I5eel#mcB2!c7^GR(>LsOr)W$VVpQS-1JZ7LBti@^keXQH z#}2gUE?8)8Og@m1DP&p!vKd28C>#{ulCv~OF9y(SOrHUrl9U*Dx^Lj`9=6QXGlv_K zWkaGbNBsPG=Jqu6;>ah_NT`4N}DuLnWNR4U3?U+Lgzl7*0a?a0E3GCY zI66AK9eQx>*jumX(w^Wtbf~^RSg`RVsja(Df1O`^#4kR&Q+@yOuiV$?`N!Y?jX(R* zk4~-dk5)D~zRBVg2nyG{@U5@mw(!7R;jhbDmD_%#X5DAf{|E|;o{MvzWoBY0=ZCo& zz|8DO`LJm#GuQ!tp9xdg|NG#8d9WG!=l6pM6#4*wcROTi83ws!u^&9Mr5HwVFvF$^ zM8I(IQv5f0Hg7D9JUF9?J-WtCTDiOP*Q%N&hx=Wy`wkUa@A)zC-9fVfR3Gh^4gr0l zBc6l|UZ{`hVdUQv=fCQS0RSgIJNI!r-P;m(c7FC=K>vMy%se(%#IE>%|IhxXpZ@gc zKmF;?|MZXlM?6dEF_Py_X_q(5d{Lu#=yn1>5>}>2tdN~&5`Vl4oRHwE^GBK{i;9K~08x>HLvf7%;76;rq+I0za18v~#U~ zjsXiC#u(ODj@=oLGX;g`ULQf>a59E=bC!+DrUKvo9c?ATb+!II03*kCv18@hA;&)j ze^_X=o zqMQ?wNXXoMfz?^`s%o4!WA?GXh2)aE$n=6L>NHGf6AncN@fbAY zJ^}4^WHuau#b?FjbW53T#$hy2CWu7=5Fl{yP9G-M_i#`)_ZL_Ez^KfhE|A7zUKB0elG~$213$4qgQUEw2=`Mpu$B6zC2JRZ8Q8zIL$;Gs-Y0At&c%s1G8i``?oO=YXQ&h_A(rDo##vu|>P@wt)79LR+l_(T zry0QsGytB%f8Urs;9UYbW@Y2H!VX0;f!GZ~vM}Ljfa6U#ObJLl1|X2k8rw1>lgZJs ztqLx#^^cj<*I-vt8YYKWN9jsR3?HzI>m)PGS8U^q+tK=l}cv)*tnYd8uQCQ;6o2ufF)n zpa1*+@8b_Y{OE&c&vrPcv$Gwk4#taTXPPL#2r6~^uzj7PO5^O=vsWK{@Zm=v ze*E$4k3W3zi;=+Atupf2rvI2Ni`ocy5e5`@Qbx z3*m-Vx#WF0ZjoAU$V251Gz~7#vz+Zp+HX28j7zH$tZkQ>3oUSTkHalWPH0le4S&L| zk(w6-B-qsBFR@M z69~8cvGrGTR@=GuC4tQw*xsw@pPRXB9c=`Bxy&mcg@xr4DY?{rzmILul@i(>t#mCi z=-<5lVd8IB%IYOfI4HLt4dvLfg8Sq?loo#4CQ>0>rvK#HB2yYW8&}P3&t}^I^Kh&( zlxJXohdMu(({U&sB0i|-tViXiuLGcOwiJLKKn-wv1;7JQ{;%fy9|vVQCHUyoWc8ihaB~-e^YCjM8ES& zA3&?;r&a{GCXY4T|4kF5DWus>$j&qY8&IWRZKG~XTid_=)FYZB}-q33sh@j zw=@`m=JxM9GxNZ0zjV$r3M|LKsNUujD=9kI^8T~_fp?Go|L6bJe=~pb?`}KNd|2rJ z!72au-BjrV5&y5)PAM4@NdKR#iY_r-YtUqz10`Le1qvuqFp8VMe*Q4h(ZN=CQmkp( zIof4+npG0G4GanjN~)B>#1fYn)WKM^jDs}%^sw}f*S2TXIPh(83kQSrxpCBC@mP#p zbSg=f)?}K(@-nO5^p3%{u1Tw6C7ME@Das}kM<7FfESdje+`n{Ty6})Gp2iTlHMV`L%t((w08O!kdu)6# zh8U3#tVQjK%OpbT8P0A8wA}3J6qVOtva&>6%%Uk_jl3T`PJ>+TSl$yNvqW<}ehoBq9Dt z(*~%x!6J0UUT~cn0M}EHp1c&mDF65Pg7+Q(@K3(~{eSnPKR$7IPghqw53B~b-IaW3 zH9%M2;RcTeXnp$1&p+pie>LmhzW%#^ z_CNm7zy8yP{{OH2U#HN;Tps{b2tJfdAe*MAo=jX198Biq=`RdKZ7hiq# z_F{i=vET3aB$CZ2`^RG*sfdY3GSWTcSpdxMJ()AHyK7(NLXdOxzL=s)*qxn!@cN@q zzWbf;eeb*9`|P{l{mv&JfBey_moHwtcs7_V(u2B#*CR{5nxdD1kaqkS?eq-(5t#^xe5v75BEh1QJC@Z0scX}3x(^?Iq&-Gu_w{A0`X>9ADo zk)M=#_sj0z%Kb{(DvdOw7v$|?bJft08ck7cjG8IFu~}=3)dS-lBr3!ND9quGJx1^^FYrXV^m2X(0qARU1oRtJD@r2zL+6x^E{;5G_?2bvY1QrR4X z{%cn@ENn5D=yQN2)j`7pj+cel>=BTL#m%6`Xdi6z(k#QBtf~^uX{s1Q=Drv1Xcm_i z*Y5u)xo}zddtz{91$_vU*2Ge0SolF?Qb!T|2c-6uKvPttiL=DViGyTLU)L!WWlG33 zOwtvIfvJ-M9fBHH5lKprupD+E1IysRS%*Y|MINC_gL%$V$60Zbul=#Pnfraq`oAye zKfj)R|2NgL2}nKv4$D(QpCNkuZId*C*xAzQ*-2!?>5&)Iv@vqgDGs zMa>70T6l}iN2w*jmQYmE_N?WawNY_IPASSY#T_}LoWjpk zGsy~IA7l6kO4UM!V|eV=(#XOfNFS5Z5mtz3FU06<8PurW=t0#mWPoLi<3nlFHOob? zLOsy%Lr6DOOD(f|z#W1^_F(Nr5VACykPywJcrd7}WtLhkrDAm*Y?u~R3|X5i#q^Fh zMal8S2q&#ZSFfh`5Df4n!-1bT<$v?_o4@_T-}{~4T}FUURSj@!LBK<+0S@o>D^6j+ zEz3hBssrVbL(bwK-f*y)k}K7ewAuo1d63fpha}u4XvIVdWr@{;2emX8B~_R+el48v zjKyFmjm8qNM>qk;3^PTAEGjaEgwd87WP#+~$13q^+>}z@$HhEg_^vHt%PD(Ka$eIl z1n1c5rOm0Z#8^Jwrcj*stVmiTM(+vmxIZ-jeT@VGC$jzx{l5(Qx2wDthlv?4v{X?4XlCGs~W?Y#&WrhGd?msC#fAZJUpK>8~ zCvn`Y&(X<934U0(FLR}}8YrH1_3XV3qKfMG2R7SPI^Z1L9cszu?Zbw(At_a}C7*|J zryr5X0kdiu=;^^)5U7u=%7Ydsmi`V)(1{jhGZUwrMJnx+YAnL7j+L0hG?+z+S8{w4 zr<$8%2YbiF&EmQ%S@^ddd>a1L88AUR+=P~mEeFfv$q)t%PA6PyM%-8H0PM$f z3Xk1(d$>Ox0CgJv-FBdFxD;U3G9l!ivv<$UNY!#==&)A$E=_wkvXar^n^8q)wsMrCd%fD?OJci07 z9+_4d?S=w0E!1A5u*=vRE-o&vxXpCl;O2I7|F0eNub0Izz9Z=W2fzKpoB3lFsbEVNe^o3wmPjkDo%g(_G$5BJ_80_Ydb0KIK(J5F3e%m z7fIbHPgR>weK^2)7J7vis~DpvPanekNVAGFdVUQ}r=9od%?v@sKzm zCMFJsqF8;wLv;^+frX%uar>EpFvtz;aIOvn@$T$9a*l05Wm`ylge`J0Y1^n|sXH+$PLA;i7&!26!US ze;)dN8U>9QwBuUO7&L$jQ_6 z4_|-rKV+$fs|{%C?EKnuo59!_)hOVNnC%u`#4l=XmjUN4jKtlDW4TK)>kyMJ{&= zI<-PNg1_Hk|2j4Upd({|gBidfJa|MgF!&I7Tppa50T9uVF@QYy&U(i&z)2QB59Bm* zqMq>(`fqE~(etaQxmkujQOaR5q>(xg#WDakVWe17S;zyXh$`o?O=6pX4t=tro}j{5 z0KWF~KGhV-*zx4+RPD;3<`3s1*5aGwg4J9JRymf@Dl^nK7k4I<*Meq1a5!*k%rKIV zniFd`n+_o!Duk!tHXmI`Pdrvt?iiWY=B#bbUj^6d=W{jgA08BoG0NA#@W%kAck20r z%h3PAHGcJ<9NGb0;r4Tnlz%Y9~U&Lw-VN(!M@dMJ1 z3Bki)91?enevvflQA-P;bVKsbPzr$h$_p)(@+(t_%4$EAmd)CXRT9^7VC<3JYWxOSh@@P#r@j_UH($T+)orzkTPvQ-}jXgmAf z9BD=rm?sDwv*J-V9LGsRR-CjrT@4|e5Dt9GwBed%{vk|(?j_py)Z+gB5`g>HKmPu2 zbR(eCXZ+V(=7%%|qT6o%k7EjSMbm?@2@Myr>`~aKq!#l#{Qp4U-LNb{_N3AOpS?Hh zku2NJ!`52+L_|(CbX8CHUh?v4AYj3OLHG|Cwj{!S5d2~rv_y%d{+LWt6Z~SpkCY|D zzrfOiLEE4~nS?BxB6)|dAv5Fb_32>^d!5M0tgM`B=uBQTtE)33V>oB;wZBpP-)cE9 zk+jAXeY+ye?B%2^-cQ;j_c8JUVP5XFYj$Fw^fcnm3WU)4pROO#NN*tJv0=i7CN!>i3Fxrpp#lb z=fqxK>J-`9(NiFbj?+FFXsLMq5tay{_LRt|Kfl8AOGn8{6F>%%-b16)Ecjv zC*th9KOWg%P8q_)EYDuPeE#g@@L)X^U7!Nz+gVk+W7;}*RqdV&9G!b{+a=GI0mcPQ z5Rc~{m`2uoNXZTw;WmN(D-^t1t)4u4@#QyPee>$;r{tX1!U9 z(}Gbd@<8>!CHh~LH1mJ99sy)gy%|~K;XeTacq@QsQ|1Xok@d6Lp6Ja_o(eJ2j5Qpf z5gnA!gmB4rUgj}lSz=o}L?cWd3%qx6xr}4OVmE<1R&@cm$1k(u5)eenBWX>FzEFFh z$h1rLz5!l5C5gZEgVqwVEGu300biVsM(Pw6sOUH=xxxq%CNnH^C$HXg$NI($A6(O$ zHuw^U&Nz5zj8$=b9t$v?O5;M!*Mhgnv1N7ojxs(t@a5VPCKBrhHVsp}YJV&{GNgdm z!uvaFwYTrB@Pn#ZbHtH-Z>i6qe-GTFOb6l&@#C_`?Yy5Tfg(GN);k}r4x1qJ#Si7; zyx-pQew!EX|Gqt1TfFn(_QnD2O$6E#2Xz05Ky-^xpy{2^|9#;8@3T=X zp#Q63xQuP49WqeOYbAt?qP;r_Ov^Z96W=j|)TRF1m}Uf@nIo}daCU7pfp#ydQjJ_@$s#OE zV{q}UTj{*xAR`wLE%2rm1NOZ4%+nCtDu3w9P z{ajT4A5`}L9=|-}fIch9|A&D7>7IoDmqGvK_9>Mlqm7W#NrdI^W)k936q^qC<&MZc z%u^8;D{4uU6&xw0l3RxzfW}lyrMGqwTml_^RVYZPD`+%C9h7ouUq%-*dI?tvgjE;W ztESIUcU~eF^H|oiA~=1{VeU&iZEB@n!JQy*?0noXk|LZe4lv_|XP(AkMa(nd=bu_xJluv* z@$?R=@<4R8aPRS*LE;2!mU)I_sR>(5hGmh8Ip(2UR@;5U<-!ecg`)5pZh*Te2d3Lw z0f=_Iqc{Irz5MYVvfbDEjdxuDuzXuQcxvyS{^$m{<{{|vP@wA93FNzCE>x3xT%qqk zqBwuYjX@qWd~we7^N27DS$2>_OWA1LC6)jhT5A?8Z7e1?p^P$1^MNH5dnuY22izo7 z{~^++gf^)NV6BSW<8(+>B??-CuUHl#7=sWoZaEr(y%|yg4qgIr9E#tf%pw_;5Ga2V zsM*t2SkaNey(pQ(CA`<}CHTp>0qEm41YBSBzXSchb6Q?ca>ZTEL{noB&>d=5P~V=v zdHv?i+q3iScGYCn(3*(IX1#iPa(s5S-OgRLXLZ!s+c(;`3T$T(b>=NI(~4*kF4_Om z0D&rUBGhJCA%-eqCp)Fc=)947R;bc6wc{txUVQcCSKoZ~_17=IeDVDGv!^E~M~8>& z)p`}e5fi%KckEq>X2}@>^xgTngK%>Y{Q*#qQCS$804Y5S^zh!o>>$ z7Yzr?2Sm2gySrl?J{dgTD|T;m(hQ(c=U$&cYJe7DLD^9sVVRmhR^w3+Q{B2HG=zxM z53QwX%pOO;%F-;1%d?`2Mw zh1;ak(`)h*(XL^?as?=lZO01+1=Q0skb3_x-Mho9fbzchYmc=)o`5(k;-XHNKnC86 z=)csKDUf)Al|@cdvB*I5cmMubSnb)|cRWf!cZxUk8`% ziyWC}h|~c@NVlmnIV1t^f!XG-dxZW!2=sqZ{$Du&B0B${S)?M1K+UX&9nt8aHqz`i82bekTSR~cF17I4)Lw-u zCDx)o6y|YgRIleK!UWY!fius6k+mk+SMBUVdQS7NM!i|s2#ATY@|R0TZfgIv+N4a+ zuAN1ob13nxdV$B2>}u44y~9c>W=*w}8wD|I?*O%_`4!c{%^cg^Lm|M*U>SMV?g3~* zwT6+B~?9F;ahro;jDGZ&1lgzk*W=uyZM>rQ7CP&W@Q z2Lr*{F;LOm>XJAJ`GHpy6b`_$HE4v_!VoM^_m0S^FnuQ}Lt<}x5l7|jymLjHJ#rw5y+tb2S)$z`|H<#=eK_U zAN;O|ab2>-fBZDS`(pSHO9SMQgtOY-^M6K0Pb2`CL|IrQH2V^5zp^L|w#;Df9}L+s z01;O{yG}ol2AlASn|IZ;X03%ZP<$6FrSwC1A&dBasES!~zC!YDnV6YugWTpFRyhA8Rhq zdqMw+{=XCYH|_u7!Bh^Fz$N;^iMjJ=OH%D;XXj_<+q2W{x;23?uUN2}CPtU5NJc^;k#zs+n)Q2ghmxcJFTei!Thso3 z_2T8r=TDy;9~~a7r%Bix2p$b~4@ageXn;_+SpJWi&zB;wF8 zZt%zmDg%RiG<*Qmy;%tL2eoMJhiWQ-rz|s%e%C0M64W${ScP?|I=$GJvIz0_)6C-K z=ki|>|LPT992zfzA?3(6`Uj}wRYsmqxx#jE|M7;DRHhXF6!OIau0!A(Sf8H{#w>lI zyMe-O%OHZNH^W5x05_lkrjH8uzcKW`^Lb<}zz~%zdYq&vL1O$Y z!cu9ihNGdF4>%AI4j_h!*k}M2Xm71quro6&dLE@4vl5mhs=qgGNsBo$h-HpJIj2ze zi;qcKQy)d$c;fx*>Z(b$l6zrm+O-@!wNjy>=f$Y_tuY5iCm^W>OB-_)ZFnElrfjG( zJ6KT|er0dmVx1%JGns=zo3Su@`Rw22?$5;T?*sHtA6eZ0`+lu|?bj;@@Cg0yMgKpr z@PGLoV{BR|j65D^agBqNunVQ|Fc*%&YZsyMQWKL0Dk7xbA#)dX1A9BThR@gWcj5Z} z*jgmaYIrBJ^-!7jI%@=N1lJLo7ADaltcD9d@*EN+^QtCnhiQWRKZOP-6z@n_L2cEt zagQ@vErm|*7Z^dqQMH<_vWvPDg{RQibO>Ux-25!E$rCI?{oIhn?_T!Hq}mOjAB8v4 zq7}iA{Z59sI~<>RN(2IC(7&&0EnT5c;q6Q4^7 ztQ}18NqC-x6VFYkQt|+#Sv^3^x?f7-5-VZgN=K4eTf(GF0ofj@2>u+5QaNBZVdVecG;{Koa*JW0KPl5)x8HRrY z8ej)~xDE|44hU2sp`H97x=}H}k0SPZ62ZRZb)`ru7Gf#j*kIcf&yaje5 z7!N|8DLUS39>HbtzDQv1!%fH~2gvSlY0ZygF6PR9SIL1G8LB0ER8i= zg@qi`9}Y(+zp0d>#lyxqBAEtMN@6!!HUBD%jMuxiKP4LAV_*XA3HrCMg#KM{&`7(E z5ZN6;j1c$58aL1L_WXR?x4o~ruxM}0t7&z3sB^C!cbuF3+38#DTPV&u`rEDjvekMu zQE~u0FiS8}5JAq9xmG?S^t(X|h+s%sP1DhnXJ38ugCG3T4}S2&Z@&HJ%P(Jk@$AXT z$TO8Xf&Q1JI-q|<2^N$bS;gWT10I%an)N)%5@M73 zp|ODHN->R~)l#+(iz|@E2RHQhM zpgW@eeTUu=yt#NPw3jvjtZag@vq6^0iVLD2^b}VTwDPjWwO~u`ZbNZR?$;f!`H-Aq zqzmOow_DXV>Uj$;v)_E0*x20vHuC^s;!wt|%-O~B9 zQy^-ng)B>i6xx)OBfTg$al;dBtQT_0zc^FJOeB_R9tggOSZ4r3q!fA;l>Y)Oc6}cJ zStY=I`T*$B3h+T`fYAYPA3^``6;Ox^bN0=jPb3agX^~3DzN_-x>?0n3Q=u&c5H|Xx zN`?BcVhJKcnWJxjM%QK3eMd5s;|g*6Ww>YbbWy4-Ybs?z5Rq|)s6ih^Gw>}c+o*Va z@D#RtKo?Dt@m<9312Xk?s^mQ$s~sE zW0pk-CFYX-BI9*oh}Or{>2b#7%97!%Hfe}yA{7u}%p=2x$^z%5VG5*kd5pzFUFe0$ zN{gab@~Xy6U-38C4ZtzWJ3bB_YAN?mvjh76dn1mhG`?uTcgcf*;$cNq;VC__sAhal z{cu%@m>Z)j3tNECh`G1rdmz<3=I#>R=BML_{{ zx$KKsvOJ({Hi4>9*24jH?-<4%)Axq|8*<@z;5b^`1pz0@p5}_{Eic{;K>Th}_G2gp zcvoKMby@*dFMr&Qp0%TA^p4@-{!z30DFDcq^H=}lU;DrRw|}*KXZUK+{CbINv0#8=S(dzJ`0fRw(ITvsFXKa%~MG+R-{!-CBa;KcxJf&P&+E*`;bKkk3m z>~EUsB$B2E@-<2C(2-#yYGXB~*~N#A|4<1vk95Kk9CP zix2$39RTl@^`Gef6bn z(jn1`PPHUKM-42vo{fTjFhPl`dg*$=;y#dP18sywXA=Dmn8=`LLhv>eGZQS5e->mo z-m$!tbCb7C(?H%Y$~Ab&4P6BNM<(0OPjR{r7PDD;SE!VvRaW2vH9mM#E+KUuXg}&W z_eHZ^ybkJSU7U7QX=!1QQbt)`7%Z@Jq3F(v%N~pB`u+UxEYv)qPK4A%N$I1L*jZfl z?@f0i4l_0xd3n-2H!t>4@20L1flR!&ljc4900Od8GY&2vg!VrEzFCZ~A*#Ub`v9&y zFMPjR0hZ6|(r$q1gG>JRLjUjkBKLjNusHlGx~Eu(t?AJwVoBo<#xZ!oA`mU$i4gj^ zc9jZY%i_^C$e}ZO^K6vW?nt_-H1X6i3$nC*#nB76m?cE7W1ngwU{YgQN1dXlJ%?1^ zm&Ry{AD#oYL?UESFbhLDBa#q|9K!ID6~CzhR#U%ngZ98{(nQw@4AR^oz=U}?-CS-H z7+I-O_X|^pKaO_TxJT9hLqY%V__`+gZ(kM%WUT-<#{F;ols^jSpFW82|5~qTfc4|5 z29b_r@XV;RTfX$8g4op@_4%2Blrxzm1}p`V;$9G?C^99Q1WTi&t}uSTpEE)TYZANvTps^sUb{#KFN z``@9EHlcT`av?(R5iu0;4(QA*Cg&#wHNOe_Jlo8w_9L=9W4YETntOY85HnX>E{J7$ z^dW+pN;Ha=l}HE#aW%ew+;*fN$)Tnva_(GrScn{tl)$CN)+l^cCux|?F@Y%06mK9P zwkBn1JP;*}mWY(=`xeZ*`+_0`TH$e4ECBNiq_9$;oF~(k;dy^W#kVh+-77b^U|4aV zLv=~;fEImp$|M+Fcvo@&`_>tE1Nhx}itWqCL8V9@_H=j3T>75XpBKhwml_L25(8{ndpyU1Qla!*8rKKCvxedd`} zq_yerU@fgpBEmdPlZZ@Bq_t@^efNv$_3JnD`Kk2;pPhB>XR3OzSx>7bJE^ZIzD`)H zu<7Wu&wZY|D^5TxZL>Z+diwmUZ@>NFFMa#cxu}&z_x}93LHQ)~l(>By9k0 zwm{H*%m1COyNe>)hYp+3xeTMNF=#G1WY7pOU?Z?IP6VzsruIjx1P$}AV z6Ozn`l#7O6=L6Wo?meu_BXMaG{%`!1&A@jF{oncXy=R>!t`z?7d;PbD{%=6RCR!VL{V~!- z6BO@bFA!Te2&A5R$pzL-+deOJB@ty4c|0NL_B|5VoxO_lDGv*tv{MASqi4lm!s1Aw zhy)|{Ty=!sR^#-+%-+E+lKvy!`Rr;SXORVEx{ouo@vVeFL2A+xftVvggpDe?O1iiDcCkH7a(BGrwBxsm%a!{>eB4}5rSdqIECU9OkFAu9v zw#}#$iE_p(15g4h2fE^KGJBe*6Gs}hSYeRojk0yot4YzBGX0d;{A5Uxj{5vQ>~Gfh z)TUtZ%{p#;4^?hp zF$Z$w*&=TX#iD#DPb=0KVMT3{?Ucg1Cnp67NArd6r`8gY1sgCDEkw06J8Ju;5Nb4!c6Sn zRSCj8>4(EO8p&fd5MGq`rW-1f<48mlkkO*)+${@fM>w23fKH?8EJQ;w2v}!mp5(tyUTNtmXu(l_tYVSICwSr+)w8oQ2TW>Z;Po8}7#mle0 z{Q8@h-+cAumoJ|`fBxj;_~`ifaI;xY>#0o>r+r6cktX&KUnvBv^#xkh{Ue$^`~ty# z==d9oCM)yf79*^q53!1>3neu(yM&jkGqTWelrz=H`8e#|LYdYM;~~6tOx8^?59gPQIpPL{Rm#)|4XVy5>|Ao?Ny?BPdB> zSZ59S$%B6ZG7|VSuI;&u83N1P{`63fg|C6RD2MZZ2$PoYVlxZSWd&bwW#)bfl zBmz}ETtlnQpO-MMi?EnRt%6^Jndjj#9`+7s){C)*JB}O?GrWsIwPcIa-^?sa(~tPy z1Z5AB=qw|6eMgoDTo9)$()jP751?`Y_t6J1IDosWpm}Tscqa{THw3^9%!W6H{;&DX zS@Amp%RE6c5Fier3;|uGHOs7pqDgq+iJ_{h5@C?us~F-|E*zyqodCCnK1a|qi8R%o zv}e(7@Zijh$j4^if*jLlpgZ`+ zOeEH1z>D1Byz+%vJ(5g&XJU|8V`m;?k{&iIfXi}O6rG5KMM+IrS&wR}<0crj2l#$L z|DO>0|6cO{9S&gr<3H$s{>Qh){XZ}0pYBiif2}8m%b&3iIjUod4WqraQCZ%ODb@`U zw&iLxN;v>JhT!~>aYtLnkwm$ckp&TLzCez~NM0wK95NP`QCdvWHh?wOZjtg}3nAM* zhYwFuRHK8UfR}~(tX#U0{lPUkiTKN+3ECa#Q9~u8;cO(!q0Y?;WhU)P!X#p1e~pum zh1G^|Cx02Mq5rA?ELK*v+gZBLGfA2rPzPo^SsK2h=2U|KN@5{zU=kyniHNDyALQ1c z%592CQd6d+bLXkWdn*8JX0j1C2m9cNNJx;L4!br?^JR6DEypr8s({Fu`vLCQcJG<~ zZWc+99TYSMW9a$VqV7G=KMpy5O+rCQU3kLYuo{>b!ALT5QACdeWg8GhBefeIgrg;B zfv9^^a9VS-+!CIa6mEm4kpsrbq)6I==*f$aBgFzqSa^FuQNWczqd4pcV`nXnoPnEx z^iBg@4bb132Doo4z%_CI@59&M{O!N@&;Gmr{vro(#XR#!1MH;%>U+ZB){W|LSK#vy zIr@U&BLIEGpJkm&G7kYQ z$%q0E#6?&O9St5z~oyFYLf ze`D$|7UIoj#gj~JTCG;AY1O8-Ua!{c)#hNc*{ol^TEBVy zYI}C3s;W3WowwV*TD57_nl*F8Iaj-C*RJSYEk@V(^=VqK4-O8Gj-EVy_Tu@AmoL72 z`TXU}FTVKV>9eO#PL2%i!y3Z06N zw;Gx1oCadgT8K$p9r}qmx|9qec->&-$;P0Cx3^cOwS7K*GZ=9e_o^D+>^x zX|$o#8<1&%{tplwo}^$?CAmO3ar{`FdiTIIU8>!4IRi%Lz@kYKyIf^{7Q9S9OH98B zm7aiHvHg|Gen2E8KHm66B)NG-@KMmxnafRawp!lLC~5js%>{Op7>N;_Sbr%jW@Z$2 zKrxc&>M@k14ZnE#OvdT0s#`F6!psA=#3fimX{4~duKAVgYF{rk^B<{Ne)}F7WPpox zM~jb`S}ooWWs<#b{wL}KxQO!Iej9wW0$lc@Zc6~%2Kv8!)XzJZ=CJ9NLCx26XHfIx z+eCZkCZrHaL1-XXu}gZQy`v3Dw+cjAVF@{Q{tmgH|6p6Kr%=b29W8bo?FHt}-d3oJ#8 z(P?HmMqP;jecvf`?5*%*<`Gi_7kfgSQ0=KWCQR>n|AHLt;x}!#9Z@mI4g2F6o)2j6k|X=F;9d5 zM$o58bDN);#ef-U65Bl@s=KrVamEbgZ!EEco~6snIiYlw)HNsi+^Oaz`GG`oujEB! zG;(1thJcJD+&#=wq{xnrpMBT-M??b<)gro&jRv?G^uL4t-yZrO&u8WO222EyTCiA>5hiHYnWRBk(150MXKUox5Kl)kO)@o^nrznVgU#mf@ZjKJb8vX@ z>R|Kc)vL49xAT0iih0)FmCxrWs~}3zM-H1T(qw9@^=5N$czASja`N=av**vgc=7zj z^QX_BKYRA{_{o#wMRN}jD~0gI zI+4A0+rZ^+nVaP?cJI237l^-et#e2*6n-$E8YoW*(BzshVoqfoyt5Iq_JLJVKV1m+ z88@I3WEXVyr7rMt%^os4TSWxrZXXeXsEBjRXp+eG5@2^i%YW9zF#S^FZ-^T$k7f`E~u>N7p^&aIZ> zI=I}w4}gf;YJE>W0DCeRO?-DwgXM}&Q-_A(-$YL&Q!2e6XHNF5d9>{rq-@v|_ISqCx$&aS#tvPM|2 zWE>tl<40xu#V9I_1hG6VSazY`+d_==t7>wWVAI)h-2CooFvQ0=21oZTq(Fp7Ny&Kt z_f>QrTG#AO)WzU!$)wgWS+cy<^4lzDDK-OP?ut>U`3U`A3;M_H9^w7IZY=-ziTTHW zZT{mw*h>Zw(e}^&_%nn46aD`*g#Uc$Z}o9@#J|`W%u0|^b7Y5n%GPsBNRmH&JaKh_cqO^r|Wu{bBlwGLDVi^x7TZ|k`fU_ZAC>Mo9vL~%{Q*l_bY+9h2hNV zAI$Gh#o@uFp2p7+YF0eICb3h!RpX*VdmoU?aP*U)HlztJ1Vmg&s&aIUQqZ_sooNft z@)!d=(#ePrRt57?QNT+$G*Ul`4TX5wiHE)O`;LF%JrVkMXZ1W#F~GZEUg7l@Kd>49 zlR(}drT`$n{>IIKVS+D_+ zOyERRP0*C(x6%^c_kb@X3c*=Bnf1KBU52vCHuCsEFgFH4(VE4DdIFx8%y%33Rhnea zsVdskXl!By2v$wt%)M?B zHHmqIwOLxn;^Tsp)l>-&sbuVjq9v=@4@Bq+%qW|xN{!ROzH%gltDKoQn3jQ&!0Vc z_Uy^irzcOJ93LJY93HF>*6a0VwOOyG)yljxeiv|=13rlDJZ-P#UoU=#>uW4pY1nuP z9jYqK>RrJ#`lW>1xC{p@BZC;8^{D8?ES^Xlb&cG3NHfKXyp{#uhS(6R`=YCed{G5F zmh@EfNDfyypH_K0N%*RB2XfDWFo9ZY8qH6>MO*~*Qz~D|s1}_C1j(WMa?+{9plv3~e@TWpf{@_I_A zS#BYQkTfDv?NQ{%V0AR3kHlyS@q85Fup$Tw26y>CiObu3y8z)ak!8?lQFJ0=D}yKU;I5M|xI z9-;pa2>st4{eL%d@#T+q$$)zrPahEar;lIw|E|j<^y^63vj4s1ocIdkuPbYPZP978 zfJQU!%f}-WVAAK}QN9|_wbqj^#m=$6Di$Kj_+6T7Y6K{^U?Pd(B0krN%d%&nZWcyT zcFNR9KS+QL(J(GHRp-m#qLL`YBjm;AV*Bk*9!R|goNNx7S~CQhndaV8^Ir_Hus}JF z3DP`ZLAzQM8@k4~o6VSj?r)UGyW4Qz0}f^YZJLlV${ZG5mzOd>FQ#9tDa`h0wQ9|yCZSFoQZXYOygo4T@E0D z4hu{6S?JDkT`~j9ksMR_N1uD!^5=LYq4imOCQSB0EB7ddE z+-Iwedf=%Uu!KCo#Kr%-ySS$NY4Dl@?-Ztp;a(>Ar1P63mbD~rRn5)DS!lzHl)t?Q z$4zK}o$vdsX@HLk`XA3~)#{W!NmF4o>8je5=B{uD>-zZFw?F#f*I&InSg)tngmv=% zBTw?}UAcjwB8@@ZAe)UeSv8s3v|g_c4>!k$2PY>--<_O%_ua{>?_Qm~eS5w=@7vj^ z2J+ZK3)qs@q_wtMuh*N+!QsKt@zKeX<0nr}o<2E#^7P5mC&$M}hsP&JhX@9|KTEM3&Kpe@G)jC5NTYf-T|QMc|qb?j&_49l~JiYF2H#r$loj; z0%{bsuF#n(ydG-zjREv`A z{uLmvx*@T)1NT9=T+G;;{QcP3qJetiMj78}6hZSI;w6KW?Br6Xb*^R=w;kk_P>g2W z39Z~*#@L05iyiL@c3DI`N!*DNiPHs(NYKvGnpIeH9vY~U+!s~#59k9RBAvINmJfg) ztpFGI$9u*7Zvg$@Nb-+MPM*2dc~B0z-GReeH>yE0RWDbJ>Lj(0I5wq;NfjYYdiNE{ zK1(pz#gdf2Avt24I}hAAi^t-;!SV70-d98R!lZT^ zX*AMs6zl}+q252pocj$z|HvWcr8Glm?-aetc|;LK)Te}WqM zZ6@=gmqWyM;a1 z-UCuo-elr=IP_4VTq5+|)8eXKWisj_pHXLRezah=pq^NI`xw|`Ql^3OkX6S+No3OP z%u}Nd3%;Zg8wW~lAW>vC@ghC{{;0f~2d8ELo{=ni!=L<)}B@J*pE5JKw zfCsVyjJIy}{2SUQn7ZMB`niAojlcVw|MTztLn7KqR@vbIuAY1zX@Hs$VU6pVcNenv z%;uN+;4BRx)3dX)^X>U|o@bY;*rjRe|7n`0X}wt=9v&PX z9vmMZog5z>pBx?^9i5yU9Ug2B4>yO02dimXucv8h(`04Bq@SjUzMO^L` z-2f-O90#k`sepKExq5#>gpLPk9i@>6vJYeZS}JFFsnDQ zVLD`ie&#nlyQkcE;})~~Oqrl0Bf;6tJ0ol^>lmF9ARb-B211QB$(L*qNt`PtPN){Z zLRG!ez@o2cPUK#ErRoHZ<%d+N^A@Lz|4^H0zzzA0=>RCKO|2I2(-X-+^>wo{Z?`FkWrT|@w z42YzlTQLC-D8{@D{r@zC|I3@k#Tqq)--76na&-TN$7L=;7gVahQ>eUJdAq z0Oii)Fq6ezQd}gSoY%X0pqDxRdTBu%udG}R7ioPE9lCxwq(tn)S};V}3b<-X8} zQR3kC%$dt6i+G6pJJJ+q&hm`SHnF{`1|JYdK0rMAKj(NK;*s5666Tud3eIwX;K}TY z7(i&=EJvN~)DScdUg(PifU46-9K z$<4%;YncBBO_}757yE8#fW=OGZ!`d<&ivkKfEz>q75%?k=zl!7rS`x4SsIacAl)v~ zo__hwul(effB1v1pBx=-rq-zU?X2?*CXvRI-%F{Jb9W9gF&&6BX;W*P)#~W*;O*Jj z$?^8t)8o^#^V75Q^YiWb`MjOy-h1yox9!$sn%Zi$-fUI}o6X_T!QtV-;lbwMaC5lX z93E~qoAqY1TCG;AX1G5$8JMM#6N)ZGSttfRDENOV!W8JgDygyy-(w^*ZG>V0P5aHF zI&MFvn)M!s6cNwZOlul~^;GQ)(LjFuLbc_>mXV!@vrDCip_wT|CdzXlsuco(FgZ`a zOZmZ$xEqmBWAsBuesrkiwy8U*`xPqsU-CH%nqQC{EtyaiE?-o-5q82%FHi#MW?nL^ zi`D^JcJRg~u_!i(^0+0b5L61RcZ)BfUl*@2er)k?8d@J(4F1c)WIx0WLxXkK8)hir zPO#W&5?2NDpmCgcN5%v-acZ%+#8R?o}fsL3Q}x zO#Yfzst_si!X3>6nWU)%vLH5AsIYV>don|3@x&f`=~hEbm4iU0mpY6eFD{GOmlZe# z4@(j|TP#P*=p*!hH_$(QD#HJ3G6C;L27Cn2KYjed|4W`vitL@yRFJs9P%*-P>@19t zKQ>0IWJy!Q5=rS+QCsV|JVT9k+44X_GrKGvFm*JeyAQ)yZ24oAO{7e8@xV=+=v>Qh zVVBto7LPO-O<>6IDUn?J*p;9v(mY3!ZFx4#I@KB84?M(!x?lqGHxRK>&$3xh=?O`W zu&62J>uG7W1O_s>{ZNjhrdh(_3{RiaQYP=-g8WNn(LTo@FVLB}sdj0T>DfaviDI*p zSkXm0tN^lvZ33RQPcjieWbYUOy?efozb=+$$1rAi=cIeGBVNKzKMM5{$Ck$qc9-7x zE@E)N(*=YxNvH_#B99E9BM*|uvIkY=JXcF>)_^dh6DhbkUZWviMbH=^5@Z>`#Z8BI zBEwiKBaza4+std@rhl@dJejk$jtL}<(2>a%cK2#@4|tzKVRp1!pG%bB8Z?013ZcJ! zF~AMVfv1y~*F@Gne)<0c7XVx_CSCDfJ<&veBcOcSYgbLc?5-1RhJE25Ey(qyrl$CybaA7rQ!lgUJmSSefmDAf1vwz;Z zz{p=w=}Z{|M=bSNr2A(Ip|h>pXZCEkDD(B*O4+i~*e%ViS(_RgFFsVA!sRy>?1Q}I z5x@>97@2G#slH@=x?>uE?k5zeJeB*S0UiwcC!)jSgX=^8S7`ss$E_@k*>nSZ`1Iwk z{NEXKY~>5fk;V*QoAr7%t=H3PT20M= zzeL%SdXUhJQ0Mwf`IjwLt6!hs0#E|IiCbmSwsGS-poRH2_S!*a7Q+^uc`qMAWzE#sS=u z4}ge(e)o&e_udLH-7WP0UcEB!ahkf$l(alIW=J%^zBpQ3bpeTpd1Ug$5)r`&4qC_k zU@q5$uBh%NBXTVieO}@2Er{xlA-Ad4JT)FAjpf1!nM}k^Ab-^Advz?4JP;NqA($)} z!GJD_ULopqvt$F14HZ3l9PRrvhFDR`;_ZctkOc?D zo66+DruJ?^5vf3$P=^A%Uqtr^{XaDH|2Kd8w?0WS;9)hGpSJK{FMm2C`rL;yjZ77W zfOY)DC|-)h!y3St^H^f3i!*RKXE9`h8reA`)5b?n4M)G#s91GyFsY!y6p%3Y=n5Mw zf}#Dx=I{P)OHL;to#9JWu4bBb?wlMznw3rem;s&c19c!w%xt9~Qb5&1E|(XE6-L1v z3d9Vn$qjFTGo$LPwR-D-Il~ylty%m(dy-~&dqqflVj9^18Rr=Tt0fx)TAP9?P}5(8 zEzE&0K1-V@DsXIKhN{gyk+m0b`>;w!*G}qe#yVC+#uQk!y8=ChT;jyD0;V!* ztwD(;K4cA!y%(59Nd+Q{BatdtGL0?+06o~6YPFWQ8V7l@D{}j^r4_AIY~})VhJ;?V z+CS3Y5TADKzga{Namf88+qT6!fC7v2{%!RzR2DDK2!D6#WGTL(w!?vhZGX2skR5z{ zcQD(7lJcd<`~z44=njejRCWFIt35y1~UDE)R9hi5s zg53uCPxSvjp#Sj=*w69)3K7n%^U&2qjdYKII8ayicgw5_W9 zKsAhzMW)5i7ElyB+e}5zIYZ3KcohUEC6B|QX35_2(3Or^mG{k3JE%Ge?mvEIl*DLV zEidey;}}M~0R1C^brAuyd`dN_r!?E*=#FU=VeCD}W{zPuie8dek^LZ^{&)XjyaZzxuNi76JJNY^Or7h*(ChgxrZ2 ztNq941E?IpefR(jCAS0h{czuxT?b2e`LnYEOm~C(zt1>wmr*~LLjU!rkquftqx$%{ zNc&0|B#StSJn#S>OIBE12UixFm|o_2g-JnOVG0r}7A{v8m$A3z*>MJrq2};9%E3-W zL=b?ESd0-=R;qdvw(#^}>(7aTVxvS&Lm9$Z@s&=Yt{%eRA(E5W>Cy6}BTHUpbJwwx z7>tsnmK$@#dibSJI+F-@oB7pu0o~P+ePYo6EztjuNcH~_qW_nX0fPy6aQr1gJm}r% z|ED4Rr-9oS8OO*%Q6(vnnjnSg`!auWME0vXtSQ6;b6@CDIF?mcJsNN7`H)#d68ULk zgXU3&nuE2oo-raRMv!`Txhf&?SBASOS0?wq_nT(*l6EQpG%zfUv0AG~|)D@GEB1{lo{)mWKuvP%!38WmMI$)q% z+6o8ILXyT~_;DceqsX-ONxHM=OOTZ|v$B$k2-z0tXCy%wTAbL96}~3^8*rqWRT7LL z4MR2v1wW8V9wT-9XGJ&zS4S8H`wmXS6^*>lbVU67*(PfS?A~zy0W;fqMvWD)Gf4tm z9gJ2Q2XAKr z5@|ONgugn4N47?+pGT+`4>nhidi5#tu36A<9BHQVLg=`vUjgr2jBrmhz}3t3tFMa#`>G9EKt@F0evox93D`pl) z|JyV*X>zvJvw1srbzL1ugaq6sSxr+DmenMx)6{5VHGMvs0`L^Z2o1O14YLBY$w~q2 zW{tT_wF{$nQthfiy%9H=q-pE+oZ7@}q6%eh5*C~ffcm4*nc09;h3Gb%Ffp{-Dv09Z z<=rb3wStQy@H2w*5v!Mwgvh{42giP(sV33P-siL>FOwVnO;hdO$THfTghGJHyzh9& z6>yJ$1Pq^Sln*cO@svf0XIM&*0cKxtE2rJN@l?~REu-yef#+Z71E@xT_&y6}l|;oB zLX+_bwI%D~{j_WxVOqxQRM0aK|9I`L707DM@qxL0cbv1wdDWSt@|Gi2IEyN*9ikT6vEGX* zy%^%YPd-MUeqJk{+h92op68Rn z4k09TfXveXB8Avh`Q*+&U!pl`%9)_OEYLQaHr4L#*$mEPG029QmAice_QXa896-W$ zt%n47;R|E3w*sRulN@1*TLK2-EG)o#R5hP5^iQ90)9(#x0N$4gAfoM`{XY)|{nO_o z{2$K<7j6@`C0+R07~~d{Tq;1Y2wp5uyGZYS_gXcYQ#C-_7&l`4e zZ3;w8%1n^PwZCR4ab1kRK&MjLpC_L1FS3^&6Afi6MvX-9W~S)%gP%uZ$F&-sfgCp% zQL%0~09hUYxi(5K!XlT@0GDH4)<1Et<-qiQR)FdFIT7*Yf&TmD|LB-@mRnJWr!Q2Eg zHEwO1R?})?;j_8Fe*5>>>*6GDVcI$E32i^Huz4#YMtB?q{O3JOPwn1a~#O(Qc^l~@xBz-9wif8N{EMa#s^g8VZs_mNBcyjBByqQVQ+@3Osh9( zWwsBGYdA`_h%!n$h>(=$mPPmnbpW zZ65_&Zn|ZL$FvHCEzbsh&7(96fiGR#AAJCKzukTBtN_!^(f5o83k6f^^nKJ^y|7^pk={R{*U<9$yG`S3=7T!bk>#o7T6I-a#EyrEzPJZaCWKVJ zCv;)qKha9)(nE}ySVpM`LRh0}TJ02EF|*EU<*SPiR%;h|tP5TnKx&HYXoRJq`3daR zy2h5h=Bg@XJI`D+9bLkxJD2Yf@wN|tvEkJ{Fq51=OugRc>|^kMHhbZ5xr#*WzJ)at zFeir{oUaY!tUiupNvvrtXChIkaPt`DqEcaLfk9g_ni3N_)s`AxR~5)A0Rr#lltQ}- zTV5@Th+Qh`X*1%mxmX^waRA-{paiz$p)p5CPL62oiBS&VU29P!08JAJ8wbEy78fyA zqhTO!2=>#OcF4pTHA-eWY zV0MI2%rkO3(r}QC0#GaiN%n0hi&SoU2Mr*%3hTLjIj|f&ErZ#$;GwHBP-nHArv40VA4X{MGkBQ=`H75&Pq|Xu?vYkHSn~gW{ zM_>yGkHRwhI{}h}81bi}%g_8{$*y(t9$<$f%rpd}IZYR3TVZP$D5p^v_18%uwsV7! z5MUvLQ#o>l$co&!q_6q@?7Mcb4&l5W@9@PHC3Bm(J^@-vDKBUM-viFLOB&$5pxQwL zd^XVk4YdFH=U@Ae{sSU9Ib5%V&d)kalgI{`Rx1&i)+-i%^LG31{_N*J{rPvNr)P8T zy{iqxlgN5AZPu&9&E{Y;9b&UuPivW46A`g{i6n_X$sveB4+sSay=$NQ+!aK_)rsL~ zFihnwG%YLu*}-)}3T(`tI=9BXQ(D%;@Fnui0|Mlmc_kjM#$L8Whg}<|2|F|%L zj$?6Io9uJV_zNCVk&u1}8-#QLj0O{PV;Z56USIBuLAhMU1S~E@E&VIbuVQ4|1(d@A z?ZONubTC`&fkj}jP4Q3-4j}WNrJVAEMUOsT5wXTe5z*e=b=%dwUP)=Y0f9$MvTwlS z#>jakToE8)D8zsYVqsDA{7%YTIj<(pt%=`x!8}6$DY1I|dN3wnFZ%z<3jcE?-E*_( z7iJ&jqrGGXvL0(qXQRza|N3pqwx|xiUhIk23P-~>U zsQe8V7=6X!dZkj>E1?%v_}L=bgpnk!`N@n})#ARe_Ci-$383g|gBr6yd&vJu7XycP z-P>FeNz@a%!Zubr?O14of~SVw4Pf#MQ!<`NNg8DpV;HaFTmm6M7?s)3e->!h>gWxg zy2goGKoE6O%jgU=+}{;(@jg4}5SV>v?39$N@O5Yc2L6>*6HdTq<3(`Y=-{?+3Ie7J zW6x%de$G6OsJAQ-DC7NTeB5PcLGeeM@NCF*N?aE*ILfT8oiZzx37o()kh z?FP6CL`Vn2`_A3Brvc>PDJ|ukWtF~O!q21p|2@C{)4%;2|I0uAr#D9M-&qXs`OpBg zSYw#EceTu){3pvm+~K`hlvuz0S57+s2Y_flAOf!S0iGEYiX>}Hv8qGs$ej$J=O!FC zY!Pd+`;VEV36IuB_Ih*SWKWC6(<6jx^uCt^lM@W%@wrs_nmP)h5DI5t(F9ok2}Oxn zR;oB`G=e;$m8TxHqN{ATw62y`4%b#X&-S6lmz@6}oCdgGwD#REc85$W8Sw=CSau{4=vwOUDQZCd^8yVrm6|NiO!|EGWc-FL6wzIl6ozU{qR zIre%r9czFMyiHk;#S?6vsmywQSl$6r|$krm}rQ;ZcrDHizeqpgcFPH#NbI$wDM}_1?9U{P< z1<$tvbLb60iNWI8=rXKcX}ymVz83r_y9ct+l6Yx41*weOAsQK$L|xUBETWi~ONDy1 z5@(opivCPs*o1ng9gk}iU5Rh8{!%1;38ObMx{S03N!>Akw|sMCWMPMgpojYj{y0@V z$cA%xVlrGLgyF8mt~TQ%g#H0)jc+sseZ0{B{mK9DF9qm2Ou+5QfPnt5f&PEu!vCGU z#ty0O3Zl~K7xf-I21B64_ZwKvoXKPU$i3@04n$@8sO_q#YZaoI0ZDzV_wK=nxEYdr zUu|4OSzvr3ipGK{TP$O9%&}4Gi-ox%bJ4g~z`~)3T+tCnEzXE`6LJL|8|z~U%%uLZL_0sN+C5;} zb}Kug75Pt8%Mg)LCs$ErbA$CFh!|U7SAtO5!9Xgm8eu`-6{mqJgA4%`+nh( zp~byx3H~xxZ;Oq#Iksd0!8RNW1Ax@G)o?PMBo7l_pCXUbwxkMn~ExQe*MqLvv>VcBF#?aO753C5b zVBZY?j`1D0wgS-giviY0L?msx@Eh6#&9vX|um9vX{+s{xpZ*V54_ddh0?_9X3N%#e z!=^J5{~a>m(D)0P^uL8>Fk<~PxyEn}k%^NZAphe4=KTlRO9LcB6Dp|qNlZ~vEU zM3xhT$pEToOazJWqH+j|*}{TOS(v$HLy*^yc%cn9$?*W;s0LJ6{M4iB+EQt@Wr^!6 zOFC=FGMqVZV%q_`k&>57stZVy=;hr0h)S!aJ!9w5i$DA6FMjde+c$5w=jXk5CX&|H>(#;G z;ggf&r%z8_eDU;b`=obOJv=--;MQ50qKEUA_x8={+1YvT-6-?*dUbes`0R_Pr>AH0JZsFu!m^T;0FVoN z`aPUW{IrCHx!eZ)kWhQe8ndXER#j=U-i+TckV3f-vmXZotWSK;)rKhqa`X9XM z;;9AENCa^ty^MS|1L~|X*f0vLKWYw9aQ7XMftQ<35(Q=IsCkc+4F##?4@IhkSZ8P3 zOwq7qLxh#VKK6ty6<=AUC2XOCp@S!jQdkUXgDI2u05U7dtaE>$B z=1C(9GJ^->fp!@Uzcy#%_QQqGN zE5LN!H{-hR+C51AZw>vATf|@^5{{r`kqGF=1?YbiZ}~u|iu90r#=S5Ut+kQN;H6bv zsExQCPx&8N404zk^RHaN%Qg!Jdh(%Q4W4DE9gSbU@M`UArezcAnEyvgVCh@+5xXMk?$4Y_@ z9=p1oVN#dly_eY!Rxg{+1^T}^AbhW?f2e-OAjNHL0iT`lpLS}Su6U~H{7hO7y0~lX zjNiLTnl2L^_N_5))Q+?cJgb@qFFJpt_w zT7SRi^8fdJqaJC1tWWgv6R`Dr~qTQESSejb^Tq2xUyfXy8XG%6oGQo=j67K;a zS=e0RIk7dT9^8Wf*DiXlp90OLi$*xAH4aeN6kIj$rIhTRrx4C!r~-ro=r?{|6(V2} z>PiCJ5Jj4*pC34){MpG!F%zL(22FU;xl)#Eg?DxO@hy`U5DKS=SGBOy%kN{p##Q!x zp#g3W{S(oD^|yZG0igf!oNulDPYystcw!c5Q=3++wqCz}{q_(3uYdi&|G^*r>Hqid ze)iL!p1yv)Jv-Gtt0f7Gv^Gtf&C&7k(`V0Ky?*od^nBj-S-Ub3AMl2`leDH?Y2-Wl zw%C<=@8{>+)3fu}Z%*I5J$wD;?VC5JZ%)t7&bB}Oi=X}MXFq@a>h;;_>Ac;ls!%HeRQF-4BdE>F?VvG9%e5D&+1kcE$ zV7!rdQBwtMa<^-Ah)#}uiS0ph^K&yE2Km2 zELt>lFk=B5fh>blk79XG-VrIRh5`H%8%VI>mPgctxj{8B1-5J)QAKDj;I4QQk6Kk1 zy8Bzr8Q7|ULo4wr5^?;;)_o|~126~NDnzR_dpLHvHx01prSC;ERg=>KlD|FO$7Y9u0Unx<*$ zs(<)LfATN?)gSzuKlwL5`}03PfAgx(=YY;?`HRk>$?Nv^)pu{cd-dk^>$h)Dx1Qw# z!|SC@>@E||rNNHns(m}pXXo2juit+6>dh}+z5c~7UcY+v=JlJmKmXY;e)bnXee>$o z+3DMPdk*b(-AkL+>x1*N^Yin7{{de%noMnyBblx!8hx_{!}%C4vYd`ai<(wK6Lyk=C3*E7Q6 zBHfd6D_NRyV+-aqX%urSAI@>F-jt+-Lzv<{%ZD~GSse&1ad%q_(10^hJ#a zR#m{%(GYktNd;)(*+Z*O5G`yUR4LW^5nd45&g!ktnA$R+N3BlL1F;)M?!U21 z#}3w{t8o0UK7dEz0OU)z0_^UB`^&>g{_h?7?+>`8{8utBup<7;=i2W$ZLQ4TudeyX zbdH1y@MsNp*AaDvR@PLPCYa3iCW0%f5oFb{Cqj{Z;IL^$RH&lN4AC7A5y3!VRMAV| zyy;9U;cPpIG|j37vuPBEia4UBP+c5j#5XOjHV-nvW6fj~aREsRn_vKiu$Ze#y4>bU zYlutSc(~!ygp|1fSQ*Ohe${*Y75aY&=>KtM!B3I`bP5x26&dg)3jdFNraroQ_aOg+ z3zEx0l=`+DfJTW2;23~-4eW&@D5F=TRSG){2itCi)ECCu_0`@~`pc6mqT+Ko4f3JR zXj7Gn3_@jz78-B9AxkRDZ85|wXH%fEiha6>_zY6PSvnx=h!BB15yg}7HRdA5&K0iO zHi@UJDxsqG;z+BCC48T+d=I8ufz7I65g_>6)?3*`z+;P6MdwR>1gw%4@&eFO->~~R z9>$z*rn_BxZS#W@yHh>j8uy2$pBnBS>;Wr$r)$(9j%*P?$A?RaWmvW%RKS*qM5_X8&~_C7Cj|s;cxlL{l5DDDBOaYrtEl zNwmNx)>AT}h$y^e3>PlthceoSa8jL2D}f|$q@j|htqeyD0n5-M4@U!-8FtTVGQK=9 z=4E!8C*Y|3|AqwsU*-R|9ck{N7~o0L0N8BM;?Gk5}B{f7_xcy?pA8$)$>7R{~hR+?oOGxPWF zFMjyp?aSA1zW@H!Z@+u>-S@9vy?p)Z<*V<${r27Km+#)coBKW8q3%!&y|Deo+<%z+ zi#aVYgjhy&>~=$Sx6^Y~Jc19vWfKOpITZ)P!Q(?RZ6O4-!p)|KSl&&PniWu)S#uL} z4!mk%Bcnf8RNn~ou?&SvK2d+`2wEVfNn==LKLn*I3ah=W4bV&YlQm7Ole|;{zsP_b zdM7JVmL%V#)sIDwqh1=+Y4og6R`0E7#JE@M2`$7~vlx4ZEo=(xVyx7P5|TIs8A2iT z$i~WlxKE_VEw7BPubg$b*$vKLM zn+8B{MO2DS3&14=p6ld{FGQCpqY%$4?}=5 zWVNpmxO3`acxczEl!;oXGS^qb$fE|p* zX%Lojc7|VgeGn=UA%AiOdUAeM)fv?(`BKEH7wEsR#68klU>un(f@bLbP0_SZD?_eR z*_%ZK2=rXM|Cbj#$BZvXyNQFg@5(0 zC3!{h?`q|t8kdE@y7^?1X~1I87y$%9tK{{q30;stDuKRgP)G%n_+5adLqos``k>nt z13=HNg8Ml?9+Us$G&KLH{QqkKz%9N`Gy(Lf?Cw^8Cqx4rU|?AQm^gv7l3yzF)fLX@ zXD02$Kbh@Q_3;IzK%gaM^`Q#33yN-EAtnlq(A`7Y|G2P6@qD%rySWa9R*TN2E`YFz zqMTmA>uaepSLYX+PQRSKYlW*2YNahJ4i1XUGK&}4&6M4#rTyethMQ(TREs-XUe+7~ zZU<~4JGu~Jk@q(n@4gHg;E6*252gLjuk#l#MC8}M`Tqa<7yt5K{PX|&+rRj;{f9Tx z+)Sp`7}y3_7oQHhu-7lm=G^b+oT@lGKRZ7^d-43-c0(PFd}2)1#eVet_X_uX&5fBov!_uqc|;fI&+KV0nRY;CCG)6M2IGn-~+k;(|@(6JlmyWQFO zZk(M#? zmWqVYR-+yu%t-OFRAX>uK=4zX)}mTjYcTiLn!7?KOj2yI9-gML7YG=BHIR$@Y#Q zV8r~*Ok^+?iIAfrle{VL&*VHeHtXbOq5_#7l!I1>}3EQ&>6RP<&N<5eE>lN z1PAaGeE{->S^;(s2>st;Jh>0(|I%RPmv1q=qGjcZ(1`-%eOsj-Cwguwm2;i!WobgA z2>^}%bpEFJ!bJpQI0cxj&nnKK5zFlyp)wqqry=C4%{0nJ5CK1G({jrpC$1_cDmKl5 z0h_#w$n+1NukQ&O1r{TsA^{l9MFa=t6%{CvF3p%W8h@jWQdQ@i1RC}hFb7KqWDWA% z5@tHnKp`YdAZoBsHqF>5^F>(Q?nf@FCj|Z95)FQ6=wH6{#Q$4->Fz8zfbomJDI!DU z;y72$llHNkR0^Nt$v-9SXl&s@Z45mLAV4Y#enLe z`s35m$PCZz^$z>Yp&`KUYz0_CjIoX-cggxc5$5Hvtu@@Jb#%fs$ez6>@gsrzVGcmAbd|U?te8Dupt)YLpRowp_RsY2FA58mSU;p)g z^WTZco7b=R@83-Gy+tq8mE*U&_%Ua2~EdyuWz& z?!)WXZ(hE7{oC(e{`TANUViuetM9)3@aEl;`w!HmALHx6sy%p}Vu) zvuEdL&(6D&7pEd<4oa+=ZHdP2>D}FSJ=#^vCJKs+ti%Rdp$t7UdUw zPM1e&BE0gneE^*UkdGh}pQ8^zzC z>W++`3rry&E~px;{GjY92Wf2s<*!yR5i0@2d2#rfF)MA7fDvI6Zc`Fj|1P3wmWwtL z`e)re?N_P5rANzTX0n@^cfn_@whHyhovnbdc=>G_qw9j$p4^F5huI|f0TFW@YBQjy zm9`O5P$DCZ{>=c1kalu2Qw7PCW*D3;LE`bD|C^)#_XhpT<7WQ+$mRc6eVzUCZ^j?? z-~Z|qsQpV7{%;;hAhEO?Z`21xSZ;PcZ-NEK(%^4Dn+evhb|-5&HXHc^XU`5#o2piE zh_Q=>&f=y8@(e(Z@E9vA1EoA}@w;mc;>2uq2yusJ$Xk}axEq?uc(tP!>I>vxE!jC7 zy}yzjR+Y13!hn8NH)FM;FFj*@cr90c611Vz$XzcG8Mj%rwN#ajsAu;KNhS2}$1b4D zR|HzzX><=%Ry}d*F|y+;;qL-;>gJ-o*Bq^Mw+eAXQRQr&CzLNDFs6+zi9}%WD(+zl zHi3frET+2BHlAX2Sq-}k_cxop6S!n#p%^F!Mj0&9D9r+Aa!Tl^J}CMU(V=zfTR!Xz zp3cr5JoWZsuWtKA}d1+y&ZiWl(?HqhHp5t;J_@`CHF0AB_TfJ<{}mi{JI9{47M66FX2Pi}};tsZ<1fo$E%r%WFyja$fDd;*;!Zrlf6=i#3hq!kqbXE#Gk2qRO zXOyDl3qUd$;;E<-ZmAJ;q}51SFJ2PzD?Va?3^un$-!;tkpojcivcq$Imt1A%5xS*U_S zLJxtc1^OXq*^eQyh~<{P;7sO;haAnf+Mk@akeubuwHOkL6qLGF~-5MOt>{89E6Xeq)rWc zOL;Bg2q3UH$X~0-b1hl?4x+nS0BJ9Iy~(3zm@*fHaHoi42Gi}9LW-TT$xEl6(l{^s?;Tx@1rh4-3X>pRupBu9U_dbhtq|JQ=OxbBttq`Jk=tp?z5Wl9sk z;luu&zab*w(S!g;BbL{}BCyH9t8Wd6)jvLI6ndVqdad9C>bt1v)>hFsn1?ls6! zOsjc0mTm+bR-&fJr4c}EF$7VM$S(J2XHm#hV~&#bkhIjB2Nhw`92LYhEPj4O?xl_q zGjFsCLq`-80C2I(qsGyxAcg;y+iM<-2>5$eF;=>?(&P{Wuxpasu&iE;;AXE=P`HQF zvFzrqO!aYrOp`&ou~v7nqZ)8{6fkvl2y9wF@S%TaI=^O-E)RN;g2>~kC_63lW@S;= zsPOA`bfLVeB3C`DiB)V`bc95|UA6+OZi#Cr#_PU$T=Sc%>@(NO2ze33v#{*&0pZDe_EJDsSk6g2<=UhuttBu2nqumME z#Z#mK9xe0dUR3`)xIMh~Uqt@1|NOsNx3*uOaI{6G699b?*qgn3^XAoe-~Q$|KYjW7 z2SU_t5STDCGT!bFANKFwU;Oaq-K*C>ynglS?d#X?-@LRrr@LGs{p^|c`)T&}ojY{w z&d<-Ezj*fIC(q-97NJ063{};KBD_ocC#m_A+3Kaji%AkWJ(B| z0i#(uQYO+IaeV1jayaFuMn@&^XjY49`#>fKAOysz3sUuIL4LY>=Jv!gO(hK$@fdxO z8hx+RX5E^WWh*;O`oTRCoWb@3X-?>MwkMh&0XsaMc(}$4t`3u`!IB1gi50}3rddr8 z+S+k5*TEL z=n6E23SiU1>RsdLq|;dvNK;c1GVSHjG^CJdPMwjgSSm>c5Wy}}VXVJx+6^?TeI$&1 z0(FF^gcjc=O;3FKs5m@{IH~{$~tN^=v!2O>H^uKvl>9EhEbxxd` zz3H-g6iH_;VyZTf3)WAT8^ zr+MUcl0z0a6fna23b=AdiM1rXybw``x1oID7u!mP$AJECi2i?W(El}n%kcyGSNZ?V z4j4cEJ??5R|MKC`|4%IZcR&7M(3s1d1Uc<^CHgI#%)beY+eT>(q@mg8DC3%F?u?|f{54A45yuO&55t3QcI7=Wl!QKhv zz0}u5HW@txrmRJ;I*f_gX09W0fmY45_rhvqp~7Y*Hxcaxz`bg>GOx4U&0$O8QwQH_ zgw}0BZiyEzFA4W$LCb)y6_<1k4RES9{}>>3v;g4B5&jq|_x0;RHp*LB0py+%fj&1H zpdNp5*s++65%~oCr$&l@NJcdj@G1fE6Y-~THkJ!0z?lA(7?cXcxXB@@v<knMIEK+YA4i(umT0qid9FdH@N!T)RUj#A7=4_Et5X(5ASS1M|sfYpUwhEa9E7_D!e=Zlr1iB|lUo$RtXZ57_et*w?~EF6xS*G#pGH=?@1YK6q& zGa|hr7?s+&Es~ll>|$*Mg!pqyY`A|;=9&>edpAvWf7H)JwN4&Gcs5QX9~c_WxAppG z2id9Y@>d_g)klM`R)AADfZd&-|630l_XqvA&F&-6|KY=4eR-u!XNik%uJW`jt*GFb zFR_Up%TXhG$yZkiDdsG=Pt>EjumYXw@D@{kn69JMDaaE(7YXG^ECH2UX;e@w(~Q)M z7&VybtQf8`&2$WAWw`j<2SLjG&CN4%Pc}1J1h|s25G?2hb(o8#A=g%eGMIc8^#FW+ zWB9CRg`nm$7y(4@=vVOV367bl*`xe9L;tr~wjK%k|J1_&C-ild3E&98@$=s^nOovh7C_8!cW3JlzzCL~DZ+V*9z9?nnolZ$T%%s8o>SmEZnf;QIY1f-o%t)} zjgAW6!Jjl2m5BaN1N(V!1nQ;#oL7VUmt93LI+gxA+OjY zq`M;k5u3)0PGq+IWRQisjj?0?l5T5(qEI&n{s@KwbjG%1ja;Wkfl;vKIAHX@mWg3W z`^_9RayL_SFgPW>TU`{Dg@r>vZ1p}zD9~ZHE+@>|NxE5tzIhWJi_${lPfl7vZo5HQ ze)>+S96S|~zeCplarysE3IM*!|F8cF6Tnv*;K~Y!xg5qx2B_N*P)L20WwB2>G0>vcjO5w;Cxm7Td&ufGwHe(BGSBkbLaOc=e z=K0{+PnKXDmUK4C5Tvl5v|pnw{Hve667=Z4I(T5{BCcF0{NQ}(GxwmI%Ktx#+B_Hy zP@jU&fd;rK`hQ>0{~E|2Mf)#X`TyJZ?T5!=WwL|<<}y7DnVUCg&WkrMzyGUWfBX9N zo8SG#&&N>p2-X!5*8x#=!NrG*5AQ#`fB*jd+qd)LZ7gRkbbaX&>m#?2iyX+`y?gue z`|qEBGKC0685uD*dRd&($(SzW|*b;RMw%*GhGqVh4UMqd=*6pxf5p5CCg2IH^* z%|J50ZYkpY0%={!HPX8XWSR|COH?~RG*iAVfnr&;G_UNm@X{@NDjht5*RGo|Lj73|LNg-#mgJg%3bPcF$jYoHe}Fp7>}SfIMX@!0tA<|I>y3 zx2y}h&d~|S1>cA+l}L9(@q`a)9g$L}{}t|EzZ+Jy>}n_2;I-et@>3N08_WCBp_W7f z*Zmk@%$UpRu4MvX_ejM%&rBf5)jAg9=vQQhwP#?_FgJ)$dTC~2aqkgKkq{h$SQk~X z>42C5Mu$T=6ry2lUD-?t@DJzqCDo}w-*b%(UgKTrW>S}%J(Er`g z|Bpcb^0Bht$Cv+q<|#neB1a=Z)mqzz+0>u@E|-csGXeJk{hx&X-$?j>>GBVskf1-3 zLc-U8Q_2HdDQH(eCK8@&x9c=O0slQ_lNdotOT3v#k-Aj&-d2fqR^=k7KrMAR-ix6C8`5p z)_;}j#t)~1Kw`@yu#)lpa5k4nVv7nj_arw_-377!M$Leu#d!s<4x&cTw()0}1vBG< zeOD+n3F%x;6Dn$@ldfozsn|TsqyC47$y%jl1xd>$M8aDP_o=q->h}ISx5#VZyXoX4=j}z?|yjs{mVCR-%s})4K#Vh z14DJ}bWXe2&x;Qi@87<$gnJZXSlNI}-?9K)S>Y@q)8^YBe)#s+zfs`Xvu8j5`A^^e z;@!oE{VZPM;dVXG0X+U~p3>~>8uT>{Mv!{+U;&8CV5v&pO}=gFSK7A;vNVWX5z&)m zAFK?v%|RSll_ejFET9^1*Ky0zD?r(Q=Oip48E3$QYBq<_8{(AlSYD=@GSi5P=J%Nq zgf)(KGC)LTOWxN>4N@`~nuA^2c@jqno}mWj&d-X8uZ6Z>IP^MX>Shg}Xi5EETr_7+ zOD4E_AF(Q$*RiO*1sHtzs3^I5YomY53nY(b&GcTdJknLcydhwE7p*~<2P-Ntc&ngm zxPQiJTb`kcHT2x1UBtqWUDh@Y?{)P7#EYZprOQPb5D6auWPQ|rj6MJn*}r=`&YwML zAAme%E5J@3NAiE)(0@Vcw}bv$L%Ea(Un*Yt;CGE?RVgzm8X=i{aUJ!!Ex4r8pSlBQ zeMt*S#(KXguE!>DI`H<~k(CD43jYC$X^6MJj?V%5zwtVCf6)I&P77a!|Bw7dCSXnxvA5rS67>IGg#Xt(lK8=) zDlPB3F!a{NRXuuA)M^H(b+=KkmvURdj*h0aM_VL;sQKk673-raEYsU;S+5&k>>F0M zu-BeWvXt>WsZ`ZLWePJ8v+7*p2YDaN*AcPG_VjhDNoU0IBrQ|0{glWvrTMt93HH;3 zU?1EJMBHsZ$qKMrESU;QZ}yc}x1yG#gE8r3^Hr{Xd8%-?l1lX@q$AgDH&ihzhL-oM z1D;~G{iHM|k?DoSgag9~WXm?Drj9EeMys*c+*Jo(TtwKNAg-W62~xw3@-(Ot{%eBn zjF3i5_96!f(Udp^cV00Wvlwaj6oe&{fb5;Fz@OEvgUV5=GJv2V%p$+FL1gPq$$n1H zL-LA1WuQm&37bUm*-C3&;XzHG!a4+()k}Pc=tNj1o zzq$#a(*U2a7~oUU0A<}-?jHm)g@EG)h~Q4m4jauX0H)t8y}uIWP>8AngM~MmzF!D1 z#z>=7k_X_;gn1xaa2cJ^SANw&?lzY@7gJK9>$4l1V*v3jwz(ykNYfHFTL2Bx>BM7r zVAS4({Qz3$g|$C7MG+h8fy|d+yIX3ZrMi2oE~idMEi*6|@G7W}ERrmkZ1I10rU9-6 zG@djK@X1yGTv#4U`!6E@@qhH6)}KrMe|GH=5+Xwb+ZAh$L%03=ckkc6dv9~%Y(QZX znW8QV3>^a4obTVipBL{-0i(cx*rhl5AR}IyZ_wt&+t)8&o$bE==}%t0`sKU#ANKoc zX1+cH_lx^)JBNCV&zf_x^A{^+B{Ygl{bQGt@1<8>t>!CP&A2JGiD54g9T^eqpNqka zqTlTYGX^>anHAQ*UDm78ar1p}@;3&fZBJ8SI9}4}JTQ1sts2uNQeYorVNwF?3?-@V zkMmb*)!XAswK&r$*h~=8U~%m;yjMn0E17D|R1&2N1Zg&=;lz;OI5HQZWw&NeJX-jt zXcYvDd3mo>MUxK%X^UHj%BIw@be-2Lwnk=Mhq`cfh`7lRnH%(f!Q;sm$LmQK-C_vx zEzoLB2>EVqph4I}HL{pgq{q&mk&Th=7;xB-3K5~)(WsYb^QHup#P1Q zvut3whKU0mgj!XQiArF5aE;l0^$BL|!^jZ2F8<7vf{IQSfMqwCp5fRKUls&!HUnid zmP=OtA|s$P1z56Lz11*A6AP540ZW2Hi*tldkG9@OrnY*Oc{3;k!Oh8K1zn=5X45Sa zepTSJLLod?gvj{k{)DPf%tCc_WT+4en!BwcYiEo(fY=5d-WT+L6ZHQJg#N##{~uqy zu1*2EYy!CQMqd1ad-n-Uz-J=-|M)OA4K*VBpxQjiQJq7rVMlIh=?nPplW6P$?k?sQV);rLD!%~H{H`2norF0B z5!p|C-`7%FV7IJYgUTDr6Ghm8BUa6qAbfq?8Rnjft)!@h8Tw*VRD-o$1vPP--0#HQ zY#N}sd-_#?W@~c2Jbw^52PBUc>DM;NDoBew3G|IOM4fyws!3P?*kqAoY`bQzL*w$u z&iL4oJ)%@YI%YN@Sn)TZMM9Y#=%Vv=*6`Q}OW@ z@*-3fi~Gka%1%{QB;87+erJqz&;Z8kQ@Y8moeF&A&qfqRBSk!eGb}E3Fr7PvwrJ!W zuZqO`R(h3eg_E}*h_9stblZpYvDx}4nt!6Me_T1OfBbjxb^CkJuTO3TkZrHbL(>2a z17~1ewd^`6I%T@R7)azlnB8pel~e<1eZz?%LIeYh28vE#EsQCne$0Jnwf=_AH01wE zZR3hr)&OVX_~593=_E~;VzO!zmpPC5cy#@?1F;JrLscL)jg`e2xXrB%U^cfnbOc+R zySKMQ=B6fKt^&~`Y>d(CsFx3d(oxSaH}11V)mMppU%31(u>93$2!HZ4z$c9RZ+QJ< zYyUg?e|&w@>lTs$897A9=VE_x@nJuwS?KDb6fpb1PZHGK6uGPY3Db?I^_B@N)ax*gc@6`4C` z)_D%#50@J*yezI;Yg#Vcc8~L8`_`1e_dNY9pYS&pE zFQ~6)F;@X>hZ(k-dI0ul2|^PNi!r2b9R6ZjF5T zQyF_fe8(NYoD-@mlR_NG>oq%rmf?T_`&^xj=$B(K*g8-iaWR{0yh<-`#8y}o82AdS zPJjy%=k5l7TD^v-)4WT zA8@{Iwz4=60H78AgOqC1rL|>?mzg1qw1J^7o;OCKvi;^rpZk#?GQrC#t75q}(uYQy z*L2y4I9%LQYA$@8O{DsV&D~+v0s17ABM}1TR_eH`!hbGZ9d>zn$#%Qidz}%ON#gQ! z0P$%t55#U&jcwli2PIz$wkC#tRn)~{HdTkkVWWzsEuVM`dLUX9XqHi%k81oW)H^b% zR2YkGE*du;McJB!Ghan%MH09ds^w8(LcEL4{-3}ck3nSIgcnm=Wpd$VoLXj0{Euz6!;b{gSaK}fU zTw3OS6{chCc4dk#+@57%F;28-BoUbHfk6Rl^ue&SGpp=1tA@FM)+vNTg}X_MA5Den zsv3^Sb}&=OQ0GJWXu#9mn1F|*0peYIAR6E^5&p~LYX1+uPL%&&d!F>UpZklw1qv|6 z{=&=n3gGN)w>#g>IUD&FEQRiZPBVH{^B)qDhH04Qmd(3R*(p?PUc7(*_U*fO@Amus z>QjBtZD5rkQ{58M1r_Y6?ADo*Z7AG8tirrCfKU+bZv4nw0q|SNZFPJ%#ilreeWWBr z0glCsjZLW#@T}_PSXy^y*bHT6%q&$^K^)~$w^Zvo(ulCYecu+drCn8eOfz#v zlbJ}aciZ3IZcS_90!FTZ?8S`8qkPo!z^_8Uom`FeW%E+fK6FG-wkPmZ<8I1;V)F|( zK~m!-ZX4P3n_H~8$N7fg9Fk1{k|}mMu^;`Aef0r+0X_hEYF2>Vj}iKpo(54qrcR69|gf&=jLZ#on3$%X$n#r->iGlQ!uiMwki#<+LKl_iwf zTUU?`tBnM)&Z-tmxmv0+POKtm5)`HcqkKfA>a*lN7qv=XS9fUD!_7QTE664uVab?k zHZGDv^5-oJjr+vJ7nw!`uT(SfT=R|6>}@ka+8Da;p{kYFGSXz=A#W^2Kfnb#Bd2Xn zMBQ!+khu|>*!qt~FuXOv{qi$xkXe*CNPSxDJ4`l8*v8ychqysB z@prfj%tf&|v$(Bj8%9GQ(Q>zGIy8auMD{a6I)bEPR5Dly0{XkdVCNruOyG4Q9*{@U7;ZuDxD>FLzVmnjCI7T zO5Fk()uQ2Zbw&1klFL-Y4pM7$uCJM(>gXq|tPINcVyOY7C;wdW&fYT(aB0xG7aE{{ z9PW_@_)MVx$JhSL74rX%{@7Jl~z2^{1(d zu^WM9`-H(v3@-Hqb}9;7q;k|v_Uoc z#}t7KwY@BIu2lZHPN&OurEli-?b{Dgf+6{Viq@{sYu3Sv3qXEGQg$Ec4Ixh7B6T70 zFL$cAW-UMh_iFS7teBdJ;vwu@&F9^{TGuUvCSCYios25-6^PR=`XnRbNqg&t?t76o zC{Q68l4v*zoNdbN z>m*jqRDTb)#qjL$j&OmF<~w5iIVk1cSZ5NA&-6;s2G;|H&74uSMw~bqe8gX$|?mS6D#BOgdJ;Od1I; zJ&eRUo7Tmb1jhPSTGVWwHR_Y@T`rS}ZNR4UieWk8OfB=iF%YM*^ai(`#}`>^22qdy zvPvQncBORXyu>=moKgs6R-_MB2QGx!II@!K#F~>j4@ek;FN=%#%pikUc&+iv?w4#3 zH-*V+%D2)K2@&-%l=G{?=Um{mxr z{>G_@{2j9XkIVm0E&%u{|G(+i-}!rg_>ceoKe&GQx%Xm#+tC1Wx*_0X8le8DrD)+m zoh|jcYCC~U0SZ`d49$%-{xHS}_#oT>f#63Kp=3Z%WtWMtK_%P+9z6r`*937yA#N6X z2f_~psUk+wnOsJdyI`4~1N(riR^OTmilC)dQo-y|uV?B#_!PO(>u@t|2cKX$3gePY zc=POjObutD|KxEi1Wi0bkgQp|lN3;GP$VaTm=1ai<%81zR{#a~O9Rv=;?`@}=cD@P zy79Q${{!?tQ?0iw+0HC`uLS@u6c;ZRkdEc~E4B;KZE=qSPQ z%aB=%nhE}|+ItsdR=%cG@^p22UPhA8r@29dX_Vg93t!e#hKUYMiGS-zLkJsLa@<}i zbulrac4vLQmBg!*FPX9%5fRt03|KrfWspTx1jNZg@=ycS%?qV)vs@Xmgiq)R`em41 zfs^8Jx`?^Otk<@s=^UV!mFHXrxB(WDi3AXp#te6<4f{Xj&_cRy0-zZufK45M{~uG++c$-}{_tSIzFSLXJt!$k;lF!IKIP90+z zv1F#~13WStkM3srVix>b0Y+5AonN0yg284+~^P_pJScM45BSQdK$d4-NI*DRF%VgoL zwLU5^DaJ8X*j!l-E9E10p*ukTryUEQ81yeU6#mD*KDqq=OG*JcifYJ~Bq$TWr6u%P z?(6Sw3jKc^{XZV>Zg;q}FaIzq_9q4O8?`dspw>3RwvWe}MA1#}n5{$sHj6Klm0vo6 zXCk}juESZ%vSGzj{=6O&5ppl#P=T&dCr~CNuPWZkg`;7Xy}P#O>uJ+5g}*${-y@_Cp44uDRQBAh*~zC2kYYRA)8S zOdMu>TE<$hXi<{+`Cxq6<|G3p+(m{YHlF?yv#Dc{5ofbBZ>Kq&vFWO54WHuGcC)67 zNa99~HdxuFYl3qbnzaY{)P!uvCY2hp6#dOY(drolp&7_9Q>#0POpLH0UiDrdL6J7d z0#4p%P8*qT#RMFc{{tuX1n5_FoR!noYvge$#pv8XIIuKpb#1aR1C=&g?Oz z7B*HtRWIm@puQ(rO1iRee_g?Vwo1JiV^&LXxu90%WGvU3^_r#Co%=adiCbZ_Xs{na z8o-o6XGH_JnIDRr0l?>s6z~>F;pWHQ^hc%v3kU`HN@IpPxPd$^OIJ7-(a>VMhiN#=RxaZ#V#m&%_Ml(>R8npP!wd z?S`tEtNO$3eZHBxbI9lDW1QFG?9czl^V9U<#%L6A0+Wh$TmIm@aidHdsSs-YMp4a} z3pS^{xu1(S@_stWEK{h6#q31fIDuaG%_b0ulDzI^h8`#sEj;oCN5g!cJ_K8$JIY}EPnzotL*F)yVQDlmYY!rxg z2Cr@$bJ2mQAOdKtxMUUoar*#7 zWdH6hIe`220X#AXAfLSzV0S-Oz^4iQ*VM40IkPvf_gaAOY+6 z7?>IA0c#df2Ezl1lEwtMN3hK( z48m0rl7aY{bnr$FL$)Rs7**oRh|E^qOgzn7#hxcu3as3@3|U>u?sCku(7q9SIM zdKxJi3K&4gR}=_T6lwJ}$TFbe@u2@3T)>|I`j@Z5{|EWHmnz_EIgm5yx3AAE83IjP z&h4T9V^_sy&Aj0zaFzO%VFMZLZf)|e-zobpQY(&)tIGR6$hEBNM|{z*j7@JpNn!PL z(FRQSY#~Y!QBiMMH%=yYdv||8Kih#U$kO{u@H^>UHTBxOq zNl^k`(V^AH=510znC|lSla=VvTgzD84J&wxb;4CEP$}IU!_-}LWO~1rPS)L`fj|Z_GK1@+ zLTu8ktYaiWoPy188>BlK#8XBZ!n861HC~*sDGbe%P)2MQJF?>J5{_yxmKQ>`PDMx| zs_AZcwC|Wj6w;h0#34Qc4R8!D_=GgT=O+A@Pm%loX!8H7R=>ac)vtDEXF7H^FG{(n zBjw+&F0L9y0Di~;>@ZT)8+wKF^Ya%!c|NCoxVYHu#u)m*T z3Bq;_u7tqcvcitIFLh z0n;i!6c^X51n`Bf@Ml8u;@;w z)r-3__Yf(b^(KnA&7NJE6UBxD=*Z`f)(5cR06wz&e(pX1`Mj+FySqNQrwjdW?#+AD zS4A{4t|5o@P4_HA11x}$ES*B84S3DFZCO-NYYR2eh8lCtGbmq`de?Q4UOzSZnQP%NnY=ckVip^z?uMJ$-o{YRuAD&gU5xoc zj3=4_*Sotg6c5Drg9c#MpQa(M*4YpiF#v(#1$mqy5MoTsu3pCj^#2s-{{-~^#|8a= zP5-}tw%}t`z$e|vI13KIoFkxKQPz4R;s07N?*L&PyPk`hw1wsy58dV~`LVRp5ffRm zy%6WwHupb~Zd4{utK0P|60gxR5Xnf7sqYfoNAU#JC{7KJn>&lGc=w?asu+Q4TQxU$ z4vU$z2G(aqREoQ>ohn~~axTZ%9l9IIKz0*VpT<&I1{&xBE;d9+=Daay#`-+VH+q^V z;JgB(YBtOPQL8Q-Nta!@%lS_nX#5aWHUKvFl9u$jzlg(|P~($ZXz@HC|y^Gxb62)K!=d{(Us=2+#V{K8sY9bvH=M+Z<|dew3R(_8Sq)XCz>OGKO4kj&kb>FdbF5N^;;1#GWvaS`NpIvOzK$Lo52ET~6%GqF zA^YW<)1{AGN4NF*;_@zeYlu5`_C*8W>Y?~nOu*3sfMdTq?r^_PgB?HrSO4|G0G{I4 zN0s}xpaCAp3eX2Fb`@U5DqW@la>cgkIq^zM?h56-G9Ds}enp^k10a)%QAQp}srv~} zxXWM#2z899iZ6u6qk)_fq$mIw%IJOZImIZ$b^u2W{vGl(q0);R%iX8^iw&I7U)He*Zp95<|?L0WGfQqiO?;T(<<57 zJ};&>uJkja0ov_9J`Hdq^#7ru|4*g;|7i5TJed6dfBC2X$L3v|7i+rZu{wA(6XX~X z?$Y+ALS&4lh*y30?){(t`Ct9?o1eV+$@BB`vz-l15c7VnTfgq};}sJMKwv9_MODYt z8PdsEC~L|!qf*B>`C4YJtCiB`0O6^W9|n7+&uL-Y>v7roJZV?D2L|xs4HM%q7P1s%4(DhRADPdeMA!*+#O07~f{r;l@9$;Qn|lF7X5Hae5PDRh6(* znnHU*mAOxR&wORKDk5^OQgsF}-9=o5e~5K_Bw{XtX(n}Fh~JXwWwTvZ@lec4;Kc)Eyz z4O_9Ll5&A$18~tEmnYk=K7f-rfT!;Rkk8c$a0de5VW9tx{y!}AkL}O3jmnugTtj54 zRvR2slWyu#Cqx0b3Rof<=-<#;?u*o;O^6VGK%1%deQbnYh)0h`o`Y0PtojaOSz*KHw3VE!9~Z7ZW$0f{iu;$Z!vBYd^&h4R zxUsQY6TszjTCRtk3GnML&;#_}>>*wmTd+ul2XJoF;vlmgin-${cZ@T8Ah&i5%|X~a zQ?FyayVfbgfg)X@3EaEDk=&?Qa~#)rUas4^y_j`Vk3%HIm%WrxE(9A&X_ImhiF6}& zpO~mdc{+Cxi>FSw!!vTo=M0&rO{*eeH%pae*tW8|eW}5h zMNxal*MXe>sVbU1>p+ z1okB(?R6pk86yB_1OZi(F8I(<)t$+r!ow&Kfgs8s)J*V?q!33^4w7{#DTl-=#LVrc zGM*J(iRf-a+X-rQ2Q#h*YyMxYJ^aw6Gb{!YK+=Ac>C4rc7A-sja~eWP5PK#fxdI*i zFOzi0p5kV0PEjqc+2$nQEUPJ9WSvS>VP7$)yW^Z49 z`~Us%pMLYri=Y4Or$77IPhLEKW@ql>zE6p`YQjKAIJ0&G)uIHz2+pE_oMsB%DB#_7 z`#}JsXwa{4{zoh(3x$rFTeGp##2ln03}r>igk2nFF|liQ z_M*^Wm>IU|sTEk^3nxQZTicqzK~)tIt{|#%SwmcazVUwDoVp`hAe5)UxQYRY_-9!l7n~Gm`ph%(XnJApcNBo^30t zr7WJEcO|8V#=rG#M(;xEzckbQ!<^wI3L@MWCny*LsY2aUsUgg(Xz0Imto*12(JmPFhA#4*Odo=c=Wd~<8 z`gVOnKNqxi9ht5o7u}zH3%kPy!f8KN!`2tU-AwSjAy@7^8bJ9-}qZ4 z|DXGPLH{~N$^Xw^y!Z^||Nq1P{J-}9eD#}O_5VCS-|;#KjDP6Z>29|>JKLR|?RICo z-Pzck@18wBfA-?pv*+h$&(6-yce~xN{l#~G^{YSmmw)=FfBLK6{N}s2Z{N-NP@q`8 zLAYX!>?WcZd@{l&*BCTWLc|yd5+Sjg+cL*zm5azh@vi`}T3ef%#SNJqzYM&#ke&Yh z&B;4;^zPo$MmHZvo9>P!OAp6tOlOtcX;yme$Ov*3ho&FO3CHIpPdY*q9M^WVNu-2j zT0t%JfBG73f^zHq6AhhG4o+ z7l%xVLP_T;u5QfpYp#O7a^a_pn!L4@-r? z@;H4=8CFeoN5I(nnFcs)p34m?D#-yH`NhqR+`hLQ_kq&fjt2Pnsp*oki&Qsf=NndqbL2OdJqp?z09JAagoWSZHw;Q8$AQv%SYZne43Q6X|s} zcbPMQe{&15dQRgkx?tn1@%^2eb6>*xBDp#SSXY$u-~PJC4NApDQd z*}wBge(%CCTX{ zT~8{vZh;CtbSh95B${C0JKL3}Uy{#B#Z4kyF z;x4GiP{sv`F>A)xok*3qgk&p2@R7dUOhdKGK8X2DRo#r$1&icY5s}@fxHgojx!S8l z&Gr>DovH`lE|s_`8Bo7#GG}?? zRRb?F zH+Ajag4o?hG*)>AKnvEuIQE2SzFDRd?*P+7Qkku~yv(p7(77v4m zE1R)0vuDj+Ftj*Nm*@uYGIq3dAYpsFdnyO*xtoGx&iut zcj9s8(S-lMf6do{{C{`00dV+H9|BQx046@vCF%fl=x&U7H;228 zaiM#;xR@93e*LRI`;%Y(;&=c0FMsEEe)f|W&!0Uzf1nUNKepYw>~m^DNgvnoK>_o%GP`>g320X?X(q#<=hGZ39`p>3UKXQ< zS^H}Abpq>H?X_BCiMOMTSX4qflEuK*x0ym9b5qIM7^`uV=Oefnwq81AsB(VbB_b*P zz!sYN&ZRe!g!^3<8kQvWbQ2)uOgU6BDF{=V4T5&7{8qferZU>O73C7%BG5(m8fy}Q zyom?TunJGVS}Tk!VmV$UcfjMQ!aX#Tf25?Ut(`}WH=2^xN)u9*LX+K(qP$eZi(dX) zcNdvQQ!Bsv0KPCEfP79?fRhP;F9Z5NxY^6B2v%WKlY-_)dS&vU5GkS?B9d1Uojx(w zj?6G~I<+FTZJqpUK_j42Ts4z13M|M0HO*isF=-Oy!Oh0jm?D~x_%m$7yg&^y1?;qR z3M$EPsA|?1Lxao12t*_vBnXPtOJwXpP(+1TMj5C^-~-fDMx;@QPjVHhU=%(_50D0G zW~O6UuGh$}V9RIQtZ9Yy9e-D^KHWV@=wI%m?Dy%b9zVOU2dM&XO#mO=x9Y0M&*LNE z{(Tu=3liP*QbnaAhs$S7oHV?8-Gmq5TOSL{)4M_@XNa`IW_EgV4+s-LB5wOUBp&GZZ-aT%Z*4~kh>PmTYAu~}4=6?? z@C1@%>3KGWZmOmwIf$Bw#mUT{434NL2843o;!>w$%-rEBYSYHpnNNkTjDDInWC?pV z@qgkogPWEw5NYprQ5HYwHh*$O{nvONkH^Ruyng?d>IvZ7~mEW)>&V zfbTP)Gu(y?YGdmiHqd-9=bAKAO*G!^(YM>W+~pb(`icAD9klsJRV=`XJppp|5N4u-(XpOl!MiQ{Qqaavwi&?s;IMZ=mtfw%XZ)F3l#HVbI!T{ z@aE-T{@I`Z>Tmqs@BjW^|K%@!{*!NBsOr65oqh=4^2+RDVo7@wd}e84I-(T1ub}p0 zw`RUH(&h|kY{+}1sAqg)bh?%iS72sR`D(JZjF}OpEF8#egzTGYq5mA#te#3O!|*Ln z5JhorupS=OrrfIS%KghBJezKZ6#7rQL zkq(AxM~G98w1&zEGKxvwMBp?2>?);ZQMRQK*|dTrjOUqo<#LsxCamp({qYOjPq#5d zODxNBIJPDP>#|N-C~MwQs!>%_$scM#7`Gsb?66_r4^JX(A=-|YZH?YC1jj?(FM;Ym z@;(3&**$;pKz#txV(}l72KeNy04J>S4;J_%={I?lz@P2SUeR*1Dk7H!vhivCpxgSV z;^R_@nTsvZWqM26SJo6@$vC0r@TDa=lhjJR6dq=+zshVP&4W$ahO+=I^+00` z0MHS7sH$F3CIx931(|n&8WlFs{}qQid@Sz&|Img0e{S;sCy@fA zyHi6#kE8&N$8en8yGAtwgg%;?uoB2vw-vzU?13|>#j}MU+fwT_q{g>NSXtm&ENG?r zAeTpm1!Xk9Ca!Ab^0nwWq-}z$XsQ^&Dc>`b#v)ubl!_d#ni)?yYYYdd?uru> z@yRHq*wDP}gOUfotkF)hJ1=#sOro*`LAsOA%CaEK&)j>q?-Ckufc_tq|Kkp=zjw;| zKM}}yQu651Ci|$Rb&9hh!~tUNT*F!$xGJpp_K#Y$1~^gtkn@04{*PohFn%CQ3eosVqqoZ z&+(tni=0DM?^Kw#;;2zz< zunsTvzWEKA%NvdM4;l(24;Tt`)hFm@KmX=2h5sTl&PK`qBL%CSK>2(>yt^p*|G)Pi z{QD*U|NX!Avy%V!{GYS)v(HWb|NhO}%ip|S{y(-mU7nj2kTJ&DZZJ$&*V<9#;AZpn z_uu{I*WZ5k-OG3H-rKx?{SdDCm_WKoh|=w-D_Hj_y>a+wCkAjpJ6mRr~|^=GvO9HTt?5_dU##ij)e?iLs{Rv22L|MlExe-f?F z^_B$D4CG1I7c6!1nJhh2Acuv=y3)i9Em;gHv80PS_>c8|d8Q*>URMst3Es#uI*6Ir zAwQY~w_c`Bi@bG)@Z>j3u;t74oxTc^+-!W=N|el9neY?5c^=YOXQrCX6U7CYtjM5@ z57J7dj_pg+UULK<+A@?!v3{v0gR7C!`YiaWwKp8?Z!;J38?5~uJM%4Fee};}3zgpd z%<-U}&9inBzs(A>;()H(YyB=Xz~gfOS0n;m2f|-@RyuZbN8^ANnEa!F{yV&JO~E~f z^)!}};9YoYvc4^bem$ESVIyu=>%kF5a^C>@876?Z@)9=a$MRCGE`?y+;50w}8S_5! zu8_^RvY{@^c~Cd65t9~MY1U~<#;z^zFyAQWuI6;f1wF9IHAaSvQk0~qOb_r#Qy%AK zw_4eM3*L{PudpDYPkMMA?34RASZrg?d1}xJkzKL@G~~}Pg{a(PX&p;wiCXbxGBa6D0(7pxX4<*dC*S5=F=q?{ z((Wl(-U=QMqIOGdPBtV2B4c|InRCAu`IcvTQ$(O|syR;d+yHpSE{O=n*yxnCB1@%yX zS|ms{)_m>u--QU0c19$o}cPw)0bw9R@uh zul05F@u%|O0qWs#`=#l)HeXNF^^ZH;?`JLlALr+V{_8=W>{Dw3IDh{9j&uuvo6-QM z?0WY|17w?xxp?H#WI9agG&DF3g99aNH@R-J(O z;3p_Zfco&einbA4YNaSG=;pKowZ+=U>Y+upVdFSJPhit5Br9oa91&bL$C>^f0LawT z#hS$Oi(FvaHpJA{Ov{eX2z(lkB`Z29Maw6`wHoUrvku zmxq-9|BwIVf2%)VFaJMS;mZ63?Lp)#45tp2`-}HKyngfM&D)Fp-kRj%ez_@J9t>g} zj*enUEg*D7*l(0NIeWXW1>H9cpT)?N5y8wq7H_q^p}EZTe@kJ1>YhD%r+Aa<5M5w(>>MlKKx`7!xruR#vH*yJeSbLS<`>%+MRjFq?x(mZ*{_DG%ze zlMm47Mn>pkw#$NZidQCK9-ruJvtTZu{|LmO+h-bVlP$$bPQ8|O1krWhI=?g?ZNB93 z#(Amty%$;4=$zlA8!rp&Y4wB78Arq(`Nj;otg}%N`sW(~D7^~4)TU6apFN88UkS@x z)_y|)J<0)m?E^UE03M(Z;8Sq`@=03(c2`3GSKr_r1Alm7Jx<`y0rY>``@oQ#X&BlH z);;?`Z2bqsDH=s*3mh5mYiVc23NmJHbTba;?5)9Qd*8p8zxH5U?Zq}3Y!?RJ2vJbB zP?Bk&c2c8WJ@lX+dH$oZyMbufbZ-{4p&mgE(;_%;ilzEAg8MbHeVhsY9@?a+;fiK5 zz?G+;2xv3n`(`XmCZk}H1RBrAY&C*Kwvs?r9JXwl%9bhV6jtr#*YE=b{>TmD{^hQT z|NZN0`v3i}fVYC@}iGmoqI z^-QvmjaY>jg$+3YZO>sfZgl{bnQYK#Bk+iBVb6=VtkOF3EcD!M28iR+M8kqQv#rZ} zD4fU2xcX+i;mLGv`e}-cgNw^o<^a`FWk*Y>KCS3xQH`)*%8>a7vcIEBUW#!E%6#Z* ze`Y6y`Oxe-Heh7(L)dSZUoK)}dH9LA|DxBmQu4DeM@xPbR6W~t#Kbi_<%%~#2OV52 zGEaS{SXMi}cS!en#_i=Txy>}jdYK4O*LpMxhy*$omyZd9h%}20P!olCXyP=Jed4rv z@CjWXE6uE}M*)rRgsSU(djf8Y(|mIIe;58g`&a(8wn03}CV+qQ@BZEY{U7}!5&7`$ z-Sw~e_16!wy#Ueb^DG~P-%T!T0u#L+Xyt|@Y!~?OtopJErpOrY_Jmj$La?t zB!I309nqA9uBwr$D~TSh@&`1QyJ~=!k(ujvjNW72j3OLq2nY$;jA9PB1RxTJBtQr9 z#7GPDwlc&;84b5?$6d$pTJwz|sA#eNajJ5@o|`0q+@a7W3eho`znxf)`HJFpH!&O# zqgMv_+?ocE#|;H)_j2!{K##2Y=j!(B9wzV8XJZs&_Kbj+tOHB))Nk-*BwEr-uxH@uyFi0tj zaH0(|X5dKX5r+y~3(Kl>w$(jv;$rpioC!Va2QzmL(iAXs217Tl);<#FcLFcep*D>l zo27_VRk1pOqH1y~Sq}o}E-uAEKk?Q(wn0Y8p7yU(iv$aR$fckKg^ zPgDsYp8(T9EWfT5VE2ije>?{CFSkuMD9N7ZqM!J_W8ur@hG?VOSkq9R-=*kpzzL}^ z^V&U9O^V8pBeEmCCop3!SUzb;k6VwkAgU2RA0U2}Tp?Dqi0Fsvm^QJ(;yelxBW@cy zU~c4N+l?w@hD~ZnDqdTJ@xYu>FaTIOjV)H$Kvr7qp(@;b3e?5oKjJLpp8K@2WhKBJ zIJj`PQkR9pum#xpp%!aJr*sa*g_`H;PQ=f*{U?fwaqyQ^02VZiW#l~fm|x9JB;XeWCCQF`rUQE_#x_CkRpZWf@fF;yz6_)Ni@6an(w8$;{(tt~s1r5oCUf^MX!iDI=A1xJFHfdfTwDo(^nLy!6| z(5WDTJrH#y*lJ6S8l{~m6sTZko)ht{=jY(Lto6R%CEmF0h}e5aWuM+VcEopmzqOwA zyDrM%eKWFy*S1en0kUdfYOFnWA(7kDw2$IkcCZ|lJ0WUvwCy0#{Z1paje}upGU8J+ zrb##gD=;h_P_Euy5R%r zyb~c>W^{2s3PV<9qbV(d1XXiBAGL2IDrf{%#!M`Y z&Vq`f#bTvrdCb|F+TTUG;0-?e*At!}y`zoV{9}iuqXhsP?*dQ95H~~ri>D8@>BIX( zn*iJja2p!H|LG2C00wn^D;faP7K}iIhR;18reC;$W0rns!KP0JBT4kXtg$n3 zUM0qbp>dG~I-qybC-Z1QVTs|IifIGooL^lr|nu)A5Bh+;|8X0ietmy+c z6p%*is2Ub80a71He zUjhAd7$NTx^gnv3PkrVw@+s(zwK|LVCn(w1B2F_~2ANa<`#evC#yT@t5E=fZ_lFo$ zQj}g`PTG^GL(dlBL<`C$fb4^r{Kl@trtMi)baoRJMvNxMn;_EbPHXb4(UyZAK=i{~ z-4CnlI3j4AoM8OQl<+_i_6}{LO>8gXvZFb`F5ngSHTx-rT-O2J5Yr%+>r=$1Y9!8? zY6A#}TVbNlIcpemeoya$K$_+S6V`#Spbay-PDqX)YQm!y#xfBY&_I&i0vhw$FSH1W z63OF1FhBw!7?P)MXv5oVmWo%SJLn>T31G=r|zh!T$Gt(HZ*WK&dUSm5~$ zZU(5h{ERWc)F)gWUcnP+21p0suSGS)-I|$$6p0v?KN|{|Q5#58?+kF6twvkdgsxOB zsH;AqIqT>9k_-f;Iyz$yilhrJXKZG>@YGtKgfM`)&3t6R`xFu1L1c#bd4*ZeE~PLI zbF_6E9P=s~;q9OSii46nb_2YL1@Pgt|3}gP{r-Me+Ght>*mn8<#pT7kUmxWFNLsi3 z<-YGbqyK#O!6%=7>sz0H`sv57U%qH}&1OtvakXb?TFt1|Q)J_5$_(zL9@@P>B6Qlm2oXz1wwuo|QWJv5&XR0Wp| z5qT_$p~KX)D{HKU4l9+8-?l*r%nn`*bUqesNT&abHn$Ggi0+}Fsd&WYK=kLgiK*~E z@&k_B`vd0m&YIJ=&Ol5HXu$oDRp@4V&(c#Hgh+D0m>R0M5|xi@xXfNrw>$B=Nd1)= zi_J;vLuF1kp}`H6OWJLT4Yq2@c>4J#fwhAn$zuGY4?R z{`$mx0P@DI0J}E`{mUDI{^e}Y|F-eW`o8U+71QWZycp(x&xT`N$Ej*B^__z?zL+}x z0ENu0l9jm`^#XweNi{dlZ#*ZJU}FBG=%(ssNSjpg(p0_4(&2k;jk&YshGjvgLxtwP zDoZ6S1TOMdRr3v41r|lW6e`sBIfYuuRu$}?$)oJ1&~81D8}&VipouEGVPw1cOyK*f z3zy=lX;bSNh2-WpRk6U!vVkB>5(;cMsy}MzU+!P{|HuE@zxp1mzs=Wn6Tp!apaT=Y zb*JcCoz6L95c!uNC1w8}VmQU87*wVARKEL(!m4hJ!QrMDJW&r0HBG)2 z&X~psTU|4iM`OK6l!WYu$xO%ysPQL73Yz;M5(TylT5cA(|C;E$-6f`(*JgzR`Qof? zM>EpA?}c7!911JYdKSGj=cgf*ZqhWuK(kIpda&fFcpe*hJUY)tW~sG3{WxssZR^d zL7iVbm&n}=#j+8HBkJ}yC)P?rLsnQ<7wsZPUG=RjHz&u6Kd*|jf;?E~+Pn1G}5 ze_&%zfSy8-9})6(RQSJqf^UZjpf~_IYXy)gF!K&+fU7uwThRa!0+x|J-qnHDLT{rU zm7@cHU-khMu0If51>#o{{;x^_goFnot!ZYKGUCMYns-^K1MsvEM8g9OBs;&$s&_SvfIp!2qapqI;gA+NqZd4WKIW}N=#xyOqcYKRZaht?1xt9 zzf6t^e_7Jo2j&j|8bV@DJ}V5gX^r#0rvV<~>%q1E*I20UQ~v*7|9Ahu|8QRZ|INk4 z(OtW>wn~&H`OP<%7vEgEx)0i3ee$jEfBAzSefj-wf9tc?AH2F_0$}mE#$-7}mif_q zmaZei_@rvR`B3e92ta{4hE=X04q;=AR3_0LQUGX(7}Js&dYWOcO{K=d%;aM{@^CPf zQ03K?K1-D)UR^lLgrHAJ=y7&f2p6*FKuRc7d6_ho31HRa3hY>q=OpTvHi7sF*Uon0 zfLZcqa3Jq48i^}_ZQ`Gdwx}!~6zfu4K4aJv5OZD+jUEE6 z6!-UQl*(jy5z_#UroGdXr2{0S&_O5?swSeMITdF~fM=GJqb^zjMz+wEfc}}a_~@^o zH{yH(BayA1u$_o;11>**~sFX@uRkn*utc7Fx+q|tS90Qj#& zz;j^#@jF&?aAi|e!fXF@P$gXjM}XD zApw}ceZVnJx7Oq1o*^i*ZYGqr+x6bT0xrxSgQ|9+7$MpkXnQAP(Ubwrc=Z7^Bf00r zmq?8d;m|+Pp-=-gNZJsJhL#g=1N1NNh5zr$*O3&U0~5eaHmbvI1QlQtIN+rV;p`u`U#|-m?&_8~`}P z^CEu6SH%bhwQPSe@BWoA9d~Uz_AUTzpVxu`SRjTs?~FKd70iVWu~h+_tGYCfT(o@- zz9t6IHhjHRBv9y^&x^gIwKCIHI9|4HR#;se4@|5&?VWFyEEPc3)lXh5{h=UlDOgeeU!bw1rjyz}Ro&u2?dqNdq;*l$OrIi7%Rx za5L{prp#*y3^wf6$!+8lT%e^Z+2D5Q|ET;Qw`l#nRo4H;9D~Oy|34%AfAQsCI!1>) zc@sd<0JpRPNDkG`Xw^)dA988`;nsYZ`ktuHMh)^Kvfa=jF8?eOxdlg zz3e>=@Zf{-gXaD}i2VNu0dST4-yhP#(7$-Au?9r|Gjo0gZTG>a-~RE>fBMT`{p_nB z|KQtSeD?Cii+i~SMxeS>k#jaRR+o+BoQMNhY$mH`E^q#QEJNwE3<&`Tk5V|fQ?D^KGzP1hXvA}-P9y=eZ! zh?ktA4Fb`fhABNpYInI=zEW3UEG67IPYk^G0o=w1AR@=C08iToAaBYFuzP!;|INq6 zjpscx)22dEpV}vlD#l2X6maWkY7O+Bu9eIPGgC>zxB!(%9hz2xc_X@r#{nVxNV9Q^0^zhITJBb{#F?26 z3ARJ|8qO_?nk{z-r#Lcde#Mvx31hAzE%W0AIerH&TnRg*EGlEnrH-L~@+lU|-koq2 zw^#)+K*$_OIy=ndZn4cN@;VMnsykU}JR#|LsG=Qscv0X}y^AaLko%$s+_jYOXFBU} z4V!b*l6AXLr4asZAD0`Z*qxDE*Lz4=W48vK3;@&i zJwqqnCb^0zgLa#naQ?(#nwnuSZx=8|HeWelf|VMu*A$cL++LJnXGL&8jZQ3u^M)dN zL}xTWgyrOXxEr1f4#Me?_C`#=MqSnM^U~J)eJse=7UBPL8Gm{vfUp0*U!VEcJG25^ ziw3yT3UCb?U_=fKQdv@c@24+61*l8@eJ)pIzQ1Zyg`%m`2L2=E~mq#0DfVh{=_>};($^i%DN(Li2=L>7|G3x!8pWC+FtIcqBc)6}O9 z)$A3}X1zl-BvQ~75P^x3N$dav>&(41+<)=E6vynn&~Pq`JT&RVg+Xo1!e$3v#hqpazwI5TB2K8mA-|Ex881jwzm#l*$S# zjYUM?*SZ^P_C>%&+reYG)q3VIaR1pgIC zQ+H5PAWccHbN8g#A6IkTekF0P!qD7Hwf=BrbEaE?a}n;YDxr8 zu43I(VI0vwA_{aT1fnXSMb|NqfolR(ivS_o#5(hs;qGXvcvHLoWOeCedC=kF@uZ-C zc`y8b8eb1l1$_N|V}ro^1l4>K3T>|S<*J^RA=Fvq>{h>cz>%XHV0jS041xOs>T}?n zvlAD4pECZlJUwoI#4=hKp6XF7vUOzGuq;I(E=(E_TO3y+ev|-Ud#^w*BS1KlXqK`J zz(C_TNW|FY`$CBSc{m0kX^UQ?xt~htuy{Ovg?J{CHeW!^_LWKpMQVg`w@lK(WN&p8 zFzdd3cmN&HB5`i?>$b?X_ZQAzkKU!SszcTZFHcUDkeMr6{d7aBkJo0@xGcORrZ9I= zSf@52)GgnUn}^z7-Ipd5ps83I`~1DJa9OzENrv6n84X)5#G&+O_4E=EIboBZ55a69 zRj8xtpzPhuT{y{%G4f2+K{awAtkW3H6@H-73N`ZGS+Cd~?g9w96{@ax?FqOMwDE@J z|63COPm{!Ni3wmM4Y1t`5Xk#gG{8nHz^1$Q#wuh~n+9$_46dYe04xF#$<`0Vs}P+{+~pe_7A+emi+%pigz@J>*56@+4tSIiQV&;|LkA?!=HTh zqwjwAi_bs%#_Si!;5la57R}KBY0;YnVov$&x_`;;XKClZ!ra4aR&oz+m{OKdKf(N&&Xg1MT)4Wa&svc{|O zCr8e6D4w+ff{M<}7*n0jK~cG=#aZStsm?WFx)Sw4`d~@JC>pM+UruXhu&6q(J|1>z z3D>B)YpoKUbWv#Kb9;3n&v0;+4BP0iECaOfeT8uiFuGD*!G%X*94t|%r7){`KBmzL z3crx@rj+z{1Zc1(aXDof0ch0LEP432N(pT(vpux*WMY@1$Jdh;2QUYCo?QD+(gQrd z2*39MtT}*_d+N=1w71v_uzT{*|6Qa1^GRR|;$IZ~G6N*5ps%a}91+rD?BVm(#;_7p zZ;V2OJ=;qHRN#uzD>2JR9DpYF6zBWgQpWh#c2MaMpm7O`p! znM~6$j5?Z}3%E=bwVY8Q&E~N=QFKIdM!QO-4a`gT)Ws{KPpodoCQC1^v=+9vK!|#; zOiQYz(F*LNUqPxm9-zSbUR(2M&P;cJFPK~ua>+eyo%3HK?q(cWv(7l)+b+Hp?sn6J zs!0EtI8M~n-E?RzqAG&eh;V!BJqY`eq8ih%`5W3(i%JU{`09}4+oKDcrVGM)*Vdvh zS{Y?DHayFPq9re17HP{^Y%E;RthTW{b7FvGaj^6|@okzV31cN+SHD?)s2N4dh^#H0 z=!6*l&GM9+S~ecP6mYjtzMK&CY}Do-I~pA=0N8jJfIh-qW2^B0*tq*PH38f?4KSa; zH_`xGtN`clI-}>)o0}OJqp?>f^*sQAoc)U8D+)sn^qlprV)^0E*^P zByNCQksJzhEAY)cvl+9vZ8_0#C2}N&K$!*~_h@q9E8OthM!8@Cvq0U@zn1f)pz-L%D zVr~Usn1pTqfI^h8by4s*4h5eg$i^ria+#p5(*}@H#%>|j(ljUd>uxS)QW102W>yhk z)U)MGdoWy1F>CXt$ytddSu*bg55^OY@tA`MHlv7RXi`PcTb@l#0{yS9F!)hX7tIgLLgKBm^|L`hIAt9;!vVba0UYN5?%D_N;2eP5n-#$S z4NLT&H_rSS=>IZyjk%ZpZiK0#!%`_88+xQTs@mb?3$CFb9RQ+E)|3Mp~jw}yL zs&PKjrheo8c;JZ)J}Wp(l&av$nY$ADU&S}w2kwn~chaN}?7-gk@}{Zh8!al3UUK1cbdLce2F7zljnJ3JNMy`NE{UUNB@c7LX} zor{laWT_PcYB3!q&{^>6@Q}Iqkf7Vlur{@pQjHMzctDDfJ{m?+2Io(l3z9i7hsyB>)HE&yvu9-4lP~M2B zxq53*4d zO~dn+ZM`<}G(yi^tw<=a8_h_nKy27SCGGdKZl|oL5J_bn zMm(!HzS&6f2~KV78i>y7>CKI%-xU(dIpZUSzq?rsZ-EnSMdWXh^?zLcf0elYjmiIy z3;(yF|4Uw^$rJqg{XhDnEi}M2rl}JvQof2fUwM7ytt|()gF!A2R8^B3io%Ehf{f_= zh~b$|OcBUa{|ca~dRCBxt{+g%a>5Y4`-0&O!MAqK;j>oqe?Ms+KB|ka zFH8RaH~;i+mHhuZpMO;H|GwWB4e;#wvs*_0zp<~s@rS>6^!u+reD(UnwuNd(eIP@zlfq$Ja z%orJ)Q9hg6pv9R4P=zff6JVOqIbxT`=ym*qZ&Tec%eTBfZ1o9SS5&TN-b|{j;$UPl z6)+teffxgStn{uAg@_$#dSE5|6wX!;&&GXNMi$vn)#tK4q5mc!5;w{6cy;@h#mMp#jf;+N2+U04i-;N)M&VtCN|Me;pzYxQIPmXveTQ)pQ zm&8=GaP{gw!?|1%(ntTCW|xDX;rc^*h!4|*cC+=xD*?{#ro3ew(8F>7N99agQ1K(n z3nFpsJ@kKklt-rL`+=c)s0JzknUa);3Ux?QQms>$j^%J&dA8iy^$Asmr?T52Fq4U*tFq!LbNv6LIo0Js7)?l}%K$VPWRNKD>`M+yDQq40kb z(12~RKRAm1i^$*j+kYnSzaHyXYX?V^;{*e)w>ceN*jHVoz}2YW!2OT?`cM#Hj)9bA z7{62`THWUSIhrwZd;rTA%F2NY^>wUa zpt%uLkh#W8xsnBUkf)2xLS+o`NpEO&|58NQjooULN9iN<$hg z#1M7Ya4L-MSF|?kZL5JdlKLe>oYJJs@eZdETbtx=mHBm3zoiQtd~1VDY|(T%&iH!d zDrHK31}(Ao$<|he^D-Xho0SoBXzHMnOxBP=EpSxT)zPqXFj`V!6f))UW0sB~)9{9w zx6Vd7>B~5Y%BIg0XX(H^=Z|M+BVdpsqA+jN!}@@+aSyv*0l+qfa^uB$RQ?Za>+wBjb<``#n@=A7YWL1L^LE8qfV)2TR`CW9th#AYXtbD%oTZhN#;A{L>L@^ zLd3-d9e-oPGHEObTgmKB~uCzI0G^WXqtt5o^orW3r~zP!tbZE zhgORKINB0qYI)RJ&gb4H}9638ePA{2kQ7AGfgnU*2709!Xp zsg()MjP6Vg3!0dPu4Y}p&cz_R5UkXtlD4{dgyT%-Lp&z^t7RD+ELe~@d@7+a>BC!p zN#tJL!Yi>@0&UG(oS6qsRO_AP0C09Q*fNJ;vMJyo*5&M`23Z$1AN*wjkS6@bp4)oaJYYA8*i5xBvRLr)Y-T@5&F(0h~HE9j5^f4nBuxpWQ}^={)*>^r1bW zz@NiezYYdIKx6<#jK32lz_OQ82E&;anZluL2D~5xp72%1_mv2PC~(B6o)DV!uCMzQ zK9IJ6VM$79f24Ej7?BADEE^zQE##&sZJq|;x=K}uG#UxdOiuS4DOz>A5Oz-@po(-T zgptwdj$?ScuV)@nEZPA)E8CSxX`-Nt7uHj{&z<2W_NVJkHA4Vdl0A^)_7ocF*-?GS z$}~OV>V4S2A9>@6|4&8r|3tq|H38gn74Tg@i)Dg@EK3Bgcd4$Lf9F+FWL=@2**-K@ zD9|Wcl&o>ej9_M}a*>Qi6OR{)97(RI(=Y}1=nG)C=wK|I+R=eD1)G@=In+D!5Od6+ zHC!!T4Okl8zX8shD}A7f?%lrw2~M_vxvs~nf#v#u;cfME&i4JUQ2(Dm7_#G zP!ClfuqNH4-Rmb}CdCtBw*|#BxE+5&SqMxMQrtHd@Ob64nr}8$Yn+HSp&C+m%6xPQ z<&dXW*EJNP2j)-Yu3YZxxH}QV`-{YkvPdA3ps47$D7ALmQ7X|!RBK>#(S!d0R zwUbrq$Re>s=|Mu~wGK1YHSBv)eJnB}K=X>tcApGd#dM}ZNfzLH^bMi>6Y_uDqV@My zS^pbH#77|i-z52*!A&u2Q4$P zCwfYd!o_sg3M2!70z>y&U_x4R)2r%a8i>qK&4~Y|C2{w;*n}#oEyJw66*GjJN}+nF zn2zi+jnP_KgNRaWXnF>AB|?dg&;WUm(MHJFUrsH=1qRW>PTh8lNg_pBwEb3{dn`vK z2dI?oY*(XU5;a%2kS7XN2IzDM#e5*0vpVF8x0P4E+i!U&P~|h2y@8MaW61q~JmEhg z^6&gx|Gxj><*VyGi*LTU@LZrwS{F0x`+j+`-(T*9^75lkfA?oU`SQ!}fBf->&!0Ve zvxmeIa;#h7i2l8W-v7Yo7~+^nJBOu0T(cous+qA?3rs*i#*plX z5%?rEJi0^aQMJ9RiOJ6gnsR%s>Rrq0*_R^|XrkGRA#^l0g*7!`6JeGm5(l6ANibzJ zU%e58s^k9QT|R~>Vu|Uo{$fT7TNDF8mWp^2Y6`b(*?ml5gId*4L8~l_nf(+tZbfw= zj{xmR-kGdt5waaycJo-yi9hg@K&HwBpKiva#$lre0+w>F2-Hw0nyAZ+(gLo9Q*)lq z;x76n+BH6#SANh=2LWyQT)poD2oB(F?E^S`AI?oI8(IN&PYL=Lx!1s-74$!z88g9d zME+E16=qkiI86Qga!WYn7EZL)# zr)lqur=|ilF>^5A9lBm8eFw;shmIz=&Li_Y5z{mbUW|EG)o@4o!i z{vZGOTh1QbybAc5C9WH)fKNdr*9O6WX~bkE@6&vmGoN`;LHShxRf}YVu6X@!D(gqF zFaj$UNhd7wbDxWJDZW{=r!xn}Ob!YvS0UZ=@tr{Q?4XQjw{A`eAaq0&p(pR>bHto* z;<1Yu*d{@!{r*3Ux2=b;Nb6jr5%Z)f4lC3q7 zDl0*i0R-d?0VR5aHP9i=TgYbM!Cgk^jsLFD2?fs`3~%-bU<*&4MspZ4+b4p67=fKl z>el^Wqjl&+9v$LYYK4V5HZ^b^t(2a*FCd6)pZg`cf_+bJbI{++&?_X%HD&Z}4gd+z z1egR8t(El>`5aJ%%!k~-Mr!9BrvdKi>yhOC%R`6%oI?LaUL>n z?7jDW_W`v%d-?6}fB)yd_{k5x|2rRl^x?DTy9d|-lY%2M90oDs8m0FxM(ehijyQ=c zLrnt}F=M146mX$6IW5lYA*1var2BrG=;#>Dc(}Y%q7_l|q>v`*Qio_w9KgWbD%8^& zD$X(#LRf(Q{t)uSFu}J6D196XP`&5V$tV|i$^L*im@tC-V?uB!JX0%t*VC$?FV+J2 z=S2S{YhB>*PxPtjV(Y9Ne`I!L5?DQt!bOe5%vr9_W88<;aZD zV7@g>u3+x2e*RNYKe~CgotgJ4qqQbAMeB5o#c1cuCtR@XpLg&?xf#Y0hZMUFIi zq;>`tIq%FY%(z)JL|RXee>H~8J!C@Vx(a~5S6pTZ$y58E3H5F&=)G_jbDNi0y-@63 z6zqFZ1%+|dP11f5sM>f+6FHrAXEzZw^Xdif=%s>DLhE}?Y+PnNj!zVUw6^mN!fnGc z0sU#?73s#ND9h<|b;YJ8$8;qDNWlpng<9_=4GY?*xTETvte}hKy{y(%`ms}@O_%hu ziTjH=jm?HK>XlRqh5s90)hB8K_$U6_Kli`>xBva_`AZSGJq@tY3V3~06l zqo6-G8%&u(NlI`)Mqc_A5v0g|_0sScA&RtKWr(O|8M`}@r&Kqu1@lcOxY(!-$Uo<6 zk{g$&1k&bEpsFK?)if7UR0cPzz%2UVbvO>wJz!>YLU^ePu7p(1j7sk&4RDX^;Um!g zpTv^hxcq;H{tv%qGT{8K7>t*(f+$4u0;&8+w~D zMa?ha?a0gQ-AL=*KejZZb?ZH(L0+Sz3WKG~Kg5|*DWfCXU}*m#s<3VeaA%Z@c_@rm z+73fO3W-MeSdH|q*%81}{Zq-w^+tF$4-!2lrMd829rA9fy2eYVGNS-2K7i~4*u8pvdIx>l zJ^;B3E5Nmv{s(~m?*aYa1pQAk{G=g6V=^t?gA#yZSks1mRiJH3wK722v)*u=`F)&j zQ2^iAUPmJcyVX9hp3f3uB6QVWsyR@A0Az~3F#8fr~G-46l#5(E zt6D~FOabEydi>auwnEu1x0HGasK&m4$P~3eFU$zP9=sfk zqPylP#xcjmX(QMHS9sEOJuH?~83qLld#u8G*Rl@8P}TF5(M=IRydD#9Xs$w*G-Qfu z{g|aYtZKV#& zx=P2BpIMD`ALy`jaoe_q{JZ`}E^iFJI^zY>Pob z)83sFa}GiF-eWK^vYS~Sy(;DS|^YD$kZ7%^jH(8HsZp_U#_ zNkO4ZXOpxI=YX`REtt~CAOj?kn$9eb3%v`}A`2)Ii2SIcRw@CZgWdXF>FL95KE zEYE=>jd9O^+f>{LrCgmFDFRky$M&~cetIUe_3WA)^aBFXW)Ux; z79Sos%cxaZbi*jUQCaeE8df$X1*{&-WS<>~%OM{XT%l^Vkj>=(G=2?Je%*|*4>QCt z0kC&08?z6CfZqE69)k}+ME1Y^&FW7& zYasg*OeRoN-`DDpfFch_hefn$Na2SzFu?rU5hOY8?2P0B@JkI$idm2XP)R9JmL7)k z1{RSQq5Tmvfr{f?r3dmql93rioS0W$6tAN?;+gaf!UoaIOg(18iy%${`81aP=Z+{^^PvD07iso}xE zk~bHt)-+xu){y;FHLXB=8L=`;rN$=_(}0YPY-#-W)rcHIY)$|I5bUFexeG?@fKM$E zl^NBmDQU56X~`ggx%k~iREr-bym-q>&nVepuspnVKMX|LsYGA`S)oPYkPbw+ZozSU zGzm3*k_z3l)h-Q(`{#IytI>aMUKDX|-J8Ig(L79A{tFw7qZL5zq8NaAy19}DICWF0`;o;V(<6Xf<6jv*&^ZLmC79Y&wW&63I{l>R zNb^asB2z$--G}P2b#4)ma803&@HD?uqp7xZG)2UJkbh>x|HLO?xd>&li#To z1du%U^jZep2!(1J{x)CqUGnNKw{Z)T-7f{IMcNPSX*Rt{^o?2>S>m~;s+9!r>ZsZ8wRvO^%{=L8RZ~W{3=3Op{k3;)^3jIGS|G%fNKl!tNdH$=@ z0RFXw45*#-R7n_g_v)k1zW?Lj{rN9`^5Y->;9H-4`s(G2*4{|1C8i59py~=fppc!k zZq|D@BiX$$Hmv|Y?0JAEbLG<*wkeoG!7}r`Ie`XC%O`0Dvngimo6e5-B6CJ-IbH+X@g|tpX;dQQ= zP^RYy@dzN98_lFp`PA==Ex`&PlTl;k?`3sMQBkF3uK599UsDfMXhxa}z}LUMCm(=3eJj9L0^r?*{%eMh1tCGcY~E$Yrp1!PCD6<) zclYLc!bG7a6_PJSg~#=6+1ZB`h!!7atpdTtqcz&p5Ks`kNAKq^=N%zCGb4#}P!I)W z=Dqk6Ylx5wuaxWr#W+N!aePvxnS0@AhH@>0w;(bv{3ERjlP>1mtOxsRjQHAU-Cw6E z-%b?T!zL%<27oApwD6Xx_TIDeAgdId>A(#Z+gm~Z@>qrcPvUF$Y*#ZY?Fl#mPMHAi zxeEB+O#nysnV56QlOGB$HV7w2=XJBh`^!)o@RtNw11Qg> z)kD=GW6JbCUmGSN@$Zj#7A7_-GXONYYE{`ob;$MWAJcH0KLY*tHiBw)30b5>9Dz+p zc{H2IXmeTY;-S}c#KdU|R}zi)#Ub6Dh|u&USuf4{8y=Lo3vu0b#m zP$H$T!|Lco%6U4hLqc92I-kD1u~#EHPlu8vFTC1_wd`}|2a!C&VLiD`7q<9_U}7p7 z4b_P9Oq6RcMgomPPR=SJ3qaxiZjp{l4ylaOJTjbS%}>hzH*S)*(B>bN{{tI)0`yLg zVYh?+2OYcAuD-30LUuYY~&pMLsR{@@?|kN-eKp1pc``P;8Wu-PA8o! zX@J#D8 zwP{6ZM~Kis|6^gCUTqEuFv=g5?Lo0xS~3vxE`cy#<*}{a=xsE>RmlB&H^8>9N2UG0 z-b#KyC#paBvvUEh*CGS7?UMSfxlwiZ{ME;weeXv<`sFWw_KTl?_1*7$@xceLT6>en z!^NeU+J7;kyOC4CZq~b-Vy$;i0rIJMK#eSmWD%U4bxslWGf!{|$AYcSBoWx@v%idX z+r&IbgJ7)(pN{pBKCci<1`}f@UJu)-mH`opg@Q#I=Fe$ppGL%nXvRj%a4$_CY8r!} z&9tIg%6tp*dM%2%#;BA}wO38%+(7on0g%((;Ey?MOq_|viYj25x z1mSRwEy=@6b@3d@!9frC>-e%cd;r%K zfaZfgCFj3k5YX29U48D}`v4AZ`u|jr2T<=M6y{l&Nx<##F@eLlAEN&`LiV<)f zrP{v7o||3-M`TQ-3A**n0RrjRhsQ*C9#BL}+q9Uw-9fK?Io&n%FApaC_dh&E`TvZq zJDU0EALmVRmYY`r-^EOR(y#6^-dYl|}c-lBcb}i5ZR&LLH`3Lq& zsT&!Xe#(MeX_6*m=9A~eN-ohSw}=@?+y`{Er8V2+tgTE{p^WNkK+k7nX{ zNw8pCG-It<*CDxNLlPKEf4rHfXNpW5Kzzc>XCu^=FznQs_U!J6TeSY(D(ipaUjJt0 z|96}C|1OvSM5L*d~yw(Tg~gi zk4FY6n>C_&m?!z3%{0Jf4COryaOwm8XmbA_T>gI^{l5Vjpsfj%eJ@aLyJs(6fB5NV z-~HkDfBLiE{Y$_2>PJ8P&c`2r@a);{4PO)Evo2%GCA*lIvG=`sN`3Er-`!SeMq2kG z0}k{<6-u#e6H!jnin~9Bl2QD0g}n{O^f@~JgV%$X8BaZ6z;oil$_D|yL|Aj(FGp7!za_iRfMv0kK15+5ED*Gu+9Z7mv% zMHnhqP=@2p=W4@rv`|g;m8z-%+S-_bc?@$u>;ss?B@Tjs&YJ-4ngiJ6(0%U%7>oHk z-~*8BTLE^D3;Mrn^#3lPe_2IOW|1xC^}q{N9ECYhe#gEN@|0A=VmkL1XcZ|KfJ7bc zD9nr`1!&+;S&2@w>^qrisqGOLF zWv54+)RrizuWmwZ%FsL~Uu#o`ml9Cv0J`p)`~BkQRIQsOFahyBO(~{OHn4Z|hWGFy zz-2@UoMg?taS5J=o+oQ z$MM|LH*)k_j9g-c*u-4=8fB9|b-{*mHIS{w@6sb^K=yNBNtOP2ft4?sglOoZQ}x0s z-f};YM6GZ1@fzoi&bp2HAUjP&g`JUZOtA>@9BD_xsUT>+8I;~75Mn#1&f1JKY)`i~n4ovLPtP$u?-e;Cyl5Um60O&Y%75p~^Ei6B{Z z?mk3{d!WM_~Yue@UydC9tMQw=OA_iAM<~dL@f!9d+w= zzK*ail7+zD#5;oDtTZcyjA;T$`2&%9=Rc=ePKohCmQhVrwGn8J6ah2Hzn-{Ouf~!p z*vOp#Q}nf|ECb1qX;ocCH59rZna^CmYm^ zrbq9d-2?*tv{jTL!(sw=c#=rv5Yz?)fR~fp<`WZlaPJt6%ymEdW+J7hx#*sgV%M?w2JK2vX?r??6NO+D#&X7P+`&3inVU)04boMb z2u%eJiaCskj<9p7(t6~BKpi3RyVj<*?;2+yA1>U4>}BkZDpF&vtkY;5dfiQoVGA_Ww?R!4u%Z+;B78 zz7iC^_a&^CK%3PgFg!CnuLF zhdN(TOjLn-9bFtb+~j6baYO0o2)sP@*0_4jh^FpKL#c-IRFv22tf~pO9S49_gT-w7 zs{>)SYy>ATPOcOdrI9K)tUig}P#UM|EH|!>?xc|lWII(Fd>b@D@7fb^P0Z#F<^Ojp z{9n+)?}iCL4txM|cjdqiK%A!ma10%uX#oG20Lufg2hc}2k2?TVRYlcTY-oc5tz|M$ z3*SIf0ph<^$&0M_P^jN>H40#Sj58J}bobF*Qo$5HV=Dx*YfW6XDL{iO`z4d&+z}8M zSrGWK5EUiuPi=%9WqFBao=-Fq=Mklrg=#VjLj!Vgb`G*~_9hvvF3$gzVp>KqOMW8u zKi`zGM0O-|fJTZ@CJOPkG{BXE(R&);;6wdrwEqwLbsOk^_4P-8^N;)w|MUO!=e52) zfByW{2d_T)_~UPV@!5C3^TqeR_dDPDozFk|_=9K9cL^Pgw65u@xZ8`PqI+TlWUzBF z;=AJ8NbB7ww!e(P9}084P94995v@t5DvS*lMTH4vqoV))^K8=v?*n~?6O4I1!!s*| z(w7x_rtzpf90UQfMK>2P6JMsRs@gqcC?qecZAh1@kjarzvw-!payShMqY{fpu+vpK z%`|t}Fd3AD6e3YF99?5Tc2hxIC@+#rt{7$4w6y!GYWYu#hm`4RK6Ek@JF8@P!mXr& z+wM^}3Bcf?CG2y2guRwaqnSnDGJjqVg=kWPjeOg#kti=zx6{KyrG%~6l33hCY4 z7VB9GRm{17Il^z|Q@-yhj5!*`;#yqs@Mc1*X`c|q&W}gFJ%`&4PaJ@6qHL8Gd>>B1x$be%t07py!XSW=g7d?#J-O*+)oM{qcZt59J67gk1 z;W&*u6X|rLFPtWY`R50aGRl92u8pp4uBlykNQ;nwzL}}Q_KZ)Txp6qUPs+bwX71%0 zLPY_^@f1;@cQcr%H^dfm0P8*dxN(EAWaUgbR?aCf=_5{>Ob$UmOCGu^miH1C^U?9W}tX?1-ghB8_6>XiD@!oW&Udn(3vS@vtKO!U# zlLkMH%+N_^g_JeTDLj~Butp%zK=>1n!?@n-%mvJE4_0=KNw*wbc_u0t#cRV_C|R+P z=O#V3<{anUH)`{b$^VZQ0GwNi7TLCqKVbD#dH?CTAJ(}NDmySm`e%};|Ob5z#fVNXb(?*D9Pe70b-W`Crp(#)^SOA7Z z6(cfd%Em!5+!lmH;$A@vB(v5C8}AS6Dik|h=sOPkJAn4aKMh>Ym7V}trNX@G5* z{d*eVQRerX!U==0A%`TVm_KKLmZ4&P{Gn&DtyaMiAKjq}eZ!DlsNM z)QFMluV*Tmyslsp)O${8?3iW;aT680&s6stP3X1Ez6H%M21G)gQ1;VM+hj6l<~|ke zVzC*q8X#gEcl1BH8I-wei3Axh+5~WrO#rbmj;-qK)&tmz16V}{9hv}6VnlJF+_gaS zy$|4;9Kbu{1CR|?fZaO_{f{YRGxR^{8K?iRc;So}AjcYAV{2Y%TJAF%F+}yFW4&}S z6KkH)!;2Vfi_L%)ywk(ZAOH363Q3`>gKOr*FU2xBdeESv7AbO(jN#=x3YzOr!A5$n zvRLrfXn;*I#Chmo7pka%eySnCZUQSnOH^!c9`v6F04QKdp(uo)iTSy=$_)g5WD$B& zM7V!3!Vc&=$lw4%wz-&W?g#pp$0Gb+edn96zj^WU#gjYyR|?RI26%)Vz$p{JJy!uA zxf0f!(EXSIj$(c}-A1@g7BNkt?)O_dLt!hA(cfVfV9?JQ0Dq4v=-+H^Vn;ONqFPJ zYEA1DjT8QKoZ{-cqOkV0)^m37pS@- z(jHvnANe;j)u`mcpcr|i62koQ`#?3cu3;q5{77LiqoKacr&ox+AS*B9=;1+ab@WL& zJ_b@23DKi=a^NYh?zE_7H&P3`PjlGl_O0v*Oi63Yy0sEKVKs(N8LF}rajxqhZ%zYj zSUTQ$8sJfB|KC3JKVGQse)0KdpOEtE^~(=lzxv>VS08@(`oq_+UcGp>Q~yL-p>*ES z5s5J)7#~Yd!1k+z3-Es$@0sgW90>D6_lTp#=KCmhUeS@BI#5! zPtD8}S`As%**nLwF1n(8ovh{sQY9)}w5h)V!xG?=sA80+dDLX@C03}YPP0Uhjc9PI zMW&`QVeHruRNW4~2;!4Cm-!D5>*{2g=2WwMjlSQ9E(6$%PQ3R4)C&LgZ$)Hj1$aAs z0CJTTVD}#S-va%whQ+9SR20NN>*yv#J)Ec&&X6N(?mSwF(F|_D*#pMlI}EGDtmgBA z+*#q}Vp6Mm9iLhpMj;(&sb&?*DwjEnbT}Sf=y)`$ZV>4TOf1XWhMPzBNjZCigwX8K zbjw~JT7EQvv3K`9w5Bv6O%=50?ExUI@v^7RDED$xs-q?%-QB^F`7J4>@(tTC>4>M7 z1S9;Dw}k%XaSQ+bn}7Hxe#@lBMhiAltlz>msoHYG`G822{t3o zTC{eM81Ba!rO}eI5&ggN$~ikBoyLGuWLkgi5M>q}Cw89?P(~%DmWtxoCjckeNFcsDEkb3~&bgIi4 zV<^oec`3-`KCVdp;MW)bI&}qSMr;&3j2t94jEDf%O%o#2xLF1+7%xsFfmq(AYE}^Y z|CM15a3!6;T2-vJkfp^!5sZA=6Qd?WSMuNq^gpZ+*vJGNmHz`9djhVlwZ9waU+zZu zzhX6J6Tle`;B7Ji1lYIc0A7g578+oq72p&cyjt%xg>$SA6vRX-tRERT;1T{2{;!Ib zl>nOA{;HZ;Ku!uI_OFpe9ls3mVt}TRuLJQL<~Y7Z5YU)K1F?=@K$L(>0{v6v?=)|! z79}7<%@q7)865rpeTMR~S+c&+E3V{&ryO$Ep#e4n_U|4I@Cdd45BT+O|9k)Lec#2)7tfzR+dX^! z?D_NEi)YWDy?FMlsY0w<=bqJ44i$*(1r3o?6XW{u1jxWQ&SwO1fd3qB#W7`@QN#;= zt#|9aUtacp+4sF)_P+1E_elLQ^NS(%gqhPQCZY`ZpW2!q3DmWZd5C5oPz<|yHvL$- zRXrvlkPQ`0KjT7J?oeb5p-ca4yDs%5LaPl@9sn4rIoBqL1V zVy&+xMpFqRmu2{ma*0hPdgf@8b;(?ez}BWrY@wER9B3tKVGO%L`U-qwjD0X#xniqr zjR%;%b!wZ{y|My8$Il-I0bO~#KEVN8;RCq0AfWd?fFm@(Z+{aUz&-c?MC3_W0d~{C z_fA0nGRs*uL;tIvgov+{X~|8^V0yafL zC(bnK3ndXLnPMM?6x6?C;TR@btNfq%Nm53_#K81Pb7igo?5w^Qe@+o|ky_P(SvWkQ zOwIse=H$Ezx~iB5`DxmOMPLwbK7f!epM;4y4{jnVYB2W!D8!-}SVB)F)ALX;KkB<3^#dI-*Bux@b_8DE?wM5wQ0xH?sh%nUyNu z=jh}`95zzN6^04hwn|-VJ3oyaocR|nmr$^xCt~I|0`3M-mzPq^gE7cmH0vU{AtQEe zyc+ReEq8}+E+JM8u4qc|5jQ9o&JOdk9FO=gFJF!w*25?e>U|c}<*fixf#5nmKuI02 zl86weKr}=XX1d{GLg=23F{O$l4B`2<21Xw{X)qv28Q(Z|A{vV)4z2QR;gH%CfLaEf zXza8I>_BI|Cwu@-1MDxp*|K~+fBCZS_cM&R;sB&T{G->ybT-8Dy^Fa2$dZl%fKdIn6d_J% ze*SZI`D!K<3sgkgZnXYlf$RAODe}dbW+5NGr zW|Ao~IU#O+MygQx4OIr_D_guQtQfsWD>c+d2kQ5(qgk|B+u{WP+?|bj;z4yKCqw_Zx z9FFUQT@+#vC|W@05t0bup4#FwX(6qM5~*oKPcKoXD5O1TMy=eXG>P&vViP&_d-Ib- z3~2<-7vkY&$ymfV!=REAmxJu%P8W_PPgr&ifMc~O@ZCu7Es%oM7i$-c@tXjoJGtQz zsf!t7l9GfT$b~hjErF3u(W`U$D9BB&PKS$zfa#GtkL`8^HzJIp7Sc?b1Rm}uC%i0IPll@g^Ie_CqKyTCsu+@3{ z-Uo1;130n^-gZZP5>^16(SOnw=syp1(pW(M4~zb#7qJu=tFxZe&zzT{TJ} z6MD*blzUhnCIkAGq0Si>F(bLm$MDQ%bE4ZpkP&fKTT7<$6rhIe$Xf8x9*>g=qN9UL zr$>>eoq5Rv6fIRtq3H3lLohz5aT^|7P_LEmpqb(6DyKZ{jHj2{eqX7P3Z&#?T>2zg z-ZDJPK9Zo7x~iteQ4P>EtzKDAQ)e0EOB9gGyu{zB@P8A0fNkhMwxItmB0GbF{FOic zV|gpSUVQbdD`^1e?olkVn;(WAhFrIH{WV=rU(7hS4_xnFuDQE zTP)^bFW_9RJGAO!&n!bJiVCVwwP6m68ImI2ArJT&Da^pbuZ376{J+-ITVUq($i@lX zsHFqv)+AozyBjt`Zoii_9WO4Vc?ZtY=DbdN_lwB(d$BGqCF}c0WNl#}7z3i@`)9>O z)1xHZGagf;p9-|)doC4E#NI{dk0E2G-H?vD&SNrmCqZ7nb2e-BG}L9cNO6Vq?3J4s zn(VkPD_-bk>P$U-BvSo95@Zn`?!5d>=qz~-3>kcddicvLWNFih=VB63RdLS~4QN5k z#mBJ(G#sr2?8e?{c5;|LuFcnty8d?K_3aMj|LytnP3XV-&~NlGboYFD+l$-zlv4`OBAWcXFGaoKowvKo-+3mOM9d1#Y1#stRq* zllw#RuNsp75dOCoO#n@`H8hnV3(%UPHD578(dYp}P3eQZqO}%^dmnuRmrp^aPMyH2 zQ8rL@0f~)aWJ-ihA+DAh)}xQNM#}68qj8daVn~EJC*3VVKs0kJNK`~@WVB$KPAfWQ0q{?7J$>-%2ve+-@Q;%;Zyp}qK|mOi6d-6lU@H|d1nuiMi%Y}58zAw`mb4oY@Xmj29R z@7i6W|MRb7%eRNQJO4VZZy0%WQTdQ56W!2sA~`gD8y49?QRHCRx<)i)YCo$+QY-1x zU(Vj$7T^|vu#ZR-ndQ;Hj%{g|?S`h&5!ab<|KS*jlUjzB#*2@#xDG1-joRQRqpI8W z^r3i=J~Ajrh!(4XZtDLP@dAU;@Guj@Q(QKlL_{IwHeQndCHfCtMP+-!EJt~9<>QKH z#ZseG*#aet^SAn;nUa@qMhtBQ?r-A>xDIl2WBLCZ5dQ1#`S<>*KP(XK-7x`t@#T;H z;vfGX2Y6ig0EE2!`kNIEu)p|bi(a}2fTM1JxfS53FdP`C)l#$|qHZR*-_<9oXiZy7 zCLj=bZ96EmHJ87rM%8&60vbgNF(WCh)#LGhSCUO&ph$Dgi!(efa`Ak#;E=t191KgG zD|IT-)Wbfs+IvUkuU4~HWd3AaPbLV3e`~}LF&?qjnmnyn8vK0doRVi@p1A$w9}UQ^ z{V$9Lk>oS^0q3m^vz2fZfYt|%IDmMT5e5U-!kGo(nr?t?tIBpaz@1nDs50(d$=*NLpI?!xE_4n$i@iu+fMMwWh7p0E&9hJ^@cqNfz0~=a8xD zgzF26wBC)B0qlqVKSn)ssJ~zUc#fi=sTu{aJ=zYk4;eHKyPbc=QVpoRUn)d;Xl2Zu z0n)23(JcBt+z}hKSys%aCqU-FB9+-6VLDL&HcHe*pl$;2|9S^lI5Kl#5-ZFQnduLI z;xjx&;n94#n&i5$0bK|Y6_^ZaLO4~>CzWPZi;~Vu%}Ba=#*R}0Dv3xa5|IhZPrJiK zBu0*D7+`(;^BAVdBH%%h(+D>@147fqDsZuV&$+dH7T*41o+lZr_Yk>iCSDVw5s%H- z0ITtl6h&i+Z9Ok<_iTB%7(>^h8fGR&4p-OnK|oh8vo|sUTzRYSeE{!$0Jr7<{N>!e zhyHOR$yj*#1C~nEZz=~HahcPcnwXW&G0|DGKB4m>qRM%Nno=qw+dg{&YQ>jKqhn@l z*9w+2cx7-)kgkroBubK`dDdd0It_EVWcZciJRhE8QEQa$LZ7JbfhQ58``<)6%;Tyv z@lz8Ih~_iTb{2}lMAY^@3R~iY5IqQC;}E41;-);%P1fC1)dsFtyBaLri8mI(J^sZ1 z`D>&6e}8eYJDOblG`}80BG4%w;%=&d+isl#1m%&q$FoP!tH^*OH2?>{QV~2Z8^IVA z)?tfSZY~vpQ{1OxE+|N|WW_19A*hIXdS1NzSP*doCX<37$p8zV8oeSoA>+7vcR|S% zbE)(2W}=ypo>RJNqyr&!pq2jSkB6RJ<1deeJ;enQGE!MR%%v6$}{?aJqI{=13=KQSs@HI!B{KrZuf=49l78isUQX&r^e z2MmO9h8hPGkFU_^PDrh5SOJixY0te~12Gg}h>sHQ_Dd?mt6h&8v2rd*B1tP79u7Ksci)QWYd5V+QK^nNq>w+W{*^vu=~D!D-?J}(XpK_ z8+3|m7*@lj4cvli*LaF08i-nj5eq(8gP>B5g8oN60Y?h}HnIr7y-?$CAn|`C{9n-< zPqYc(o8SEAuFf&fj>Q2S^FRDzM>95grq;R|1>flvvS-BB)zAZui48=)|KR>Xl8qt@rsGSt+dU7G&s$NWcvWU) z75#R1b+;@xZMQ{tSGNrVW)^<{1O5O8Sg0jiLc$YdduB60jBKNpEz2-LV!(h2GiC@0 z0RmwQ840kUvFWPns>;mB$avg1do2dvT5Ip$d7t~fk#TL8BO~rT_dI^Tz1RMpcYywX z^6Y7WgYzF;Tsnz(0M4Qy5#z!Yxr?Sm4}gnAOTpHrry_L?$+Hp8ld9qwV=5`z0)-7Zg2%u$b_1Q z9Nh*Vp$hNTBQ!EG81Mv;J}aGIO3PJZzA2(I%EZOQRMmSfr=uCEDwL`aSQIeo*5g3H z(TK3stfUxA7fW{$PSt_;ShS~)T%h3=op5Rp=n$FoQDgJ+3{&L=u{?S@bwoDt2C1z{ z%-G`9k#do#wU{qa<2V$75eituR=bT*)2!gFaMXa#lAj1vDzoGy^<$ntQY1IDQZg-5 z_<{+TQF2}oGiW{?QG2(xyvbeeC@i;HLWk9wrA+h|cQ6 zhWVS1Os06>kd3Pav%BgmIL(kBAnP=`x5iNs}<=3?GN&7Eo5 z6?0_fP_u3jNE37dK5pV|rM3>(E6@sapo#bBCq!mj=dlVdM!l0t?|g0uRzO@eAIGDX zQ_ti89-Z(Xd%|Siy?ysIC&fqf)!ORCpZQl_|DXTlnh^Zm(g0V&S+=TxA-d_9JIw^J z<1cT*1TgQkwZKy?8pRz*N6kTphL4b#-W5r4g*9fuf!? zI-aPR+AaUzdlEbQF1T&s{|xH67Kx>H9N=0=1X7+z;P#JNh%Jp7F zBf2xkT4W9w>O#`2f}~^yMI8p_AN41q4L*5-Wk&Uh1?m81eQ8|h7k&>cJ|yv(oCis zL;Gno01ht>=gb-NdNh-0SHH{&` zD{#KTiYJGmc<&C;jvn58fdYmQcS9A#%K?#|rGV4~xH!9ZGYbLg23d7mXMyXAl6rA- zv(ALZrtVF;d28M~q*?Fu#hQqBKK@F4%_TR4_fFNITDXIH6!^MZ=RoaKtWF*cs=d)` zO~R;UvRb01IDHinHH%6BN`JDyNowV;9;Sed6YV6tK6yQzequ8w=}$}9BwcS!GeI$N ze~p$h^XNmC7>{d`Hg-3Tlp_8^$gKH*6@p3`Yv3>Gg~f#PcxC^Dyk178h52X&R&k?S zlyWR?TNd5EW@!kWPl%pf^K8qKF~4W_tCLwUF-WToECf=?LMyLwRnZpYj@vfAJofR$ zys_W_LaS1dI9r0Y1FQQZDg%&@K7f53z>b~o1M~s#U0mHF^nXL>|3ifS#~l<=Iistq zsvRSAIHq~eDw0Z~&vL(9_jT?TMB(*LHhFT2jcBdv^n+ID<`55dlgY{-le$ItKokOa zU>p^L5e6-&!@W)g-<}yh#J$_}7@y1{` zZbM?-T~kPzN`Gg%acmSEG*o2m^gtV0(E3by^OQ!BPN4@GC!YErm+*gM`?-Ak_Q|tn z5C6=6O8$>Nd19BBr*i=Ez{-K;N>#wxTJN?2TFBnmhm%bJCoG=6WdfLl98&oqb1xK_ zNKh@{*~ja1vu~dLE!&!8m@HjOjld_Mpm$itYGW1gQ>gApP|pk?Uq}=qRX!uythmy^ z*<<|h#hXTD%UEp7Z<{e|h;nf;7ig6qsIsqJ&AS+3dQPNs=1)Z2jHrS z2cB(d++Qpb+hUv@1HSm~Rq8I#|AUypPHJFLz$5c+RV=iN0jt#V3*bpQ@wic7wULGi zHoj5wu9^7;Ohy9|GSXU5I>!Dm8C-<6kZifDHXbJlrFmMcr(IVuB?9t$Fr(gymn9T7 zKB1uq8(OZBOWW#k;~vTuyArBRiFOQNrB+RIm^U}N?)c77wj73pEK}&ZPs{kkV1YBK!e=77ZH!1wz ziu-Q|NRHVA@Z{;mo3HjEl@H4VaN^gq7cbr(wF~U>0m#A%a0DwY^nV`>uyb4Vxk6K+ zO+}dRuZyPNmJ$1{rN&ux=9pgIZW%ECg(R=RRnpT`9hS64IMN$=FSg~Es>ZPfovp|TN31YYQ zNGtMU*(*zp(Lm`iNZ2BaIz3ar8M|i=i<3l>zE_|D{Fq(x1RCH>wEip_z;9vGz6K5O zV732;(4X7s{=ISZ|65O1CmuzK(F}MeX z&ru@%u?d=bvIwe*y5Ypd)!kNlff|+BwB+vH+G-VLT<_nndlxhB@4a`0cC4j~u88YP zcNbHSq)@68s0d+pCd6O?un1g6q<-WHdqsoE=sJ!V1aWb*P!F)E(QI^#n+Pms7=b2o zGu5DY)`<-UGFGRAO)c$}o^~nKOx776X{tRm#=ex95H^v9B zI?yuo5&A#2&pIHzhf_Fk|2SL`g;y`9|3b6BXg)MEE%A3>;qAMCJURodejD3 z=HxNoE%Qa)L|Rkt-n}cdbI0uruYjZ2lz{0X28islmu=5r)%MP3pl0UNSt3`R5ui|; z(GDJ~d)dty3!LbUZ}Rd`gLsT~#bL$X;Wgaqdt(*PP+K zXFO%LW_6TMBz9GfJIj6;t#6oW!o@!C%z3A zm)@ZoZ;NPE+0!!@-aA?}jCfx}fQ`&%f~ z#W=iWhu%bDm^ge&`gLLcGe762{=>C!dT!e6SXJZmbmC|E{Sj)*F6e8?0F#PSsn zc{1PVBBgusuu~05`Xv-w+M(FmwOU z3jewO*G-}So1p(m0EiMGCi>r6)22-uw6&(0+a-`H<{MT;4G>kmVhxbQz^FwJoOO&| z5Qw_En(KwSxw(}(f#pThCg^6yo0Nhaa}(>{*9M?>U#~mFRsH>%&!ZEfr+~dFOc`b7 zU8xIvbV=UK}NP6%ZUV?phZ;HU5bu8~y8K5KoklR5jp91rxx*1^J^7;G+-VRtbQQ(EnAS|6!BWsW09|By{(l z?Sfhd_ZjaPM+op}k)|iJajjJ{hN1@GP`2_-X5WoO^w4r#iv)oJui^{?aZ{@Bp-nt` zdKAMp8~a%gF4zjONL?z!E8yzt-YvZaqv8hD$vNIC%V|}kkr52MGkUf}6+KrWg@}p) zAV4D~CgEpPPdG;5rV!KI)>Ts8C_UAhg1#Q~_M+m>RAN@p72bPhls zsvF?I(-r9(sLiGcU~Al;6ji600JZ~Swr7S^-%TCb3GHp2t9fS`r%PYlL}hiV*~vy% zZK`JYe6mEms(g#ltMC)TF?q_(8-|QybOZocZ>?)Vd9J0iHsbq^gv;)#Yn#3 zyaacj^JO=*m{rlKqAsqJKvvwPZIt{4yrl|da{y$6sFRAuYEf#$8U~)*jA=>vnZ=n6 znHdr`#O0Hn-hk~5Ved)foDuO_(7)V|@PGMjAGitNC_(Xaa2-9RN+D={LVxij~-&oG)f&$)1q}U(%l}<)(_KWaeCuqosFretc8D{l5a-zqOTIH|qBb|h8Mjw~{2 zhEe@e5HW!Y4Ara_@jG-#h>Dp>0Msr5c?zzo7>b zhbx(FbtzJ^&F}J%4daJ^=c-3ZRAF)}_rs1rDu^#b04DsQ*?GeILDc-8h-5sMkmJ9rU- zU7M1A_w^dA^z0_BC1XUXI?y0KcwYyFvO&*#MdA0}TAN2zk8o9uU9+xn5p5d2l!!@% zw2|+VXG_e(06!lyhHtoLEN@;J5d=gjlV`*~O#`yf7);XK>2{8jtBsU@b7?yH-+*v7 zP*&{Kx}90BOb`kwm&|Y&g2(c_Q89h6kV*s=LV+ZYIaU$BtT4K8Ms+3lGy# zv5Y!>WzHdX@tD{Ni(hTpJOll|tHl5PbH+Ew1aRcjNgu#I4uCX3@9SyjJwyW({y5VB zW){Ky0e(STv^6>aBG0FdWS^)m&ukwh^dH$iGzKWw3X)-@0OH6qii45=r~6P!_HxfO@0V#VVG>fsOf~14rgh zOJv;R^y`_~F(_D>l7tcw;$|?SC&pbnhd2jUk-I5ZSDW>Qdq(an&;Tc*04LJ`=WN6e zjRx3vGd@V|{~@^N0igfa2mM8)U0iG}WsQ`ixtN( zPZCk~0OmTzarH9}TF5Gdnq8QEljcmByUhtrn7j5_JTgg?hPX3EGGhj2tpYymuFi8% zMmvo=*=6`or_Q$Qm$F2GP>oZS;>cWw&Eq6J1l8g;t+6vUSH=RyyeX)QQg_p)R#+69 z)dT=6`*rBtj-gUjrp(ydGinmsHUXR$1hkI>xLOd<)i{7-g}?_`jdQk_k3N7+8ep;l z+@udc9+DMcbu-ZaO`!je3;G{7!ia6aNS}bz6kB^Fb)IhKiT*F{4Uvs1O)1Ggpsmp~ zH)b%mDzqszU%0DgA~gCjC2tR(yj{sTOC4=2y$C3@B6a=hC=e1&VFaf_Z$sH8+&ZdH z5Gvg&JEN_dnU4gzszOv%m%i>HeS&)jn##JfMhvZ)b%mOAh-!mdPx3+>9Zk9KbNkIL z6ymCgJ-?FrvLxBJua=vI{^dS||1UoM?Ch29@^ZCP-gq|)(3$f8#os@YM4%Hu`R(iG z;P%i~($~w!INt=Y{g;{W%e!AgkOwOV{-{xnU`JvM@F3Ngl^|6Ll3|f4$Yu!#Pyvx1 zzm9#lR{gyh`+q&3alHdj=fFLjtXUvKf+)4F#*3Odhtg=ML(R5(a7WqR% z|Mx@w`#FH(HqxM-@^Y7?Y$0yCT8TyIe}?QCT-=P_cBJGd(Wl(TN^Bmg`G`?MQ*+YK zI-qTL@lHHC^hgrb)QY04Tmb2At!7t?O_}GbDaxXBE@sX$gA9$W@YraU^E_!6JykuI z7W_h`bhPrC6U89ISUbLE^T@=BEMP0(+;x)cuN($m@ z4>pJ8eI}x#PABi3dT7}>S=D|{w!)#2I}UewVi5*_na|z+?Z$60LO2f z6KH_*(fZSA0Kd7ddy5A6!+-eq{@~yFEAw|f@ZA5q4F5Tb{@)1PKi<`Rm)2YApB41o z+TO3%m+#l_-d?_Wclr9w+c&S@zJBxe-MhYImi^}K zmiDFo-YO>TLLhXfZK(LPCeR3PU##SU=Aph$u?Ps9uk=OZPzs zq1t^t6{YcO<5`C4ln1$*TcP<=17eOww;+IMicT6M%x~r*Ekhmnv8qat04XWi66X7I zklpD6*mnlrVFEbtb&vztZ2~y@kXPjZPCa%V1Ux_b0CsZ#x8MVKI2^$0u|xkdF}k-0 z{cmq)wY2JjnVL3=$-+A7-J=hF{GtN6l!^Z}JX&CvgRF2(!1b0uI$_t zn}|zP46~>wkE04ig_wojpCi7gphFdK2K_^uONa1?qil&+)oyDl0))pro`}E^Ax z=#SXAefRX^5&oZu{=a+s?&-6qkK)YVmel>llczUD1Kh0@V9Nxs^*6U?0ywJ%VE8}7 zl39RW0&;~yR=HndjcTwBIxU4BTCRW*UQ;7!2!U;6@cVqDjI<%ELh=~pt8U#Ey{fT< zTJ?}m=>r*2ma>joS;sF*t-V!_PtXP%`kxTZJ2 z`)CsOxaLINi$U|6b+OSfl)<$?B7n<8yLx=w2ml>i(n_{xvc08EGA0;^5k zU8$D>KQ2{m9u>fr|C{~5q#q(HHFf$;(R)|bSoTO! zum#QXw3ElHEm+*gG&@dN9(LvA<^pG$?(urkd72V&2|y{rqQ%Wa&ryfb$uZ8eo23gu zCVn|BVn_#%|Sp0qB#kUm%H2;<>l>yj& z6avfgGymuV*yI5A?yQgA2e7)|%%8^y{coQ$hk+`TIAgKM4z8@z5ty5IF9l5vzf{b) zaRM$GOJ!Xmq+V59Q@(hLUb6?1dmzic7J|ogrCINB*gzYJ-o^fz4Zb36d~{$@gCAu+ zKxOemVZ8^XtYYRWFpmUh{-ukn!@9Z{F@UasD@;r}6yA~UvAmx()QY{Y0a%}HZX&_NR!@GwRayZdiIfyi)0`A|JV}$iT?k~fARMp(UJaK`TsBdg@65z z|EK?M9}V!(tN?qNhHZiWu5^ndkj<6}VC#B2r3rvTU>>KjW5}mAU#68z;G%)dmEgw2 zcQns>RcVpkD=5*!w8X=DqW@I?R+We`UkF}sLoIufUMZUfg1oO?B9u%PrMQ;Qc$yf-2%kxUtrJU#BsQYsd`9F0cAm<3=eN9S39?KjiG-?H@ysTwa^Rv8LNHn3(_rLHxd}Vmj<@JZB17`D`qU$w$R! zE-5#N`e_R4yA98Q2Rb%bt_b#t04i#ZrS`khB~TWikRepywrE5WGh{ZNuqa&I&57ov za9^sxZ9@Mc?#vxBA7MhNA=ElDctK;tJY7WL7Tkjr4I(3`h>u@2$PRQ95mRk@i~%R@ zxu-(^a$~~(4d`Ev3jdEGgxe+nk=-1?y_*0o-@Li<&wldV@AP$l|K|14Qvolbi>FWC zzq{Pc0rWNB^8+*hK}?nA3vNC~ZYXI0Xe0XHT7$CSw|oE*?SmGEfJM$j=Kc!=O(AHj z<{@!JED#V;G;KT`Wd6QJGyGHe*O%T3ky=45B1v*?{M=<6Z7DOGLzeW$%$lRc5Afq=NQnFT=BKr>B zHG8c9_d^3*39Y|(8X)lc2d(`-_v=Q`|C`nLp9T8Y*FX8+{x1=Eb9wobpMLT3%U7?z z{`%F+ufG23t9M_&TCd+p98B=jAN-5|=b!!GzyGiO-uJ)%Tfg=zzx3H>pI%Hv&fXqW zIYH--gMXPiJc`7jl!|M2gDNL9G`K-j#hOc}jDV?v*;Y{Ir;q}Q$-t`9TgWjhW~Vwm zSk$KH{0J9eX>BGWrnSj4J<8%T(74H)#3x0dA2vd(3qI#D|5u^UH#H`c#2Xjque5O&uxICLw z$OKc59PsYieB?rTd2vNV%_&TYNs_KL3+Wrd>I1myM)l2r{&((TzJ~}vq(E4nZgpWAi_$)3oZ09%VN}JOyylLn=RI-{ zLXjGgd|47-Qb8X}Kz6mrs0mDCS2%G4Jr8S^dt~AZL@W|QHS7dc=Bp9F%~%0gU>o?X_%JJ~!7m7g3kE+p&07?jcOCyr5+q`52jlU(B2yFBcTUN>YF<0b9DU zQ)>tW02#-7hGP1N22aTgeDSLn32IdU==Fbg5Pwr`F>@!go<*iPC@1NGYepbXq`pjJ z;QS&icblt`SE zG-d1--(!Zh5_h!beVsD%=&_Wrn2)F_?i0EGqW+j6CM_~Viv;C9T`x(aLh)-rH}sMI?hgegbx9piz5;FFsfMC>~zYGoevT`F3*vc_`NhWMxdZBUsd#Zpfxeq%mtzW zJh{G+fih(b54lC2zK}kR9mj?PyYd0~|3eV|pLnL+X976>G#;u6z?PfWvllPkzJ5Ki z-mRVN0}$X)9FTZVjox850BbpdsEWxsW&TiYEzTCD>(-5U;9v07iZp8$ZisCq9&@+ zRnSCfmQ|Ndtl6Mm>rG}9d5VN$!rm|e<+_2$O-LxwibaK4AH~SIG%?t?{yRLVG5t>{ zXP^s_AL)~4n*Ybl&?b44F~Cg=m8t0bd~@6^;!G84#^R(b5cUdIujpif^6G_D@Sfg(ts6@aLLjAL(@&kR*Va z5b9}~EPGDKqAF-X@Vd1c$@Yl-&kEr=9t1RV0L$y@DnUTUIDjiI%pZLKAAJCKK>%D2 z{eQgB|HkmMBS|uBV|ieg;YO{D&Y1Za88>xTB3c0@mQQ#kazt*vXCH4ON|i}nr{Y4q zM%j8XcM}fCxFNo8#vWs;Ap2Oq5VAdo!xB~l&{WNxPa@-iB3pn54zv_1n%U?F#^E394`t6XJ0_>V>_#A>9-J)V)KMq=kyRnWf?>nt`FB5-~#% zaVv}_5I>7f;B!{Whb8&tD=_Dt+B(q%(3=%+wS2 zO3xWVADO`uXueIpRL@r7lyq0?Ni}6ziNYrl0u2cCtHxjxAhM5*AZU+#Ru=Ir86=7* z2c8HCsWNxOnCqi}Z~|}LxxyE`mAz{5eg<(H`tB}hlD|x$eZ7__%(AGRkJoM+Tk0NI z^FbwjAE^cQnfS?fI5=#nuzY3Q>iBTcn8*~@8MjnsTuhHnxO~Q%VrR6V)g2*R3Q`9} zd9m~}l24JRudyTN_D`&zS~Sowpj+sSmzK&Se;<*svC-u`rSQc461{WCyrE>3>QFWA z{AuS+dv_{&hky^B#T&$KJPIlJL!)G9dJTwmBlr?}0s{SqnW!3F;`ux+^M(@Lj1(1N z5nuEVD_0@UNR!y*6W$z6a@m+YDm^A#G6sHJWh{SK!vB*ffO@D$V*92BN z@euxJtD!RNM=N?O<^K`5gQ&~R*q>DUi>N4?q??ENItoDwc}NsgSMI3o90@{;+;08= z6|LZ72qKn(vw13kGTlom>wn`=q}jSzZRgBBk|B)ZvN=Vk4H-e{3w$yp3%Haq)09eK z6-XGiGOP?38LdY)z(ZDmvuS{n?xXvp0dDk0fB4$}bEE&SCjY+?=>Phlzli*Yf9vmT z{LSkxe>{H#0JLdawWi9s#=7+j=lUE9i|NYF zjQTxGhw}gxO^nbqWTw_0+20;BS`+V%R&_@qib{91jPkG`c?*>B$_`}~vbZzmA*$Z< zb!nARnK(oZn*%psd4@=lM~tzS#mSYsSP8DkWTJd8GwCQKJJZ{$GG=3=l@#JIadqZ8 zf#7F3l%6KXxr^!H|G;EtfKlK(Rl!81IEMx>(m5-*{z7O9tKRj<@545w7}67v^!uMV+@L9l2| z=W^#6m;ZW`*@ z-5|*`xq8a3bx~0{aaR<1K`Wc0n2NLpM1RJ(Jy7&g9E$R}Fg2)YR8mh-eo~OVmr+4w z6b5@;;o+d3Q1Y5Lk~4FRxIaAts*V%4ChREj3$hq{gwh6&qMT;NqjxqoTOaO<=03K-*fQYnJ z6A^j-Vjl;v;R6tn{c%7|L^{(fchCUUpbbH!>PSLS+Cu(6b^k_3r7k%DRrVGlgMbjt zzyQ$D66Q~LfCOc(sjjJpV9ni3#a&nfrm3h@%?t_^H)&0Cr;GC5(PRQQkGH9$tm#lo z#&Zhi$!nfk)Zq$B*BeBnVOa5EUN?mj!=m(m#;;@%#fb@oO8Z-}6*lhT5G$y<5dag| zMDC9E@Pql|yB35)ck!t-z!`|Z2{gd@8}}X307U;EviAQ7pmRg=|Er<@Hv;$9*I)l@ zfAip=wK#ONRa>oETQzPRrY5ppuP;CU(GUOkfBJuX_dDPIA4ZJhHorns^IYQU<=o zb&L7k3uCU8zCwaaK%V14v(Np=^D5x!Ngyyw|TQ$p5!#0PpKr8hMxl zkXx|=oOa~e!tu9F0NX&wW(~mRgGBxguz3XrJ4lBOL|v=2WBL|fKz`;@MZTP*Q`^D6 zC&lJ7>5sIR#$-|$I&wm{joBsEB^k?}<;oTw+gM3raF-E-HkEouskntJ!p5{3MqtR4 zoHm6OQ!O)Y;_B6sGFDjz`@}$R-NS5Drw)i98qp{Cx6&J?4Y9I-ANA3bTh4eUw4ic~NkXx$ zd4~R*n*w5i1M<`FCW>-_#8Ib0_!JQv;v!6{uk&A3(Zn~Km;N^;`GQj9+alQ3%=u^w z1P#1H^6w+fb)5dw^H zn1)dpM%WQ)w%-u^Q}B@1o#bmO%0!soRL!OFlcUDjvk7VU_Wm%1|5&Zg+D5ib0GIFH z?*Shly$K+&!u=e;_91f*2LRFlJ#qgf4UjW+ghx;5JxzfIRZ&H2strI}wFsS5sIH&` z(`TrGHWdi7g8%^of&g(~r9;dLZA7W^r}G{xWnK_uXf2t|ct|sE5TgH4xt*L@;!s(l z2^rOwQBtBIDQ(J(X=DyjZMA6&s4c$2GEmQMRCwnKo&^R~oq{qVdeWSjb-A%xF>{0D zcPvD1UMXtPt%CGJPbq{uoZ<)Z`6E_<^Jsum@1}z^z*Pl?ck2dtu(|(t(EWQB`hSC< z|6l)Wf8#2j6rhUM+G@3GE%b*SoPd1&?&}}_@elv#kN&@(`}v>w_NSjbxwwdlQP zIEiG|u>f!c7$WNQML7vqO@u%>pQ);;%DPwVk7SvwnM6F;bRrogUThABOVu{=_E%(L zXGDz^AY+|j{V9^r0>?uJghnGH@8!@}&`QbK&wP15^ zVmhIb^nhx7zfKaN!2LB+8W_)jO&@cCRW)$uT$jH-(n?v)C7IVcFM=F0hk}DhO?Wt5 zL261Drqr+&A>U{W!M-{mVh&|0%z-hOVJK%;l*H)*}y^w~=+JBkPpy zGwzW{^h8QTBYtPB$XrYT*K(b~SfoR3sfR{h7Ij|<93+mvG{#A) zcL5c+tNOabNiAe~rjX(aoth#k;rfo<4gj_xg1; z`G2e-7f6KmiGa-tA(;b(yhJ`>XuxRSqGB2K&J6nwy-@D%-Ns}%()LUD z>?R^sY4G(MS+M1mj$r0128XlJ2GJySLhBVg8TI?jI2oefE@6c2mVr5rN+e*C zWOeW&^h$a1ixda1Kt&b+gh|-kl*hNONL@uN%R)?fWcwtPG)CFcd^Rajrp$=!kBWr0 zNSC9zSrm+E7Sb;~zHvK-D6B`Dvd|fpRdAuAseDK%rs&OKZs==Gd|);KkU-wOq#q0d zI`DOb1GteOpodxrJiUUCK7dUQKt$3CaKkM!k*9}7d z<0HlCcguLwG64e9mABBO_*AN8gAy<(d~Ocb#VapKPO#U-ca^4*CkF(_9Vdk>pHXte zuu(K$DMMV5Eu_aG!5xZ4{vt;DT5N$9g@RD@^(6Bl@z9i;(O_t)6jE`Ux(PGmGx zRNQ+H29IigZH*Cu)}6<{$QwW$%%}?s_8+^`j3*GX$z;J=OI zAH{33!fEG&g#Nu+{bD@=bLyFPZi~iT%w)X{PGU|6a_X-&q;-5sL& zjR+5^Vj!6L%-x1-A!RX2A3zy@vmh7A6ga>TFwdGS$t?E__=>!pMWRt?t2 zDymFO5zDSwjjVqR`cukC3wEEoW=tkaz_e+vh1#aIHK@_B+D;ctFvL)G>m_@HsK6hy z_WukHVEQaVr|+`JI(2hzaVrH|EEv&Gd_*Wm@c4v!*6hTo0V9nnFG3Vkgp75Hc7VLM zS|R7NmOp>tD6tMTS#esxFrBf;muZ3K&diW`LWoT{UVGgoaie1T54iAdEI)f>We;j% ze%M6Mv#BBk3MkG=nu?8f4XKiV_>f9;2IWc7-RW@Qedi8cp#~owL@kqXGaxITaZjS{3e9|+t9yUS@?ev1yH}@ z8({)?@$FAvzx+x>xEmg?1elJ60CrgcVvb%U0?{Rt2COLEg`#O|ME@HRf6xTf8nm$l zm;pfy{DC$N3BN`>zm`u0mH3|!KSIVDM_e+GTKizeDKJtfx+=TppC;ER=p#PQO{zK@0 zHtA>;iwDpu*=H{6%h#X(h^XYhHltztIuv6bd3pdR5ws5-Y{CKK)6A?Oy$mVk&wdLT>T zM@tbDBl22Cy3OZbJ%G2&9KbCG0qy(AeL+Ci_FC=b01iL3o8SOG`T!2l0Koy=v=88> zIDieHf8W>YBlIu(h5uLhoudS0oXhjL>!Xs_$E@T4(6lZ}A039l`$prJN6h6A@>4&P z3q6&gF+_*`tXgQ6y1d-|hqP4Hy7_P)AZvbIBR)HMfG8*M2t#1|jazF*W>&s>hCW+nzerHOPy zlR!00;YRhqTo;DT1^YzkU+z-)FMG8AeZ6k0l|1IJqw@d7!g8h+fJ^uN(Ezt?0vOew zyx}a;G2Jm197yEVNXl=CZcf9BPyZXOr=wV;mUIi|axpzw%@-Usww>UOf?~%f+wX^~X?`uJuiUB&Ie<9M8d7z%1D32fg--b(e z%&2o0Sz<}4Tgvl^R@T2j#L${_!zvJemWkxC~#Hy?nO8o?M8?PAhxK)55I+HQRiLRhQ83RZ%7Hap zE2IhH$Qwt%~4_{2yM5EYA*nAH2JS(bbuVRgpeftCK?1 z-~q(V>qe)_GUPP`)}fA3MC{XC>`OZmYVOS3v6#;{(BSFNJ&>u;NXenlFXrWap2-f2?goLgjgc_ zc?Iz*8m{m+#I$QxSBaMcE8N{`(99s$X$c6TktC|F#Q(rw!zz4`4qBaDP646H)#%34jj; z`j=}6|F6S*6INg!{d8)MD$99H45+CP{GrQ}(&S89{yF_SzrU~(p5h*4CjbSwCP$OVss^|j2#myIx))cE@(Vs_8*Ca^&>QJI#b0Yb@yUQWvrR|5|^R4Cx7 zb!(9c;Ik2eL_sKSDiENSAg($#4DF>KOzy%RE1f3{-x; z)1I3tTN06Y4D-$kxR^GFl}$ukof5n%rO-g@;@mhf6Y7Cs6`Xzb)FqE5CnQxuAn442rROgNN=Xn+(M3-ikXV z3~*l7fzTUy>ix$(gLK|iLHhukWcrEV;skT|c&=T#c*8wqH%Ycs@|!{n&>O~p%om!{ zs(lgubM6kf2N6HX3UCGuaK^LRPXk;7y}xN1Aa;Z$=r&OGd(!^jYWUCJ{*V9GHKG4o zg8MfvMp=|;?3@sXCQwzisVe%~FWo}Hc`4|K03jp zTS=U{at%CE6a9|{LN!}2+=@M%wix5HREk;j16ZP$x`2V>r^H2(H=`(0i3KaOxE z9(-d%4nK1M*9ijJm+13&gMj3Q3V}cR0FHA2x8?)5KE!_x0q{+N{$-EwAGjiY6PJ@> zfcx1rnOte8-s<>Wmuv+97my`MgnCqX#hs?5P^_-Mve{4kL7{L{ob&=PsKTw_tpn^ZQS-g^WHcNvNyh?}XRv+$Enf~FD07XsGNH%teh!kl8^k}3pI zVQ8u_x8`J^oA-4OKtwg(79-D~28XJ;mb6 z5&p|D?f-|7|Fcv6zq9_gQh@G^2DlCfFw?m=W&+6DCT8P4QE$$qeT{6~$o5H13K44` z@N~xY=IE9+zZ=I_jde-PTw^@8sSj&>e}w;gnGA^3j=|Jp-c7jBT~hxdb26qBu@v7Z|}(e$&W<=G&gfIQMJC7q2G!^m$8`p2Y~(`;s7QGfam$H^7EKIx^8V1 zd!DvzJhK6QWdc;T+)p^zl&C}4y*QtgY$=vUCU;YaD?pA$HJ*?$Zq~B}2a%H3MyikU zlgqO$&s3TISBY3+y=Qqxmi0898tRNZ1g45Kf3HhtPAUQbt=M`=T)ta1jLLz zjZc{dNKUHpT8%rm3P?@FCIpTzBz<`mFchC(Nt3O@%11A7dM1MIm#O??Y8@F!W-)q^ zj+lEe#!!@$z?@_v?&4bT?ossr@GJ^#I~4ubNc?XX7kh`+57z`>wqq}T`t13;w{Ld5 zMXOceiL(ztM7FH}JADA;0A!aHV1lhHe*%%`(^A9VS|j4$0`!+k{%K7W%70}{P=WhF z5u}w!3(ya-e)I&40$z%ATvXx1^;7M_yxXCzLb^tz(CE_|c@5DzGDV8=_^cWC9F*kb z$UzF2l5SJP?@AhvYFp^Yg;?MPY3bw3){>46CN-r?qZDUBa^$fFQvthY?8Fs7jk9Qg zlg^>vR2o1YlJ@@yUUNP9KhggO1@~{`{zo91#DKjVJ%B=5Ypu1l_Vwl4ufP8K?VGpn z*K50rP&h;kf|zH{y-=(ZK0b%SlI-V^C;qlp88D^O!}0G#4Mvt`xQ)e``)g*({`N2( zh-(RkQvFmjgSoVFC&*YzDTr+F$RW&kx09Qg2nQaPX!h-SFerGa+E1*&oj73)!oms& zb_EBytoD@xP{u(r)l_3yEOp};r_;1N*n=!*D_7;Dn1Ii~l7x+n(WWW&5C^0?T3Et* z_eS9h^QdXcbl25|4<~@Az?H4PiGfXNlfwtF(AV#!rmh?Wv?^%| zULqs5g13{2d3TiiE7e5er4DlUz}LjO5X=`7I2z!sdxtaYM?jc{upi-kQ40yDo_eN8+0Q5xVTtN6XOv+$ zGV?|p2KsXZ?ndoPfcSGpS=#q=Cd`Q7nvJE<{}=$MzaH|ut(QxeDyE%+^JwoLmfX#~ z(o052Gg2Y~p+j*`0MAW^;VC46#4{@I(i!t*@yt=UVQc7Pu2cM1Q24Hv>x>!lhU z3BxL+^b{vvTvf&!hibQ;kLX#VK9)r%d6SB$ld&J6#Q~53sO^`mz&a}GA8Xq|#S>wbt z5U*IOEs3hk++bX+Di4K_36;)Wnp7O3P&1N(L|D2LTXGyXdB}uM7+94a*C8#rhk)iP zpUde(QO}${D&fkH!x!uB>3vU_usfr5B6cY$HukxN2SbO2(Of2N4BR)TtSs`#W4wq$ z-90jvB8gCArPJjlGRinM%vRf1P1^qF8}ODNv>sjS~f}G@1J!+5glGHEq?O{eFAE0P zJx275mcC&E5IHaW=NuZ~R4c%#G{Bjc_d}%t9$@bOx$^&;MgQ*%?%#3v^b@|-#Ujmx zaW{jCZ%r?rT=Z`1_4^s@l zi9|Gab~lH|;xo}%jKR{(u7ZLSLL;y?(EF_z`HAbT*PNW|+l9i)&B~B(?GG|zv z=`}0>3muQRW#g1(3?slof~-~aaf4d~;^cx^v956rA^N{y%F{Q%*5X=gg7k1%zR&Sb zsS%l8rWCX*akMFjX;k6}2G;_kUz zbn^Q9Ao1b=?k5On@AEpu0UUh}x4{9NbksTxQ~l@zIK%<$_W|4^#D4+-@J)jL_W-xo zebRe3xeP0)WgKH)$>h5TM{_JLAVId?*TFs%^rdo*g}A$jYBRIa0U`Kw*%*kCUbC^v zC(t&%l*r|`!m=1?O<079*vVjXMn?SH-!d=8VC4^b583n@D zEt>vZuqLk$HCR0v)xcJaQKr(}o2n6au4UTHWW4OC3GqZfC!~hUs7-cMnK}euqY|0wB3Fr| z%S1nQlprKj;!~cIm;T4I?>BEdOa7zkg=<<#ADGzMVrPmBwUJXKW@ycYSCsmg$q?{# zG`RSD#{O{8f7zZ2C(L>P4HG4hDH9~f8;h=ce!oLnn7VR052)U=Nzx*Hw0ftJo;#R!v0Y@yx@Gb8gGz70#=L>8L&hVP}g3opyN-=pt0ZD+Y>g8V4zj zjOCh>V1wP)%pIcDP**x-<4Dj8!74>LTh@ZcL1xupK1_W@`g=&~B$drk$E%)qdfb=; zVf6F@!N4dI^Rh|if})bmKxwiGLZagS$LYKTjDm@>kLie+02sE*crKB;#W#S#N3+)Z zTxo1H#@eH_3(A3%sYFIF4?+zhRy zK@HlPKr{mVnF55yBp+sHG}iu-8_?(gZYr7g4`@XAG{ymi#6CSfO(wc(D*lkP07O=@ zLOp$W5vs}Yw#|7#WhEGX8f3OL?;=)}WZNaIcfOqE1wY8Td@8M$swB%%TGz}hO_DtJ zRp*l-HXk``xn6O(7I!nx^=fipdv&Occz>3q=V^Z!6>+nh;2s*_)JgjY4R9rv>ktj# zH}W#ir2+ol-~T&*^$-5N`p{g^-h|=P=(R&Zay~Q~>6B z)gWt#x~g>ZS*R3qy~Q}5E^11GY!YoqDjVFThLFh`IBtBp87=HjQdoS>AvM?05<1hX z9?sM_U=_R|6{D(ogR`3u6EsxV^8C3*&tm}aL$5yuXo#8n#?m;<36XeEL28LAARkm_ zor-tIIDGjKoy3A(&dnN6V;75eXgC@W^Kph-Y$MWJ2juht?77b*iyX8Ldj^he%)W(DXR$+qnP zh^?>1x?`zJb%!?McADlgr_!GvjezBo+`1r~$^*Vf$cHt8gBckhbKd}GdJz5(s(|ug z%JGRNij;tmEsPFVLjDo5O*v4eV8n?)%#Dg(RkgLnAxGWfJP-vkXbo0>&Y~LGiBuj8UWA?d$B7l7Mmxm?HYhB z6F_?Wk#k;l%yJL5%tQB4Q!0rintSwtdgW%g(Lm!i(#SF=s4u2P{$xJGk{WM!q}T%e zw}2qUCFWR(U`G!iGyW_tVs09Xo{u~tk9hYfxYGx4Uf)nptmfe8kCK78W7HSBdBq5a zngE)8k1i9eY$aXxOkyiYDAR^4+1Wv$E@SIGu_QN(!_G9<0ucVw9Q5BiM}o(6U-x;eXBj&v0iYZa%H#%x1di8-TqXd|OCH*9zehpX_nKb`=}&)*)u4bD=l+ z0Kw)5O;ZQoqR{O?Q}ZWN&ImAfe`8n*BJj)^?t}~(!qhQ7a;CPAaQi0GebB$$w($QX z7JyIVn`Hu!Jw5>M)^|DrcliL~eX}fIL5B4}(K6vD3IH_Y{=t7D8|wdIT6Uy7ffz!58S{XsNKfM5YqC|1bnhubb$O9P#Kc1D zIyimt{6S4j=t(ALB{Pix&ALcI~w3tXXrNb=;ODw@qG zl`tAziJIDBmNT_dX)+;y)InLD)l8viA(<~*fMi8*#V+Lkk{eL-g)t)aKG?Y;&A307 z0Cte0Bjwei8(CE5OwwXs5G6^`OU#VQl$*#LyE#Dr#X1q6=Tub|-^0x)Ly+RYt4LFw zx>>!|d0XO;3E=jFfa=9Pz#yQ#9Kc-_0)O-Y@avJn{ksT&ZwB-)cPISc#AUe01@uE; z0@K<$4}~1w3+byfe7N|v{$AC^VWM&J&+4#|k;A3UU4X`;k@ZZdV7MNTN>~tQk9{?5 zTkh3vQ#9|wqY$~;?v*v{kuT~bu#v&dBCbm5Yy5qviWxc#^;TLTW2ljp5-@DV<{CRW zRB{n?b5S>gike0gLw7@iin7_pTtvltr>v4Soh&}kh#Vx8rxJ>)q(-K8vwcg%9SHyB z9PNK!uiGt3Hg0Ve-zEP)bmyJ0?C5G`Jb0Xd)Rz_DbQ-{G>%GFtagqrDixy266-e_= ztBMp9S!0U~4j@wnw36jj0z;i~7A=SM#vKSr1X0F04lMU9q>?E>CUe&?jn-4?O42G(Lf{$h z@A>%xSx`LJ4UA}{SZT$(&8X{wxftOs7PL)Rp(-5?!)q1bE{!AW#Tnomf&L%o0OkoV z_Pf@2N?}b5uM9wi2&_)V4Pf+00Ljy+XNXf!XJp7Qz-CXMw~q>ICR-Q_<)H8$g~O4G zGn>&XdMMK>>e{oOOuH{4ZfF4<7x@I@Pr>)o{fALTR92KA2u+NPc*)0*U30whG4x;K zcr{u;>($rz&iPs;%l6{D=gca>!ZEOrAWytpB9t^WNpcerD+KVTN?0em1^c7?U_>7# zv!Rn7V>-!eTn4*JpAJL+a%;l>>%;$tO#lbV03NRiK=$+ja4TQ6O)J0wAAqM#1qz)x z09BUvW)E30=%;O$ zY*r@ZXQ)E9Unn%(L2#L({*mzuq#x2tm(QT&N8+=Hbh=$JN;vA4nzafD46VY2Jk$K@ z29IT<`=mcDq^L*;88eT})x#3Lhm_nFafMyVLfjMwAlI-0e7H0~8HoS>Kl;P@@BhpH z>c6Q!-(~LqZOH%4?;7{VjXuhD53tj2WA5tS-QcZZ26HZ+tlqz0zx?TsfAE7p`SQzG z?|$y`*|R5llLSD;)Rd*u#NE2ZWX(TVB>VDsMH^zB$xFtOLLi7JRK0g?&8+jpfjr#< z;@udi#`nWS#H`jFTX$`mlEe%gqShd`iRg&J1ilm2M$PJ#Scou4X=0RSM!%Jh7{qDm zMCPud&QMcWf4&qS6Qa!{%P5VYMV#eltf!YFvt~c*G-tIx>%?;R@$9DfW7xSP;mfziHglf zJoFq+-~jev{C8FcAm1<_zy|~OUyA^EfY86(SLV-7^xt>zQGBD4S{-q;kkMnv?GD^Q9+Q(pQwgljCkR^cld+G}#;)9ifecIUqs1F}QxE#bqp&gwf zCV`2gwbr{S)P%|Fg{j2(19OKm(xqZ_lFvwoL%oxr$+NTFm3Fr$BfL{NTMu zExGkjGbetXV6}+BiMB@wcLM*nwl z0Mo{uTKEvqyGviMDaG|DoKKj>qH)@Fs#%VAF+L}%N(&d32-nex!l%e94x$A9B1p)g zN_Pl&gH-V?y*6M8$FA_}H16apvSJ2&B+#KL#^fmuo&E3SqJ5ZadqyVm=*1UYLK+AxS zuzrjfac28WF(o4tiqNWx#T|)RRGbNEV1^oNlO|Eq+0eh-wD2FRi>vJ<%cr!%1h5BB zybBY+`rW%*^(O7&$R_0ZNtRW#K7MEbR9!u{3sD`@E$ zU_CFSX>%8Cij+N4f9jBG0I1Zjk=>Jp;(`JXJ_u@%=-ciqYgzUg7w?ib~{?4EnB{8)t4{tM*DvS^#8E@|87iB zxRXc37GT0j#+t*N{kJt!wbm{!R_`uf|H%)3{Kc0q-@beIZU5E{J-KO^&UxL|=Hk{( z;MUD7p?{vh-MpJw=aTMb-K>)uaIpkLY`)8Ev~80i$W#Cw7qYpu0gh-cpIoCZlO{b2=w!ltK2<|U&IvpcP(w9q_xWhtkHS}K>A4n{AIKeJAy zjL^ASTDl5sED>3993y8~w1<(}qb<3SCmE)PLVxm2P5Xj{)e_9c%-5EXJoh1@|B*-m zX$V|AGKIQ}gp_lS31EG>UOiczgstCK5YW*dJC_4EN=)8&A@GOo1Nhb7{l0u-zE-Dw z-j5af-?1m&2K2u%9q#)N$dqDRzI6whi>ZqFU}k-WIwbvQkXhPFk*uW|EarXXIm5*T zt%-H0k`)KkyeG^DhfjH%np#)Mgl-D?4DOj?VUFm3@7>r*<`^L)fi`5Aay&?u9jK!B z&g>C|x>)?oDo&~tCRsO{^5AYgkb3h-{71$+Fa}9Q&3ap@tyz5Un(;_v0|E3d4(bO@ z(fF8fukb4sG4G-(ChQvqhC1o=tM^8P|8l1G|54@t?8Y^2L;io4G=SH>d+@>M8h|}G zOV(=SQQ9lKD-OMqt+Un2o73RH3Y8^P(a0I&ol~wGC8&}K-PH~*79!=Oy0Q}+#p!cR zGWW%nKrou>l^A_}EOFH{r4<%A2@Kth3Xw`7?-|RktvUb#$&IN0?Y6E$_iBiQxSRFN z{!T%2su3+kJr)A|ScuJB!xD||UK&h`aZP37RO$^EsQdh;RqzaJ1{N8du{cRJm01i< z-71{DJ{ewGSjGx1Y6(7Y^nVxdKiAk+LTN_Gr)$o8H!U1I%a&o3#A5Lfyo4AW*Hp^C z;_lW3ia5`;Qs)O&?#3`2Pq7nHHypk?fi_q-G#v@3yn_L5qf=!BWW12Pb*ctnq|WA3 zP!s}ec@NjFz*5b@E4ZVy9hfw9D%t>x5^~5SjSmPlv)0G3 zwbKo-px$p+_)qBnyTA6QuLJ)-QWJpnzVH0}^x5-wZ{Hk!gabYR5oz*d<^Xp307}cB zasT{73jd*K74)yH0|@ZH#ee62uK3dt0TjSC%CVHy09s&(Xjl&70@cXU$>w0qtSp_b zT8#%#t%HF|1zlC+APz6Fe)Bly+``!I1^P#c^Qnn zQp+Sx>>)?MAXuA1nCqUfPHo1!iIPVyHr!>HgH6d@j?hW)` zRYxW1#LbJyC!c*go|T!1y!`3sx1s&N`Gx2h%OBzpg^?JMl{nwf+`AupuxYP zg-U=*bfJL?N~i!Ob@twKybq1{GR9ojxvqO{doRo9?6dY-bIvu__l@z6=j!t~XMD!z zhohwE*G)Px%$hb(U1BKfP)3I>@lz)~%8b#8&{+$uj;d7QWlwDNecP@LYsM-9mUVX1 zz8`1X@JZS}>x|GjJmFpLz%(^b(+R6vu3|06h5qM{tcr7FOCPArHgIxDuzAu}rmT_4 zQ7#{S8NSP!x?X~3A6xb`r6t1pierR%}8%N)QZAHb&;1a$lD z@_;gc&prU$!3XezKm0L%u|E!dmo#t81~bn%70 zSt27Fkr4mKh^FF*C!Gcprsu&vn0F;D5%_-WwE1L+J=j1+K0_&}EUA0ReXb1R_;Cyd zi*$}a`fWrop8%%~@2z4wjXDycR&-(SLgh`D&?5`~ahCQ!?#%$gKs~>AfBi4teC2jE z&HFFEeBBRz&ByWm`@`$kPYmSU0Mp-1{!j2X|KN}QkN@$1csd#&IDlJefL0owLjzoS zCM_h+_W;Mn*4Ts;8GuF3vOq=IqdP>CDXbI#hZ{I+39-r`Ss{-VFSP2XvYM;zpv?HF zA1^q7tpQl2eJ(v=CJaPVcS>STilb6QKNp7Hv(qX_@2MnIy5(vpm>~1O(8(&P2g(qV zo>=qoTv6?{R>hVns3vl*q)TnTg}T#v-c6!ot0S%k;N(IAKZ&mO7NM8wXXOhK;6cX^ zS|gFLo#cxmHg6i>7b5xRy4B-~IH00-vI)R!xKA6SuquO#=GzGdIx3ceei%Hb)OC9Z70Iu-?0Jz!;&`#5|^&oNlgzz^SAann>IH2tQjW3I@G4!`( z$1lPb5cfnlU6K{3_Q?Kcg7*;tWLAp|GPjzsLc|jc$>p>ITd=u`7P(9E7G#tuquk1d z7vF#pOHCdtib$~H0OROT;?9$P$h_lJs0+KX6B!1$4bTK(3ePb>WIK9n_L7Hx!Pm@? zOaQAdt#GMxv3)+`e#wVf0X}gW;Pu-#_j!3{?*6rJexnz+rfDDk3wd1m|Kl!ueA0!F zw;#52>7omGU1o7Y2sU89IfMHA>%aP|zxu1c{&1Xn(C_FJ`tJ@ecbChRSbr%01NooF zIj2wedCX5AkMqM(ew@eY@89|H!+ifib7HzApI*aTf*w&ra$!_tRurx#Vbv8Fg2~Jd z-S87GeZ*FryCerxnheqyU~CsLdDP2u9D`QG;xwS4P7j z(}z$SaON5re9CCfl2;~5@1<)FW1b=6@B}CX{>H%>Z>vl0x$V&0gvx-hqTwZFAA)3z zRd+2Z(xvg9S40Fnmhe9-f44*U)qj4ZK*o1pzI$`8Y5txI&C|&L?e$v#{{GAJX#hVS z&qV5XE5JE4fc7l8s~&uP%{Ff}j?ASdMyu~bJZmxI^j*K*6eY7?q4dns3mHMrVNTW0 zS2y2qIh;MBHSpN0QSP$x++HU-iAbkz$HHNO6%4i=9ciGFm6RG$4+V6ne@^hGQ%Y4{ znwFIg%+6qsw;)e6uC5X2IUysGv4Z~#D)m)r90HbbA-MLA(9rT1rI9Hy9ub#5`z7oJ zSu7Gl>o=tiK2C@4pr%JnS;EJGhqeiX%{$Z!|HVcBFKwvXAGwK=q#4pwvmq&P^elUi zt&S$@B+oRry;9w8m+;D2%1(K5KhaJ{I0i;0|75AJ6!tPMib&yOqmAyZ2(HL7^r_=v zwN9O08AYC@0tMHpIzM*=YGrOLMJ#~qkdT^q%|+3C5rqj#*} zKU>-aS{}1XgBF!TOOqBkKjJpll*Pw#kO>ubWH9w9*Sl7rF918`o9sk8?0=U2d-0TC;bQ=c%K92~< zdu23d!NnLORr=ZQO9c9#Ex`F%qz}NB55PvS2o>m$6QJK(vSO>QI-b&&1czn-Z7{pa z!>qvF7UM!T(#Ljf!+ffIKbB@Vv*iV-3lvE}uP`68p)~v~J$`KeYUnCnT^Ry$MM!2v z*{#(XN@g22K+g;fAia_)q|NZ3EcLOqGty9+agy4qS3;H3ah!LBCSQ;h;M1f5u0#JX zn*eT`;S&$N5H5cYKHw42|Hp#^||KY<2x!?DN zZeo8dw?V}H=Opc#$D_wbO8=*(yZiBY4Cr63dHf*v&Om%CVWw8^VTG6xf`?Uf zr4+X60%eJ^_V`weoAw0gox)icg0DISdF9H*sjB?nh>9sQ!m)HuZFi`7H>(3eZbd?x z*k)0H2F;dWq%|{Z5;8fH88;MFIysA3cr#bSfhz~hz)8%mzO*+E;BpYqg$ZZ>c&s3x z>ppJb03Is{=*1TTZ$HY5^8x(mPyhV9hyF|e{MN0$E;pgehH3N}`>2;zu@KJ@8U4A@8t9y)xkpa0e0I`t&>ur^ z4+WbU++!Xk6flsHVkCXbF(E_5kP1E{cfbw9Cq&Rv;_TB;%jt1dIKblw|8XzvKY(BR z{`WsA@a_g&{?79M3p9X#czCss-F~P}>yg@)d8S9iO%aYXNt8Fpr&v+(PC$7wd#fIh}WZ0nz_`B{{JI zXgdNGyAy(a>vY!8@`IF5B-rE}BkR<*q8B77bPDKH+1z5FYe5b%m*hB%6{%Cl$GS2D zfV=8$;n_OTv%cXNzw4eDR|dT#K>-Sy2M0Birg2s@m!}$`%Vy zy0gmPu(&<*=dS0d`{j8rJX>)V;04=L!JI zq`%e%ooJq!luXK~u^qlqIBYry)j!(_4gb*+{~zU?cAW{}^_$o4-@QLQZhyiifa}N% zT;&6Zchzu+bZJUs9HO-wh3Lar$bN?R(*nUa8|4q6jWIyPXUqnWLHU-=z^Xog64@-` zY76;^en?eze}8~!U#-VcQU$jDKHz@P2G$MEc-a*j)@WBw2UY-+IErkm3htcY1Hp=@ z%#x}0W9djRSZAK|q(k z4L1e>Jq9EFs2sq3f`DFv58y|C_Or`fC!fLnI}-q(I`og{75?9KP~&L=U1kAa_z8O! zG&Ts)XjG+D*yY|(t}{gEZ77c~5x}1&fC%kjL>PBu_Qul(n@eDa8haV71YcO?f1r&x zk{d_7hD`WX=W%fT*(|dN0JGupc<}T+%xdhBU>0&t_Zb?&)M~kCbU9^BQ5c7yNss$?Ci-dY8LqDz#RI zb^!36ka2C5naW$bk`8B-0`Q1)R2Ov=V^B#S0E+EHNaS;77SlaM$RnGia6?};;<}a$ zRZB}2vadefb|_B-e)U=Lq>QlgjNGN5A*;!}B=-q)r0S=VKC9Vy4GdacTA)!g(ZAD7 z<9zj&f&MWNI*f4;>g6$q<>|$)S_`+6upH*@i!1TuGmuUN&$K3Y*pQdQnzS)|eo&RH zUOrN7!AQU0A6HueE)Vo@rj|BDP3|^ER0ObUd-LqTlShx;a_z+dMR_>YJk-GQxoMZ4-`eGVU;C#=KGliwCbL=@qY5g==jvN|rh zLt+6`=ac6dwo^gClRvCKt5`{Hy-Vx0#t+QUELUy`cF*QHyEz_7`2Qdn^6n;p@%lC1 zy}u4O|I|$YIKu~k7QYAdFl>+h2RX**On+>4fDG%;5`aYFeoKl)YV*0A`M0OO>m$;z*W=r59G#NPnJH!v`aC@<< zn4%*P+U)^bG%H*lBVW(}DOA{>%U9I?rsl-nPnHhwO5kxh8-A<6vlVjAIG3ytSLt-x zTrw~1niOs*U;8BE>OXodLRn|r7HZ&v6d+ztbu4(FWv!&0DP76tr^v*^O1W4EBij?( z`;$8da9a@2bsWH_5d?JWYdFIMa0ABwoMixb79YTme)ey^Sbp}?CIDV6^pB62`GaeP z|GJ~(WKoNz!n(zM31i9&uU4GL@jk|Ot;FH>l;xM3=)EB%D7f0+brPmiqExJ=#0t3B zN#;&Rh5Jsx1++$5AdAdo{(%$QovQ4BeZ1)XDy?d9lD7_O$l65}tQnhYZ~zH_q6&et zE+9UU9JSG$PMCWX2n(1PBTLN8teA$(DxZ{uZ8>*Lh?0%LC~b|jkP{@HX9NM=N%)Vu zY5xIy`}^PfQ~JJsCyAX z=@|7A@|hxQNj{aU@zIxT)`by!e31XD(s@Gwl_^x(NgV)TU~8CTo~S%J{=Z- z7CULe^DO!w7Z?s!tFda^&0xGmedSc{DP>#7pFsLEmS<`7SCBb2Pljz`=j`WWhbXlO zx=b<*CNHT1vuG&c$OUR?+WJQkRe9*$h`JT|R=OZg>VwhLK@}=T`OqFLR#g8L%EzY` z{@dZz*S_<;GY)BY12tcQ3E=qt{qu7G&1c|xA3)ur78pH28!OYl`aJRz*$!-mYaCdD|N7LHo+T|! zzZFlGJ4eJ%V~|IL3^Yo_+uTU8LX z|L6YH|KLCPio&zU{|_ZdyU(_M4AOFrjxKt6pQXG~r4_{^*xk%&7^ z=v?ku24uu6D}c*FVR7`6bcJvw)@x*^3Pvny`v6cwLe+m&j(){Dt}X%j6bHK#E%Az~ zJc)vZ%#W|c7MsZlBGq6gX>g*E9|8}yfdeu7l2IiDAsyFL=VC}2WW`$UiQ|`wg zWC>kaMK!gzQF2(xM`5H-FYSnyb(@x&E^G;MfO`^el6Iwdss1m)!a8APZU_Rp@h*6@ zAfPKleO`JH5I%Vyz>j|R_s-rnKg<8`O91>FK>rti|4#({V`I4Q@Gy4r-Gm>fjbY^F zJFOc63HY3GaPO;AwOJU)0BS^8eRw-d=NN;5j4mvI0B-4ZzF~Ign2*UVZ}wttH69`8FI~WC6rOYNNC?e zK*OGH+!%SqNc}1ow1*Qak)!PIb?sI}&@kuH_f+d>{z_?bXZ|yL4&&S8!3}tw6DI8t znbcPrD?ZOO=h6V&`L&8(RZO~LxvC{7x-VERIW;Zb;ZE*uwB=-3LLN3%<#Qr}FG!z9 z8$*%1U((?8E|Bt0v@5NU*drw1^ceE;r)fM5Fh z*T4C#U-{yTH@umP(8*Q5sdU_@AK!oQko#wtPq+al0FNpFcb`+`iKbCUWqyGBl9w9+ z>KKbv)(e7eW58$i52gCRD$~s3fD^_eWXz6*zcyG&2S6*gcC z7GSr*gpnaORSzIO@BY@xr|3(HD^e}Bs!)cWnyL)(4S*UDFQu761h+cd_Sg4^*RLNJp?hlif2ROFCk+r7?rk(c7j-m7 zSI1jKej>7dYK4#|%$GANTd$ai=63sUjirpP&R8M(tj-+_t?=A3(}h%>9w_Dkcy><0JQX5*tXOp1~aGUMNx^IVX$zY z%aofhKxEblkOO5OmOi8Z51;}1-+kciGD$xY=7o-B;1$z4mbv)r;3W{lLTngEoUG`q z>dO;8QVnWX$UPG-cjG8WIVG}UanxBnCH^h_ewqAS5eT9_&XrnBTa9NtVE~S<7OrK; zcfgF=y5E30*S7w*#l*{?BM?(z=%ZGmNCuD)7AgN+(qeW2Y5oEfhq`JV&shWz%FH*Bm1*S~H7pS-rhh zI(Zv;$B@QhgRDrPz$Gimr-^{l=@^$Tzo423k?ZDw)gq9&Jvkb%X6f?X=9le5V*3o* zcd$xm+RVg$NvN8U*1c9Od8`Fy`~4J{zDjt5b~d!9(4E8Dv)g%nT-`*qGe;Fz5#@@Q z2+zw;>Bx)r5@u*>-x}0Z!TgoCJ<)F=Ji}Q(O2?UKQEu=N-NZgzs=<#Hf|BFqWBEC4Hug zQ|sPguSm7XY16h}Tv4LG&G&mPBa>T@FWY>eT;P2gM*FskkcQHKHg1vVLRLyf6JkWOXV-DjC4=uvmn)iPJH9~JM}xgV9)gOtyErGl_S zhU#C5#Boa!ch%NWN8gI@uj4a4frgbg+Sww4Y*=(5HqaKQ9Ti~^uEVNB%S;b?fUS|x zTn;!JO7*e99D2!+{Y=GL|i%&XlQo1^qAONO*5plVsh!fvu+=Sb?|IR2)a~ zbo958Ka@AA_fPDOMAqnT1z`c-drsuxU8s}kDlqpwha9^iW+8M!FGp)`-VV&+{S{ZZ zb(}5DFlT?KM*wm3lzK#Cwp^%IS9h(LOj2`};bK*iAag~6Z%8?F!I7J_K;jlbE1%6b z#7~jJB40vjxvLW%qR=1*cXhgol+Sw-{jbl{%p=eM7uSn2upz5}nceb03%Ri3<2l`v z0Y+ai=pgJQt7wH&#g)8Nt3D^q=5cbc191ANin<0w1^0e3hINIu@_bc_-WD-cyj~~t zR1E-es-~^CgxR9Y$o0}ud_~W;Iw&(h@);ov?&#B2E|+xy%)?fw>60ZX`(HbyO8Xpy zK{VrqiGPXU_7-fi=ZzL0qjho27h0y`6>z&Y%Yr7C*le#i*UAjc&cB?p5*W>?z-rgI z!tnQ0!vC-R=6COV<^MdG03LI?IE+ub{LwAEK?bk_feP}m zRlqweyMN6hX~$w=$y^+(i;>wOT<(^1+Z2kV#J*7#0>Pz~oZf6X07!Xvx+YkZ4h0mM z7yLBx32h9I0$#Qwj*Kz8V>Fq%oA3l+b>Z}hA-xCXIYv4aTR9u)n!-uQPc3-yKX+N* z(>o$thg|!!d+8(G~$fF z-S5m&R;ECU;XCzsQdhJN#1~lpS&7=81X@B7^q+^UR3j;a{x|JcPll0a5Ym(I)*h_02g+JtGbd{(iioi0&S_utiLU_fDWHNvkUDI`7a+P8Cd!Thq@ zRta#(8{Ls1)=SsCw2;P(*Ql+x1WJg|5Q>ftGE%sSS4(N-^;S=4n3&Do3H9kc4lQF0 zmxndaV1frB;SLUuZ|RX!|u#WBY-&G?q|YWt*;N~ZfXi%s3Mw&UBO|Lf3y+gIDW zYySa!>pR~$8TGz=_v-DN7rDIXHo*PS(*JL!0sO=Jb5j0s!3uB&4UhxwO*8;I-P_`x zS{G3@U3z?W%go2R*ES4GOZMAn;#vSDm@;=pRlJ=sB!zbuQP4u&Fx#S%e0;m&sz`L5 z0y|v0;O|D=YrHc>8h(cZu+j4h{Rjh)0aMrle5%*PtJuJ|7LtlUsa0(&Chce1uDV!I z%0IAuWd;)0o7r9HnM2f$iFO1IE^o1O;QJ`pv<(M7XV3`?zRdU0v3I>kXCjeS zY+b%%KBNB+rU6hI^wR|-sdGO9W@htvv@uFfeu%o` z$G}yo#%czzY{ZPj)nTWCsCaQnN!fOYSR@%YR-hw>SP`x}#!0-2^Z<_3o41 z^4z9~*T)a<_rRYWA`E2ba2Uma)5gd~D9dPnnhi6tTY*!~AG&@}V+;Xfj11Hy&4x<0 z-%Yv6cZJ5%)|I^V0%SnH6>kj-D$Q7`hr;t$?M7<M1GiH0WBjj9XJry+Cz4dS;Bp>oje9f3|QfKk{08TTElaD*azwCb^;ot7>Sm zeXB?8Y#9E|xcy_^i4U>@JUtC?B^Xy;VLs^)@}f)t&qo71ncn|0^ndvWl`vzhr5Gob z)3?J8ufPAJAO6no{Px$r_Dd@*c#i@+eOy7Bt^k@V%}4GrbeUOr?#%$&oYQc?h?O^8 zu;T!qI;3DmNV|Z140rcAbeQwQkp`KIM=|nnkd0icVki#pu314hYIkCa0L@G+36AG6 zC_0aNnsWCne~+;!`;l{g8!WWB@Q^AqtXAGF%n@Ap%=8!zYZ|j$)>u+b)IcVWo~AAe z?&A+TEdhQ(#Ff9O5{AOm2|nRHUJy?142AxqqZw4z%Tk}Lp5fpn;9L$#%7tO^Sg7W; zERT1XndhN+v!BTPuR^h}`~uuw2JlotKsv?4ZoAE&I|%5ba{&L!pZ@thkFWQV z|6lc$pO4IUBmh1+=pUbg@c;JjW$mr8*6b7Z4p&`#x7C4hwISI03Cf6P8S}>sKmZiy z_zdC?aNn`k?D7&vkxi#vZC-vTKb}$hKaa<8IJ}7U900-!a5fE~IoDl${dX-Zz*RIrU@lwR#sb#!z+a+dGNKssvj(_rO-;=R?7dX1 zNRlqclOv0JX$7cb^RA*(gd#&fh7ua&xePE9zykFvP_6w&E#)y$VWBOAyVQurB~LC! zPuOrt0u!B!f?5aGMzB;UThkS&9lP)BwEjdDji{ma%uP~vsOqE^ftn7>@t1i}z~Uq- z83?XySXDEomW2W2UaW;hFQ^s$D_y000OegsPXNOOrO(3uC!hgN{@AHm1;Yx19|s79t!=P%^38on8NeOS94_*z4UMbV3a(=oi0s}2 zAQgERWK#xTEqSXhbhVcddqGiy^_fE(y+BBXSwN?%vnn&OWD^_ER_nNW=3+(+^)hTN zqf1+4ur4I`gt2p=f800mA6Lo$`>i`K1&G(lb#FBR%xfBYpUnhtrYJa&{j=uqaRA`+ z$m+cSFb;=Mqz1|#d)pWzZpl&6|07C$8A1KVjPwb-3d2kw2Q6ixL&PZUe@gzfa(Gas z09YFO^wgFw9;9Xc*BIeOi4*%t%mk_>pz6Z&s1d_(>HVuDfU6#$QvT6NLuojuH4!o! zDILwo{@kpsOuo6o!`&A9N& z$Z!0{Z~eg^{;eN;|2uD99hN&!o6^7JESiZ==l-3_@;dS`oJ@FiILxXX3j_BbiKw!qCvQ0kwQllma5d2uA{jY0gM_UdTx8xOOmim17W=PZ}#=W{#)u ze@;;GVl;?3ZCJ1yO#Nap7niP|%jmzodPVZ#+W$`wgS!D_zbOB|F8^mg^E~Ll6IKA= z92$UQ5ICO(SZ9gt%Q!4#CV8&T%wO?z*^9eu91gJ&16~ncS(j0r7W)yHITX2XtUw)< zT~75)+Ys1l9PSLEO+Z31EThb{?u4>aOA|BlAg0!u!xp?Kn>cdvgiBZ^QY>==$r#YJ z2F-P{jS`azGg^`RJk@3|2@V=Yi33C5lKaWf(=5djj%gvDT9w1{8LxaxZSu{3p*F)d zfH_@qG0eQl!&E+l2@XwH*ArKU5?0cXwtA7z(Ek(C0I5$mR7Y8nYQnOd9Ve{#-`q*% z3@}R>d>^}!oTSfV#%{~XUEY_uHOa8>8dalDHBN}j`cY+e1^8z<0cdnYtHhcBBE3P| zhMgt4nbx&{vXbRO4c+yT=~yNg>w_XIo;;7aRvBQ~rjtFTwjl|-e1X7)reiDta=nR# z9d<^@N+Ity;BCgMlz%dIXBOJ9i7Bu$baz93#UC>GfC~Rbl|6S`Y1yL4Ea)!n9&uR? z_Ef_E>&|I+@seM^qkS|Jz;l1pzK|Kp@GPV;bCq2rAp4BkkArB*0$UmE6Ef2!`dJ)2jU4r;dxqH7BeqJ5bDb+j(#tf!E(8t))`|m9YO^aSty~z* zD4e3?ap7&{Wc$p-^Nx-$zzVPts}DUpKQRsPCWQZbDo*4wWPbw+e*v$5P7^?L0C>0+ z;EDDAJM@3^&$LiV?x+8g7x3RJ>jzxg&c^J1!Ys$r#yxvZ(vuuw|THcaqzRZ^8KDwk_GEA=3gmTT@S z4q)jYf|e)*ee+#7u!p(UnaeR|WyES)be{tC2G`dJh# z_w~(m+A~b;2|tNLmCrx@aTyr5M}e$F5Q}2o%96u^un@`SMPJ7{;iV-s$Q8Xqhy;;{ z3E7SxL4*gIUzM2oz-Dxsrqg5^9+jRJ`RQ<z&fS75c{}{KsQx|G)Vgzxl~5F3%wU@A2t8H}Od; zzTGZJUNU>(p>ZM zT3v$72)NL5bZ6BWR}S$8oR+wz=iOz9(tgq_0~65tnws#CWd@4_psO%?VPgx{irc5h z)w43F>1h(qLd1GQQfO3aXIh%8^2Gfa`hQL)vdVRf95N#k@Pd4j=5Q()Wy@M%P*W3& zSjyH1E_qB`tlb)yWArL@jw?6acqMJm9Q;iH)wx2UUMg%XJn3ekRS%m&U1keCI~Ds! zC-}N3H;?; zxUkt}5_-QO9rjZ{moZb+6O^PD_ab~2a4S`Vum0q_f)z!|s3o$sY5p#dIxh<+Lx;LR6b>~AI?$prBDclUFd0Par% zJd57{Oz8j3D_(x~F5KDw?(Hvs^T&VuM}PLGKmN_%_|>|9%L@y+PfcwG*0o-(PS;-U zrlLe$(nw>|`rYNM(9`?$oT=uNI|gXO=h23ImKaG+nVXHna6bURJjzTmbCwlB@(D*r zim~i{r#B90WzLo`qcZ>)OnX2aVU&=4_=9Dsl+OhU1TY~8qmvA<3`{DDHj;Bto~|f( zV`o(6@jxu6nxu3vv@HM~SE!6uW}CT7I6}6V3Uyp!m(ADdWye*rA)u)Sk0vt*PY!1N zzJ*?FMkpmLrq_)A_dM2gvJkyo3D8v&$<;K#Syq7hxQzq&1cQKXKgv8|5Kwaf-~Z{) zu7zKoa%g)1aC_ee`b+?PEa)FEO!)s?(7*N{!iM?uFxbbD-Cc2hxcEwS^}CXyqZPWb zsrB1vBI0~6FP0~XtFkS{7t zz!Yg-O_D1< zp#))(ipwz&o<`3)!%S7;#j9vs6%cHN3p|$g|7*Yct*2fQj_=y7%gzxlWS&wu(qoj~x9L<1xte{976a2u%dEUA^7pfinz(3^0pw<=qa2w z0oIC<2&C_j`pE@fLp+oeWSM#ih*L7sXQH0L;i;m8y3|+wZKeNNab#+HYch)&gp%~Y z77eu4X9fIP*A;^sh$s=Sv8je|B3uZ8w{}<)pgFg~1Dyu`d`ADDi3!-qrubC?oX9*7 zO0zQV#_GJ?B)HgORfpMhAE68mSr{VAqrknTdH2N1j4qg0#e7A`R^W%^YOg_M_>}z( z)jHfXKlYrTlWcx0w?UjfdO--kH|iW~O&vmpQS3y-h({7x+_rR7P$6jvAa*2SrF~Qq zZ@po(RD%T%7bL%@2F=lF=6%vgMVyCjU=0980+b3nSdu~;Y8I-Ys1_gt_6kxgi{&aD zE}C?cH>=;+8n2qWJ_q{86D0nt^I{%`U*2E>xIEcDiV5Jk_=8Jc^$l`0vmk#hqjD^A zpN*rEe?S`+sr`wqFjfD>QJIad;kB04BfmFx^h(IGkVcZr5MXR&C#$%tM5e?_9?O-2 z1%hKa-HK00|8PkxSy^Bb2&dVGP%JaT<{?N^UzT7gpgJnd!Bv4BpHG;+sde>Dn@Yd} zpcdLyRVm(wqeA^s0jlk$OO&4%4w&n;gS#~9D){JAu>x#&_CuJ09$=!_Pn9~gh>FDM* zhQnWJy!VMQ=z(U=9LGE2jD$%?G0KE})(-A#_vZ?ux3p-JhX7Y2(Kz1}ceiqbVTF<= z-r&L*S#?{1t|<%}QL*0V!If;dX);^-nRFfR@}bI4N#0bS+*URn^)nH<3Pe)?yZmfUeOPy7hzPb@^A<^P`$0q|M)f93q~ zkdT&IaBGHkumx^9S!h<2=Ux=p>b$OyKlw#%sDPD5INeftnCFi)z*cn<}EgtHHF9OZ;me5JU?7C^|+Ee%au;XtwP3n+l+h-xg9K;$kX}NBE4KIt3jc5Y+q(zFpOKtO;{OAb+%kyyXCh}S_GOWY5(84Q`qN`|tUqCCsBhdhF zzWCzGH~M}ifII&Lcdr6|W)r|IG{7_J{cnZ-uLS-3j%yTAH>-6td) zhi`xHw}0}}AOGZE|J&dD?ytXj{W?|ilFvD(`TahjPL_C__KB&kvCa;p2A;j{Ysb&M$;LacZz2o&X1M#mY2l4Pc-TCQ%d zx(c=u)XnMW;3KGxlT~KWH*$%&RDnZF?&2uLXLukGqOfTF%}v0iJhjT&dJqVcrID+K zm=lNVP0Lr)05@3yUO*7g)%Wr(8~`3I2bo;FqWS_$>c_u>`=2 zfd28~g#XQ{-UaZ#`t2weZ5Oz+i$S>pin(C^P4c&`+}w7#lX0$;hJ_p|sk{i^kCYyd zZeR;+P|aBj`_USzzFtLE29gx^;1~ewsWv*_J51O}B~_8UaWm4%pT~(O-q)y?AJZqQ zJRl)ccV)y#bP>nvuLx1f;V5l5CWTJ)E)#Qc%afg;K3sY zG>Z@xZtY}tiCDG`7kI?n|A))}-+%e#>$h*80bs*5`9C$sUzGpfdYC_FHK83^*m5Tt zz`I)TMj9ZKE664ph;alGdea{A@=A2dB}^J=Ap>B!#WASSyFB*OM(0aG8A)(N+-~ zn{RzJ5R_L=F3wIR--%k=bHp?};<_-}_- zU;Wm%FCgOAI<@aa2;9pAuyX(pHvz~$_7cY?aYkG?;VdC(hr!nK4_oG%?E{2y1TzJi z8O!urI8m8U;voYJs*;R+@FKjqyL3jz_*XkcrD-Ak2;H2aehzfpAFTzrkraf|*Vo{a zez?&#nyfCjEc>ldJKI5GR^A2skQEjMjt#E@A}Np+jm?ddM22ZLdV;Oa_ayGRQ%bGZ zR8*y80d{e*6+3#J(0_gY7uE`ZCvXEizy$CNRlxg6{Mk$ZSI_{@sQ1ThlK(TIe*k~u zU;Pn)fBw(^?++h7%;Wst4}R+p|KRt2=Wl%f8(;tB!x-}EE}zFaXY^OajLo$*D``~H zMo_3@ZNEGVs9W_+S*493Ko~Bf^GX(vZ+sM5bq8kX_>#P6)IPK%nrx65nd49V&2_|`X?o30sMA#2K^)I9g01~WZ4 zhpZdSI+`$3yUQX4F!t$+y^DNfgG(IFX%jHGE0a3XMc}cAc$|^MV5=p!Ne|tJ9I`n0 zk0HolMoxqXI`N%2$vI$Va~{0|yp=_&`<-GH5d7%c|GT39^LQMG!;4yLZjk?9ng4TF z`Tw_n_iz4R|LZ@+=5IZd1~{<-oIwL%&lSEOH%q~ES(?3-XU2d!489s? zJDneZGg>Q#!2`M0zJM65$~7yKXBGIZp4>W>Rla1P`|V^A5UsTii@O5LUa&%qyoiUE zE(a>owZ1fiPtWMfT)K`jg9x7rJinU{wiBB6&~&-eSmxIrQ;P*v1(0o6f6Txc&0mY8 zt9~6FO_a}`W(#g>W5$AYoO(NFUD|noj6re$evHcTb)=Nb=ghN9tC0NEzNOD2%ZvC} zG)zeEbKmrZ1gAi?@}WW@TVzkFijp5_w0>1)Mim}yqu)1MK*e9Q#5d*hawjq|yrO(M zMnA-8sv}Gi1FYJ*=#fiTAvx+SBy8}|W;@7I1Tm`QY`qEX^@~XL*q<#S`*IX4c7oy0 z-m<{^*ldYb`X+h}b71uwZ2*0_0eWk6Eh~NSgl6WhN^3{^1-AI1p0qmqt0B%pZhQJ# zkbAfq>~iyOzieJ*k$#}?zZ0Ksyij%7+HebWcL5GN!vuiNrQBcYlbHbSu?&te=6Nrs zVbDw^Hbw-{7?%CK8M0413Ob-REQ2O z3#$S@63O%gNXbC)nOF$;ll@?(zjdTaF?C=VR9?izDB4B>yh^I78+GDe@9D(EE5vAM?T1B)hrR_d<~ zp!j;96BTcq9V*6@Db?>h*3p0tESKKq1Xc#?PC$u;jwHY%%M^$#_Kow1yEb`eDaVS8 z-4fN3RA{^BNQJ71r;iJl%MO zsg*r~z0(~nlv_i2{4u)_Lr>8~m-+XwI6o(95SB5D4nRI^WC;Jt;|@76%sszbC0K@r zS!Du=g!>HNS(vru6E+GxiyC3l^V^3F_nG>9(aaRu>Il4(IUE8eQ_MugYp15W#$ouR z&lzKl(;Wgwss7F9G#lZqHjg%>!E`-`xqIxF*&}NIufx#$h**l}55>-nOh)VD@YtK2k;r7Rj%wI!ybQq$LZyXCEDD_UB|n3d2{Hi2FU zG8MN2S!(&UwU)N@;c~L-U4{Ro_0jI4{QsQY_2F{i8%+R*!{PnB#som7=Q1fM-xl!9 z0QTc?x1~Mn2Tw|6dgwJ6M#vH^0e6xyuvPef%hI{jtxP8y&6e`CxVE@B12u^68|;$Z z=-aU54%syn*#?{?;F(7hIv&$@rIq`Dts1qcY{W=1!?gN3Lc#A`4dX~V0xGhfTBmgy)ew83#MQMjq*DUMM(rx6M zlet}sS7X$dKqP!pRsdl41%4D7;5^3TK_-Bw`}im(fJFoR!?U^po;m90GW7qS{wM$O zg}-&jn=f9!It-&pe*7Sx(|!7MpL2y?#+s60g)%#g!@-7)F_JQ^RqCXR=N7oGf&c2j zjkEc3MAjrzxt(N(Fg6O0bz$#%M^9I>7)KlJ$A?fk_6qBoW+ORK)-QcE5Px? zv<=9=(gbk*o%onRK$jV=M+^e`wIBcSmCM~_EdDz5|4#D%o74Xv0C!#joj=R}Un~Le zaiM?gd6F*)`hP6+|LSLNaqwDEPCkL0k7t8lOFwc#A4AG;8aSXcq09}%6&|NZ0t`S;b%EkyqL8KeypJ|Sx z!KTYFg4;lgnleUUT)u-IMf?By?c2A%^wm#&p?Q4y|MfTWc=Kkydq+Fml?Dg{$N4mX zN@R4Q`?m(!J@BW{_BArH62GnW`q63)U*TJ=tEh(WD&K<)=1SbY5+tM3qpN4xKFo>( zQuJV}W%AXNxh3MW3P;gtJe8SAg(Ebcx-bh%c+(^$8lGA|6Wph4PyhyWRHt*CEHYH! z?+L=MoSbbn4|DQ{KXi&W{+iJ;d6vHs$d^Z3wU+@}~O+UeuE7SP~LW_&}vI zU5LUc4l!&PTeOijosP;*^?BrYsRTeNtg{N(jihUmRheTIt)nAA9giG`Wvuz|!44xs zKtQ<07)d`z^KRzrSzOs(#vfE{YaBGI26)l%RTW-oUyVXn3dbBVMH42y`1PX9(sM0DMokOZv zGAqEpi1)4KbxlHG>)-leu>~cr3h~5CQ>GnFK^^~+WkB`*@rq68j>7*P`ageuzU*9m z1`_~EZMSw$k6eYqtc{u^1>?|&JY~&rsro4?tJ96!x0I=SL4IcL?($*7yNIQJ)6w?S zOqAKm=NXavKL&~nXdgfZ-V-5m&kQe!9O*O3D-vJ|;URDwPE&eH4${6B?#10rA#~kW zbaELY@FCvY(DqcjKs<J)y^GGy6uN-LW#VVsa*8}CU&Gq>t;|HL5xYeQ zwZ5=0i0!({?*rEwkZ)y;0hI=gG7arHeL1aon*w{(>F3aGDEBoqz$ak^IHds|?Eroo z4RD3_{~8$XQA_}jSOxrYOaO}p_(y+vnFE*)U_h>f{?7sZ&w>5{ync0vJJ+XAKdMW9 zr)S~s(NX3)i|)L`!G;|UW4wyKbX#oWW$6EITU;ue;l{cxxU9;Ni)J9a zWRL00jeq-ELQxOeu{lBRhHAe0y23VTG2zovxRB;BBGYapO-~+uSo<#%9S2-)sqhXd zWDXYbIxXmz=#tOa1#r81Yp{{938dOEx+sr~>DN{q&^Mh5Qyb^f}!Q8k=1KisRuuCyMRuIsgSH$7~zW#eZ2Eeg* zWx;5NH?M9cJ8!@?pO|NToaZ`R$ffu!|9>F_z*7{Ez9`}U$A$iJg`3q*o`Mk-Vv8E@ zbboeICxuw?*(pFJBy7V~3;cBv-S95=gl4wSt1a=g6!@zV!IK59D*+i%{JHnLazxbL zN{{*}vXLyKLHyL*Z-Tot0tHAtr0S6(i%6b*0{I0Q{_B$a0q#iy!~x@08eq2q><5xA!`xdq5}~U=|3LK{ z&Cd|+RRfjdFI!v3>K`rKJl!~*=}k+$OabcHdLv?|RjscdE9v|*@pFNzDB(_zre z5jxJ*USvSu>`XR~uu3P(6~kb;tmv3k!#=%Dv$cq!XUY!YiOF@Q7Usg8k`(8f-&`hm z$gG1;D7@aMwiI?&Bq#hhVa-3J)VZf{xq~L3k@7jE?m`FzHY>%LuNAU-LtstMEm zxbV*(&(8r|L@QXj`q*)7Z0c8wJv4)VVpFsOAUZ%ypPdxa;Evb%Ns^5b2gN)YdZ*2{ z|IVw`6U%qkak88FEWLmkG8CnqVZ}CA)ZtVI0MS)E6@~>*&8~G3DjXOqxx1VIT%Pt- zE*gMd1jW`FyGuj}<&M58h0{KiC;1d9Z$C`&9U<`V)hc`dX*rjbCNG}1<7=yS56c<3 zWv#`ZJf@NQGI+?GX~WV9QLC|lVHQiJjTPR+tE_l8L;sggzt>-gSJwdKuOru-2bBTb zY63VOkEf@1&yazNO-S!lu+2ugY?v3s3}O0AMra%YT8fMW8;1yNjH|+9SGn|hB|ky* z%0*SNY8W;W$L^$m0K~9?T??PLr-k=4>m&i|?q9}WmT#>Y!O=ngrNp<^qikk@75x>> z!M%O6u4raT9tGG)Q>_z2oTJJE*EWReu!Y+ z6#*>_H zL&Tyg%2cw6H~*YJx1Sgq)+HO(I&YcDw1701b_Wa#T=n<(f% zj&3n^$-N;QIXu$-Z4|o^h3*+%L@tYk8L{48K$_E0K7ghHE^`35mlfbR{V?oS0O6T~ zfWGl}esVg>`Mz(Fyu7^Mb+x~@{Qs%ze|6W5=`Qd+uhxctK2$#j0q|M)|9H?p&K3S6 z!6VkfWUV1mHi^}c?cC*UwvEtcC)!f7S7dHw0|iKJS`Ox6p`&d(_!y0H=_H$I?;G5P z%a#$Q2cU6JrreeUr{`qRFEu3?fe6NFBz_h}T2B?#r=+q%e}kfj+y>;~8YUuuAmaZ? zC&rLFN0pvQhzF(D#2EOc(`YgxN$+sd`3Nv_hCkT`++*vL=H%hv(;1)ADRp%@k?mpH z|7TbN-hKJ*&D%GRxu#so|G7c_f6Zaw{__8m=Y8{LzIzAYt~9{10-QkuA8&KYjo^^~Tq3NqsH*aBROOejyfn^GS zJ7L*{+eK0$C0c6gw=UwEC29Rr_qg1Rou^LHgo)ICP^$9xQx&>;N!69Sl1_}iG0&+@ zQ?{6)@DY z_IW<}G?@U;_6SeZFVseIr;UJTCC`(ukHoAU#u;@nSPi{qQ5C?E($?4W6!84M(wq9!?{RAUQvI{rr z7schvsh@yLOV5Cb>g~1DI8d&lj0D@5m*$rEZ+jR<7#-@ePqF_(9X2@v>sdEjqEu4- z#`?LU{QIs-NPnGHdYfKobI}-Spe@rODgtx@<&and!QSz69n!8VIDi|@n`9Rk-T#(( zv~M_@Sa?h;!0CGw7vAeH-roK#4>JKgX%+AbGy&{1z`y_R{l&wf|MNlrJ3;>oKmBmT zMx4hW5$~RRHm2AxGvlzs;V{PG)tlF}M*m6NUxS>3PULP9noh(MitfX5Ew24dbVx_*mh&q7!|(flfyzmF6jHazDkB z+v=I7g?N2+?D9IIWknMdDTnSJPBiyQNsW6hBlSbxQTD8oZpg(Y3j+`M@NmYgnt+yzLXA!_ahvw=XJ=wL+jf;;zfF)?R$o{r-qnfa7!kK?7VD1au|q z`6xj^-}wEX+;Wj$S^!V}^OU_X+O0I_jTri;05?BC{(laB{Q2X~zmb;${o`c`{~rtb zzw!mF0}C$5z&jl?3u?4&2F7fa?8v<>cqHNc9-!m!pBS0hoX3p1D_VI2`IvbE3B`*# zSvPy5UrjVx^C2@Bp)yFc;ER$AhpTRTQ%i1aiQA*>asf0rE8XPeP;UmM2|Yp2I$EUH z*kk@v)o%uI5(h#PVG4<&7#o$qjNnuD1z@ya&W}i?8nTltL0%h>8wjIj?RiUZ$hAK` zK>L4q{pN{o_z&;iy?XOR4}Kr{|CRYa54i{11kfA+fP2#bemq{p{V&k~>}#mmehRRf zrIzzLC4_-}Y_dgkxb_-DS*NbW?8!ZyIvH7`zSRg!t(qzB>5(N=Bz+S~s(XABL0?h9 zl`&$V%zfrPUd`b&n{y^ZX~eAj%{6L?G;tP8NS|JPBKaCpa-xbTXF7D#en4aia4juZ z*+zBa#9}!`!`@LGE033D2~rOEguMC#DtD!q!xHj%UlJT6w3AD0lYeE<%;!C3IeBCj zhmE>Vq0;Bj|4)|#=p%=d=F>C4-;Xv9DMq%~oF*{hdQL#Wr;!*Vj!1K+yeiiO1I!c_ zX3r9Uz|dG>*FpHxmRzX0yv4-Vw={D`vXX(c(0Q{$^;P+F<-EDiC~inwnCAr^q74H)TNB;GwK*7nXA$8DKnzGF z%`w)dmX&|it`rG_Su2qQj0Lz)!ptn_sraR@Uvy8^G!}(`hR&OITbEjp1J$Tu4LGxU zEU}<>=9gKc{B_CI4O65=7=7ys3T9x<&KYf_AUCoVgx2L2%oP8Y`Lh&7T*bejjJxu` zqo#V!&pDZ?d#Qk*YTlMMkb1cil>A0F=oHzgY9_aBi|=HNa3ph$#5c`;ceDbupyUi1 z;OEy0P>13-U-{xnaO&)(<1tx}dshKpiH?1A6F`6bm;d-L&*T6e81)k$|LuSOk8gjg zPYbBN{HuT2>wKL*YAGR;Fda6=AUO_)!>iW*^Wo_KlIg<%`HZeCkCR0M@hC~+3~rMY zjRs9*Gg)QitR%$#R(YM#@|D`CJjH5Miua|861{fz1y%G~6#Xs%FLaz%ZjKwz>nZq1 zRXaN*m@N{D@Y3Z|T+3ZC-jNLJnn}t4u}yFFN~+N=;gxEi$H_gS%u6grgt4LXL@mW0 zCLx4iU)5=VvXK($Ld~3qI0Qig-4)&d8Y2$@r{NX=j>ie$a2VHN>&*e+zO4ZHM7NXy zJSYh0n}7GGj{;BMApgHP|ECtZv*iC*E}`eX+ zVQ$!y%gwA};Bv37u|{2ar|H}6LZ{#v0swA}F;yfOGk8Idt=93ZL*&x@X8v3Dz+9Y~ z3T;zy5%hQvW+q=udm*k|(Ib}WKoJuX^}r(NCb}7`CnxBQdIyklGmeDbKpBR+k4PI& z+B|m*6t(S;(WZOoDJ_r$pAv`JoX1o*OmPf%7**wEE~8HuU82*Y-!%4oEn4E_mwP|$ z|KatUUaTLI|1*!raX38lf^wP1eth}=m3zC-8y@rCG{CX~+(rY`0j5R19pJ4+hh;=n z#^o;o#^q&}$yzE80<;}ltF+2O$iJma##4Fb zDKFQ4ggE5u_g*u$!8^V(US>?y^qH?I7X)1hg)R=FY)@YEZj=IaLl=^`SatzGQ6ZQy zntjsi=#OShvvpV*y6K+4A1P@brdmcTI3>YU!G)gqVrPb7D+SDxsbN2a z*JJhq)-9*V@&k{CfE|~iwh}&uO|K0Mt9Nw4s?|GM@hjMbj+M#2;L8fFT|Li5Lnb&H zHVCsGyEY8{a98NR_mn%$)z=BsZXBI2#{X}<05_Qc>~Qco+p{s(vThuJ%R5-vECLtP zqiLBM7nKT;NJoQDKa7JU`RpV~kJVeLuN(nCIWbhNgHCC>kHaBDp$Ug45x(A;7-eHb zD{+jiF5E@w7_GYjShx=BWL#iARv_;vuE83`&%$c6HG!`ZfW_$B7H73Wy21@;+^+tB zPKFB5Z{bdNan**3@C)SaSPlc0*S4O;)_t7en_5gmqW|cAv3I{T~kf$Dzr6nhiUQSS&;LAIU#vHV(ta zFdO4Ax-{jX=s#8(CzLz2H&2{0no0$#HW|&9^D9J+@d|@#4Np<*(mvx*KEmp|77KyK z8HoMvSW1UMB;LzxL~5d3c1XM>s)L6Nn@Tg*SZtd5pvjLjY6GfBpvJ=_uxq%3E^hI0 zFxl_2iqxmJm%OOKrb4IIY*NRo>^9cIk)k&a>o8Zskvy?!i!@M%Fh=?`n-ws0s6vIr z#Thf4Xnm4Btz}9Y;4%k*$FKt2ngw+4AfRvk_)qVDWcaA^|L3p&y&Y@*EdT#GCICKu z<_})F@V`%nyo#k*pA>aULHEHTb3b~8nV#pFJ*CGOJ8DMdBGYuXY#?G`iXaSwxfVBK zm=9$ewy4b$U_0{IY5QK^lC3ai#uSDnsbGW#BHcAbWLgmca{d48y-BaFTb3O($6Wiq zB3?vfrXw7Ym9tJ{ELvd8U}4Kfn4*cG1s#wO5+NjuhTTJ^LkHZpEJ4>oAR6xQ3y`Q9 zmL()4AQNXM85vnc7Lk!rynEIhH0GFdt#6-d-*eBo#d~LG>czYFowJK?e`~Ed#~ekw zkUNsFpBa6eq|qH>nZ-P&s|tKa4dUxxe03>a!Hg1(kBC{+DUcD9@BvZMMp(Fy96vB3 z=NP(}VFQqz5Qw0`Bf_o27#7Czh}{3Xx9R!vYP>kTy`7{;?x%4JlKyz~|NEBqnF!!f z#sIPdx_u1LeTcGf6YSnxYXnm{Y|hMvl9xiF#?hfn=GJSB+y|*q*-#CSQdsM4TQ!438Ewf#aRVqEOdap ziV%pyX#dbQNn?_HI?dQ7oAQrmUczS){jVAxj+oPp@Dqbu{H8|ZD9=~%dWUd%quVfY z25nH0yD_H&vfM#9o_6Y+KC57qCUk*S|?b z1TRm1ZtP%mBb~hz+CM}~4H_%Bm0#`wR6XD0TfnD)0qYho#+l+Fd8gB7X*tXLEnq$Z>Ff5 zR+r`~3zQ$$T3vnWdFAe|VC_1rY&rj!#*2miH->{w&R7;+jhU4e!Qlwi#+^)*9$EG4 zA>t|{NUX>stfU{g6PmSFa+OkcC*=HjkOJ7FNdZ3k!p8@5rOUzY#}fhE8wGs12w>IZ z8%Fl-hyZ#Fa5e*YeXE}fasRuae=~de^3(O{C-}nMeGGRWIRhA{;p3EhCOQVUlXYIZ zSImN(h0Z78Cb9qA?emXq0Gj@7I``RPVuOP)cf?E~W2KN$MaT@}B#aUCEX|IlSUBb- z?p8SrA~WOD%dT^cuvp{zL&#_mUM0t}$uUNFxgF-=kiH8E)ZjRiu(n9r8ZYDFF3s+Z zt0CJ`Ac2T-pT!bIrU?Xhqh?KknUeIFY-A{-q(bOFsvyy44$&@am_mfnRqL9WC5!6} z4R|^!K+gbP-w5cdfAOzA!7TTdF~DQd|DW>lO#go#06Zr2Z?6*@^JLJ!y*=Xp;V;=e z?DiyT264l$$+$z_IGcYcnvCzo&0lT;Rn-%vXA=w9DpEj3MCuCIXRw<`cQ0l9CUx6s zcrPI_aLt zoCr5YQ5ws;tGKik<1L7tZXOlk1Zz7S3}Jlb0s}tZ|~Q{ z5f){l)y1qfZ!W?Ktc>t0f(oPjP9`y&SJA#43MyUzmXf$u9C7GO$vtO%r%fsrwZG!L zf(OJZxX};E2n>{;W!ij4=LzKOB#QE%Nm$f)BO}=>Eg(a$jOhkb?MwOvxDy<>roC-iL^evU6 z?eC(&sn9nW-zT2EX@|vY)7X=fC!KrC&{-EX{eP!>&~G#O6$;BUGp|6wsUlN zwH0~zqJyu~tj9a0e71y*wVCR0JV@W*33X|RC!MJ%wa?JQy)iLCYsQou)!}V0HgaK)&kzb ztys1}*i}w&obl6Bna~otyl7>A;eGq5J&CB%2pHBSgzf3ZyZ~l@kQCtJF~HlF0&HV| z*MWOJD(4^TRFn(b>emwiyqU+lDFWyjfSG;cKmI#A^#3rv{}Vv}YR~{1?&I_V!%n9c zhExSC)_?oFKN@xuRG?p^FL7`!TITl^F|ACCllw0PfE$3}V_v%aYm&V_QriL_y6fk{~z{vMf;$K(ElH}9&fsO*ZqHP69M!Lz)A}6s$+mfJKDzp zxtd0e>B_;QFz&oYbh%kE857yx7iWJt1z7`Eatf+7TmBryy!Rv&XG^mJasfp%W`kV< zgkxlgob!nk(6Uk!<$;rdAXW}1$$8K2s6zJn0oY*6jXmIUcd_;_ z>mE$+O7LXH1`hO`E)_BbFIsb>A&(!q_V+Z30g7WO{5vQfk`bd1Damm|>nVm4yZu|2z+_%8sc=>HFo0a(!IYiR+pt`pS( zgFeHM;JiE*A^?j>o5oO3AFOuQ-;}koi6r_Tl+sWujd6^(#Qf8hFnmzM_41B2CTU%Mp7GjFQ@kcH&9U zA42C93tV^Uasf&>s0R$H#5Kb&R*ycDdUTXq=Q4fvjs4@b$t;^t*BVsK*~k#NO#a&} ztCl><>`PYB>!w~yKuts4Z0+m?bF+p17on()h1&dKD}v6OKnWv`nr7Gqfd8XN0WKZ` zyc<#gv!&d6^)bLlpM1RXpx&$q-~myalF3ds#$Jey|xxQLqA-B&U<4RVaB>+fOF;%$=OSWf9AEo-KLd9 zOR~1?l-SeEm|?DyWSpFoWH+Un>baT{b=cxqvSVS;?%RZtD$lTL2sFo{4jzeH8Xr@gQ@me6U;Rse?O{mf1K{cRk^cWc81z1< z_Hy|Cng0Kd4gfwI#D5qb>$bn+4P4~0wf#CbwLg8;l)Iz+*-O^Im}l>!yMyXGIt4&> z;_eocht$5+*&$o6tg8zCL%Rtm%0}VAJk(u+B-)>JrJdCW@uK-F1u-qjWeSvbz-gOG zC!&0ODEDM|+VHc?Qj%t6q}#}&GiizK(5iU4w9JDI_mt)_0>doQk#NF1Kp%+oC#Mk{ zIL$c=Tg~{gre%6~Fv930>9nrYH^$*@`}KJ7qQ9v_)&2(Q|1UrN^u-4syyla3ZRw9D%#Lo3!s!VjBYL1On23`Lg);nc~ea))pG@P zG|C4cl)vb!^Um~OR9W3rk2M{1GU}PF%(jXYk+q{7DvKV*A_U9dOTq<9E@ZO)H9XtW zx5}xk!a}S)gt>Uc(K~m7b!DMcLVyzRw*SX&=d+JT0R@dT0hJL}reY;QN(W7;3TVc8 zm8uK3m60GVghhk?)ksb=Hw#;$1nDqh&YO1J=g0f^SRptUgRtcEaat4WoCV4sCe4A; z*GHxGjP~ zQu{T)t8_ak!$-mer34={O&1^Am*t3+7uhz1s3Ao;tc!)62AC^#4NQ zKZd{R{ds!~z$-#`M*vWVjl(TTvO0l0`+1nVM|-{l?t`qDB@2TygM#b8^7NWFS~%RM z#GaznGe`>sDrWJ?J|VnU4PeHBy5W^01#uv4V11BIXfHb+tZxOGZDFiriApo*K*+t&LYZ#0yw110@v5lTCzX7tzv4~Er#0wy0Ghd2r+b)L18vHI zHXhjt_oC1CSW*DHG#KDLmI8eA$;UTs1MiRs;PR+|JEDN!Wf6ct{Qvsznb|kK@weYP z^gk-KzOUF1fB3@}AAA7X%Spo(++UndFFtr7|DPwpZnXMh1`K128NsWovi&KbItl&} zgmI?V{D={psIYc$S^cG1O?m>%bR3|F>9pLS%4T?8&15U)I5&NMwgWeo86djRN8e&g zW6iZnP+KB7Qzy6O7!?sB;_7OqnQ%SHzAOVQ3swWkF+66g0ZNg*lG|&0^``J|WUF;i$Bx<-^Kvooe2B2*CqZxBJ}?V=>Pe&t8KbF z(Kj_&A+}Lk1*clK(RHj$!uHbNbZ6GUqG8AD9X3~4nGB;~=a|(nJJWj0^e(wwbsi); zFoG+arQAbYmgwo6x}BCLLa{lV6>eJZ+u`(p4T}hffMrsfN6G@yjYy&gr=S8x_GR!e za~~iXF*89xN`Wzwy2}XoFp;!jF>MS^`Y2@?lc5ksnIkd60nWh4+Jc4{1oLC6cBw)j z4{E>lMortF8*AdHTk}_+etLRsxc~BD>|@gZZ+hGu{~PfmKlRh!`R#9U&O6`R3p?3E z#sI^uj1FtIw&n8XC!Qg@YBsWl1Du0W>MWsYd0n;dx9YfbJy??YlIT=SldM2ua|jPx zc0!?aO_AbD`cqC9?N`a8120$GXH(MtNb1VLk#gmMm<))3aM%?yH>yDO&=X6a)HU;7 zsoL@dC3l2DKwybfTQ0F}lAG97ct30QAc!*Kj$2#RgPF`%jG)EV8>WyL7FW}ZoYQD? zz66|@WZ3iLvjF|CTc^`C``+s?kFI?Bl#aM^j1;QvoO*(ld|YMZq<-y+ILVxZ zJ%{+DW#^S38KWTBzVDTJ+&$RYVP%rZ18{3-)8;Ug-bT(Eod50PHbD z038FHUj#FDk?w;QiJgF{j$FAb&BI9i)H`cB1!r3%8L~le;{T zQxNI}s04{IEQ}-eAo}*BP*&l>UK(jfvmuqQ-2*U7+UQaMXsJe&Qq*g(X1WKo7}`-s z0)k{7noKF9%3~X2^fBb_M;hC*mNMT!)RYL6=MQ$^4Yqwor3+Xodzz%GGjv5*)cL=x z0eb;u>|?(t){?DI--;k!=tI5Y0{)BLzd89Vv(7zFXk~8W;6c%1qx-q-&r*N`cz>xB zK9;YS$bX);3dYBQB%p)#Ij-VZR!=#=Y!!)A$X(UhRoS2;#2a=)oF1Ivyl|C=?kVBD;5wn^!Yr9$+V^YBeJ9d%&{zNgm6!gNC zNkShZ7g-7jW`ysiju)X2FY}+L4_-X36yVBkodJC9FaM1<*<0K-26!_1|C3@zuZ;ef zt=;3*>HoL<MRsb6a&-{VW8OxnlVOXMIJyPYC>j$&=#m$<98UAO%cnLyd(5m2bWgQ1?WKK{LuhZGq0Sk~Z zFbD*|WF1GEy9NU}moQpM0ZPKLnHyh+{M_7=uRZs(xXxVJ43e3 z|81KaK{#R976m6EOLTNq5Z;(f1wti&W~oPsWi4#|{4i9)28#+Nh_1czh0e1Bb`?%Y z9`@d7J+DGTv|WX&HZJr2V%aZCBm;AtAWAhC;eX?+)Gy1eLS)8}ZnaA1s8CROhvlB4 znFTQOyG!+N|I!SUuNZ?ir}#m`L_5+mvxBrErs$B*=>KPM7~sbvUPmc>h|Z6m{9VC^ zBVFK5 zJcuIb?c1J%e3X2_*dvN9H~22}zoGvZAAfQ?=Ff+Eu--8PIEU)k4#l+1d(GmCCd0;+ zlni&XNR&V1I~QV>kF3^gdny=+lV`F@{*4brgfHjH6t>byz$0SF%?U8GF-*Q{nRQVH z^yb&P-*jTu2OltQgMoz{ z=?fo!d^-8#f;illttN&MW#=25YzZ)<9aY`k!lvBWZ0VfS1g5Gb|biF#*S%;Xu@AT6a;>^J_U(h!MkRlP+6=Hp;7}C2HS`=rKd% z{xi6Ctww*^1j&|6yyKmWOe2TpbVX71yRX_%9Q|eYt)jhJ<6GdYIcWw=G?sjPy8#dwnWkU~up z2F>)&sDwm=Ashv!Fe)|_hCoUKOihR&1TY=Gt%yk(Y?yv7F~i&)7T_QvIa?t=6p}IL zuo0E%nvT6}Vwb#j(g(N@e1i!wd1NpJ=j2c`2IjGqsYAYMO_( z7h12=|10uukZwqKeOpEX$FE5=+qsGYK_vNXQykqvaGixz2)u|Y);cI?|U$J{c=Hz9jS@0A)7YCIr&gfVJNU1_-a+0iqp zbs$0(MC;4ePpT(IdR3R{J=(k9n^0Q+NA_ZuxTWUqzF;FQ4mUej3sl;$^|)#QoOXx+ z?l0LZ9dZYLmUw8}_kb;SsO>?w$%BCVeI8nF);4Ne!Ct@R6^{-#*r0#mb&3;<6>GWU z{`U|_pQQjhgkOc*{pkPgm+K9P0N(K99Tx%Q48V?dK(B=RKQ8odX8+Hx{ze||Nemxj zeE87^U--foe&owv{My&P^7XHM<;!3C+(awE{DxpCG^ zhsqJtQQ&~sI|j#`YZZ5HiT)-@6Hs}V+$I47DtI!sCaPc)@5ziB59E^s;kdd=K2Ugi zGR8)p!q&_7CK}2|swDg9oevxI4F#(;No>0(m%VG_94Hqxt5B#lzbK9)q^3y3-=gb< zkmeede3oXhx^5AKuilbNLZJOrv5>*Nn&xb*;}zKGKlt7cu8#p8ECp~!iU8g$>;GnW z8n0*He;57#HR6A7JpNu65HnXF0l))^|L+*|Z|@rM-_AV+?)tIoSs1Lq`qFM6 z{)?@II&#{wqB}P|D91Rb1z1M;$rp-%drlXmGAEf z5Xmuyw0IBWe1z|YIjq# zT^KNckYdhA`WT`KoBKdo35}HUod$#EB6Eu4mX73bre0yj8Mz5QaNzsnj=lR$K3=}O zdhz0ci6C#0{(rOo&;D93J}|TS^3w~)0CDv)!J3Q404NAU=KEqmhDCu2T1U;(-}3ra zEC$yqce52H+jPQ=%C?p4YqcC%t_2y?YckbA+5TWt-4_@V8a9-Qr(yxDoxYZ>*oKRV z@VhLAHy<%M8qlF zKBg&nbsmPJl+TyGR_+5Dr)|1q>&@YgW2(H`->mrk`SF^#!R5t_aP=`3`tCX?+DJvq93nIx_R9StM!69 z%L56`V^-wrWGH|_OG#aEUNT9c-9-~y|YZ!-QhCM)qA^zmUW{M&>8ff^#4oT zeQvJ-A6mdJ;$$BR?M{HE3F@ns$6Vi%W6mj0M9&Z=EB7^wkwY?X*+3Z)^i(YGzG%ZK zcMFztl!IwVOeI%$Tn)2U>j3C+vNNa5lBB^Q)ZV;vr!v8^^d#lp)L=i5dL67Qyt&#r zlvGix!tf5&4Glx8j2{| zqru}H%8Kd5_1pFuMGrS%17+H&WjeQcQ_DrF98w5o%aPmbql^k6N2&9H)svvc zN$CgDZCp)`YOmyQ!M$=w#Tm@R;L7W)l60Ae)@?P$h+xu-6EUB2y55QqdFci!AdUvZ zTnsZ5Sa5QWucCn0lHs(cC|GBBjro!tpQ2HR&4?leFGGH*W|P>dOkP3q0`5&OWsCkVYDupB!I)`( zS*}EVB{Vr$Y}Wb~tZh7t1tS*@0v_e%%L#K zDLzg$n26o}__@w_Cu`Ho+S9v61r3$5+-b@q#oa8-Jmyup_vaKT6N3SZtMK6_NAj_T zZ)VGEJ4i$tdDPp<DV$0jDe>}4bVjW~scOKmGIugJOxxANwo`)a z5{~3kN&zk#1H3a*06Rzl?&SX8cA+jFPdu3j;8CK0ckJvP7XkDP;D_J+?uTFe;$uPo zcRy}}{>|+7zxnIg;8YEP-vR!=U-|f-e(fi|`J2D}(|_(Ke(EQ`{_{WgQ$POouYT~s zi`TkUS1Dik(i+UyRw!^Iz3G<^r?@ylv52;~ugV=!OC!2}C`zDk5XdPYmV17dE(LQO zZV!5K4uX^~FiXvuhWqB}VE`-FeC^u$qiyDR+XV>HKnG@#j^>Qa4bGM`g$g@*pk0*P z{m;}3z|sh@Rn%p;3g2}PY*LgfsXls(OR-kORHULw<&g5t)JP`ipVo+!^P>f6)2y-z zZhO4^^lJa(ix2Jx9(O^&1Ec^y^Vk3Nx7b_UH3oPx`u~kv<%KBa1LA+5>HnYc0l;U2 z`2TvS;?ofS?H)n^(LgT0*V&S{;uhtAnmR(FxWSz^+fiLve7E&_StIwtwzv_#4)T zSDw0I26I?5ka~|L=a{Hd4=~WyR1{+6!-seeSvN)wXf~_PeA{F?Z++!xMU0vS1%jE zxp@qbun1hf^F0{?k_rd&3O%fvI^Dfh<(64}f?-w&bQ|`!mL~nQLOI&267F!)g0IWT zt3eg7%|X82V&1vgjFj8-6KDo^$lThxp;(C_Ec7L6aL{{&G1SO8QwJ(0PVc4)4`h$` z`m=}+Q;g%Zk48xiAS`|p1XMj*uWlCRzyu@0&D?#?si%$n1fi?kgU;l!6a~6(xpFL* zPH0}eOnkEi3MmfQjKzg_G#m2rq`v3JJMg%h{*PPF=nAcATvE+aLS_&@K3h^B!^l*R zr8t^t<7EexF@-4cz!VEg7vJgR@>kPTu8-1bI`JV|hRdo98CAvEU{VSSEH_ytY@nmGSqqC$u z-AHK8rzasgwGqYCsmT+}TRm_XyJ+Bqji2fp;_pj1D-0iP66kP;Mdb!#yZLcwESkkr z2h`@!fV4oWg$9T0nD!62M`yrny9Ol@uHIyTv*{1)Xbi!XSx(2Qc`D0?_qBZ&P`;j0 z3Sbun1H4;OfR8`ZZ^eUlJ#00 z)8$`e!x3SIK9#IY5X3WxWOl zDk+{k6}aC&y z!pmRTDr#(JURBDR(*l`m>IROou2ZkdvJw|JtvvlO22}_ouWBX=Q693@Xc1i+sv{yD zvqmAZm-(Miw`(w8wcGn252e3&0_$y4QUDK@uAO}d6 z9D2F3N#k0yTNSXwzrpdSsacJKf3w6dO!@onePXW?vQKhY-d>k9pT$Qk)zC2 zxox?v(S;e@5EaH$26F8^XB*m)6=Nd7B-1m|kO9`{O+M1=r@VdY-3$yf3$JR;9aZSn zC}M2JIrV)gE+RB7AHJh1i)?`vabe1ov^G#KIJ_jNW{2S3EqNFijWgHyUS+bU=};Hm zwu#5~+j(zgVKk;f1-*@IpD|G{2%ceE0_8MZDdK(iZn4Bx`2LP)w?njcfc&y-yDaO! zr=(6fz$#7zaJl41o;wj%xOg=ArnWUVMP;fAv4iyR<{kLr@%gh9pdR<5|94%YH!T8q z#3c> zpqyeftQ5on0)eb%f&AVcWwHnY80l%bJQ;u?A3iq6>1fD23X02Q#{@?fN~ZJ(ZHLhB;q0;Jtxd& zki>B7gvLZ7JVdr8{4_Yjki-16Me(v76dx?T8r&ERr%T`fDkX1NL|zWhA$dv(neGK4 zWkbwR3<2n>XKb@3ILvHc*Dm0-AMpaF7myZE*25>$G zNIeZ#?qm{NRj@fUUWyv5IZQhGs^YqCSt$MP$Bx*$|Oz`>!w-<&!`0FD8; zbF$!6(E_?Jg?TU!U7gyQy`~W&S#rD3vfBFGEp8PJWmgm`tcDN^Ev;Q(1-EJwrbq_1 zZBS`U+c_)NZ2dw-g%?w5Mg^=U#9Bl8tSXAEEpsQmr3!5Z7E8Nd`ns6?TlwL23<<`^iS< z-#UyQ`E)^HiLZgQ;Uglr`&@Nc_BK_@4`<5_NI_tmy`elmJBWz97yQ3r`@R1d{oG3d zKK|sBhavcHOa$fM&ENd3pZ|rQ{R@BLmw)+}e&%a`_RoCu(TA@@J#HsZ#etY2g-SvVSfb?n zR|bpa>B~8*L^mvhN5P4>XrYB}AG3CsIvz<%vjoG-dPnF)V zx5PA^_>t~DSu`#}XZ;wAW-%$DbL0d;Tmjb6m1hzczwOZ;-~0ZjcWrlH`s8d3;CP$R z{{!g%uYjvOi2nbi@xS+?|IhUQ_iq63u6X{~XP5Z@iW9Z7@)uhuZc$}PpwNT^QDp@T zqhjlqLxpwcqNb#w3KjdTm>RVQDcn^YpD<8^;^20I6}g*=tCd>OYMMqbOuq2Q=>pppC2~f=83gFm^AC?XEt3Asy0EK~#&-XlPUDTO{0p@Lf^Y7;U9SfK z+(G}pF#zDcHT(FD1%}S#d&dB~6d=#?s-jT2cUdH{C6-z1xqEP~NDi@sdvdp`VHJt# zMMX4*vjncTF-kO&6A`bf=K}pV&8u}lKt)$cbPI`Wmi4}Tgfj};0Qo@Vrm^?@?5+0pZ9;Rw-<)3m6l!K-9?&5OvSK}bZ%B+(^HKEy- z>np6#-7H8}OeK1%+Iy2U#=Q%v;0^fc^de2MHFmg-LwE^8?fLOmVf_c<4CjA7ZlNe+ zAH6`GmC5!>3!vJ5Lzc4Cf5kuqrF92DqVxP`y7h%$drGSELAfkxcG)jriQ?n%y7c7B!J5v=d4r3mTN_($e^5d99tE+ z@}3>et(HJB-!nJ3C$0-prpz(E-@!S_<&-C!aj*7<`i=fG3Rtz70ovk3;}D12D6Xzxai> z0{xrWIE`8#vb}T1I1L70UR{0q!E{{`{Z+#b5fx zpZSTefAx!>e0)(+#p9t3mpd4v^GJ4QwN>C9B8 zp#%Yk5XWsyWu5qjrKi+Rn#V$C{1ougfxxkCbOM4p=gi4z8K79QjKqubJP*^9B62Dv zv4?Gknj&-1-lkPZ(BRnIKvqFFkX4F7Tj$u>< zAR;quaL{RCamwT(&SG`@7zCMSK?%(ykN5~131xVDSid#F`Qq~W>~Efm{?8lV>b(34 zeDq^K_JcqC!|OAEhVYfa`xJGcL*G&JR^yorZR<)rwpiI!E4(KLrD!f=&KqNkswfC|Z z%FD3aHrr5ZOG7T~JQvw4N=~0RT*yOlAX6knq_ePyjC0)qL6d`U*5Oky0wvDKJQ8Dt zo@SnCm_oy1UUh_WE{*mvBR#b|i}vWFIi7wx73kmJ&DqWBw6N#L`}cUYUH4Y{{}H*c zMLnYdYOMj1oO7H`>Bdv{yzweTyTigFMWdFfI*gnd`=&e`k#K2t>iJm&mOqK-tF-Sw z;7Z2^-P}gS|5mbTa|0}?$GJ}xs9z8*Hq#N25Y{fCD}o(e)yUL~3tcv5>V#LkuGuID z|E?&~^uH3$9jKb20@a0@dglot0o67$%&_H(sO^Lw!>V+I>E=O+h3T`1>~-Rme>-Z% zkstBsQ{=C4l&6s5Rcpv{ZtTd|Yo+Ybqm#0ngZO=|g|hN*38ly&0y-Nk3h$5u+srgz zDoc3TOSbn~9$nILl3T4u89P^G1&`s(Ys`VoRAHZfG!L=BeH~b%(&Ki+o{z+*)Lzo#OAe0=}A-^&?5LjUn9V90}^ z|NL(AvP6R4nO>ATr33x~hO4W2bv3Vk@SWfJ_3!@ix4-?ZZ~peL{n~H-(l7qZKl95! z_p?9qla~PS68G9I!#%+)%KG0FJyNru85Iy{ z7>jzS>8~R_?xmCV1SOCj0az1RdGz;*x|%`TX4H1DMyQb9a%b)QUUbxPY9s1g5C;HF zMYI)~T*k2J&ejvk)A*}wSj{kv}y5P#eB{~Nc*3qi{V#Q)y?cpduxeXZCt{r?FD0Phs>{~dw; z-xT`K2VC@ot(PHADSS6aIGk-m6^WKi-)!eJHrN>Ynr4S}%%_gRnqRwF<S0RTOH9zRk@zTJ-L2%p5s$W*H+x z*FiI<%kHOy|8$BfD5hYwvM^dW2a~eMiaG>hW_oeh`~Rvp_T?bHoSHBAIn!HZgZMMB!`?0Ow-4hcO(73WxVzzy0L+K$ZxpnUqRyogC!%-9QIIObKkMN|wgV-m2r zmDE-tR2mHkgpc}>oXKS;kacsKOlYr56%GTX2vDl~o+pw@GQoMB_Y69w+gzXct{7L%ct^GY{Ix2e%Z$&gKMjJMN4|xiS zHh?Mw6&1}wd0V!q^V zU$B7BCWdUl=VH@Se!*q>OLOcjkenUa?&hXUmx3HnLNhChLs?y6k;97`VpeGrbY9y> z%W|?)aJmdVfO>g0!H*+_eHkW{u>^5eBd9&47u)T4R?PHj^*+k_@7o)v)PCs6w<&I_ zU*RxlDJpAv=}6ols=gaG*hn7zYev6?2e=(Xq?OEtMUjE+>YS{=>-?4&f_3LFQAB@N z?apMHL-gNO>f&C1)R)(ZKa0PlOXnG_v)zQ}aLL`>);=7%2;H_Plmc8Z26%H)fQNGb zZ@Vmj+eKC$k0b)P;8I_Tzwa(UJDT=>i2!;AfHI4JGtmEj2h6LGNt}5`?BoXW!3U?) zXP}Gyr}qJQ&gc9>AnsW z!kjb818vdyn;T(k0$q*Wlz$y^#P02zdYqs&n$P^)>Bd%CNui=Wqv}-THJr}Lho^-@ z&k`2*9}ZXKS#)crGArV$x~HuIj;wWjjfNHIC~bDd8z>#|Ap83KKHe1l|E7KQ&GknQ z$B3Wl|L@)a-~k8RXUp@)-X-GyEsJEA3!B*hryq3QTnc&|dbJxrl$r{4XtrPoG3=~7 z%G&}P&D#abqac(H&x4>|JqGH8ULL6cx3IoKLn5pqXv*xT+S-*q&{XH-2E)S5Su(mj zGQF8hZt~rCN91I?wFynTDs-EcCgJ5yTkt0r!|!*Prc8(*Iv+wdUhS5x^PT zfBzW3%+vP0&GEBkEOfcTZ_`7kE5(K?idf3f8nM{rqB~(R0qydaTTkp$> zirBJmSK;A{2=6}ZXgI&BULKKDy|!Q5pNU-vAsFs0VF_c>=quUQnldVG8JNUPX9xjl83+Uf0`cQ{jk8k`a^TA$;ZP{X- z`dA@7jx!9el(@@HY&lKm$gMNB$;#%u?(=orGcTM0T-qewG;6q_pnRwl!0zYEKe-g( zCiMSxMF1DI>W?P^xHk&;&NlorD*|{WFyyhIe>0mitT1CJ=gi$Jp2y*^7k(P*)*t-AAN{9)>)!`(XIhPRgY9Y;*+9%HNW7cYvRAX>eM93! z8s{vl{N=LKz_<|eFbo*Mm}QG!m3?K1sYH;AVn?WJv%)Y$S(sJ`&^}66)ln^crZly0 z+df>-JDu#nq0}?z-#XyPHq^$?_9mXMl$3P>>E%C$B;6Ui*r~s$hH0Jhh5XdeB*TqS zLCWd<15+%bqJolHLWTn`qa0Z|(}6mUW3xBBQa*R||F;_dd-vm+{{Nm00NxSw{~dw; z-!}Sx$u-B$-_M@&*go_=&+9|TMOTN6FV-{|?R2+TSL~c%+gQ2D%x^pUHXt$~4{UL^ zW2?HB|4`v{R9TixD|c=eMwMm0N{|*!u#!=-C&K6*4UDo@NwOj>5k01BU_{yomqoCq z7k$2tkb$5^1Qrm%KTuq*68$AG7_@;AAdFMCwv=gMK6hk`OiL@*NJ~SaQeTZ(NE~Nmyz;7M{ z2y^hhD^S-6D~>}l)r`GG5o41*Ys>$FcJT1w@$Cr-AfmjuHc@AR2$m>f!7T!V3K?vv zO_@|SC|->;8<`W3bghMW$mh zg!&G@Ml`#D+VlK)hhcp@?6=09V31$$3~sG1N>0R>aHsFGZYrX~Jo(&Gzy$;0qa1$} za19S)c+8BSGYQTrAwoB~j+Dhy&%MnHcz|_`SBgQT=mPg8F5DzT>Vg0Xj z9YkVkcTleFUhuoTvUObfNmC)$o-KFWYPZw*?-2n=5z;U37G}QYCD?3=cXTrm*qfz( z?BM{(a5!_kEX2fooMud~VY4ovyVd^LwgW2y*cVeGD+E<>LefzLk+u)c*y^HQSclxK z%m%Kwh=#>?No$KZv8DK?`CI+UB7D1W(j?wI26*qK0Cy7qUv-Y~MnwP* z8pD4cMF5vv(8q@U7YI0CUID{w7(xpA&2tRqhEs0BS1+%wUjE>ZfA6>c@&EGu-~4y} z%|G|kKYmlw%I*JZP|4mpmd#OF>mkUv5@Fp|YKRp*&(a@MDuI=64tK;AX~t=WfIDoa z>p`;_lthn0;Cte}S}e0LW!TuE$SLBLl3EIRu_Y948@D(F{%sz86-ZDQqhtxO7aa_` zE1R9y!GPNAqZ=~xY=u=ZX)2H(X$I4gt!{X7bv7)_MZgQMLSn~o#mJGfl+^nAq<=fa z6!m)Xx9U^>HWuscV}LhH|9`sp-)H*&=XU_`O#HW}wf(_O>+{AscmoKNZX?n0{t^;A?=4 zMT)c(wRukO+n7j-GVL(KBiA0!V=x}7ZuaH?#D;72)!p0&v*U|g*hb1#m;cyQo=Hmk$ z85fBcM_~9EBl&wt2~UxszQLBkCx7gCkUSdw|1lo3num{m^hba2M}Kt37+}ZxZx{nK zpPkEQx2=^K+rn&kLcWk#@{>kAl26KoN_D0*I*uD@FP&VIXeWz&xrO+5c%>&G6U~i{ z2*6?%JYF^Jf<#~p^OEPxn5AiL)n_e_LN9{p5ehjw7ZX@mKeww}F(s`?iW$8xRqnT} zIU{DyNMbIvY-n_5SBXirxn*Yy(4-~V2iVMZ+;sSyZa~?SFLi7sm zAMhC%F7p+asxORg9y6K|2D5N;vl$$4^VIN}!x_ZL1K$HQ+E_;ITv?*lVFc)&9$s72 zo{6f&@)%DENNAgW z_yT;fyRwzepbcK&IZR2Lq3%?AHnLTrf~_|c756*r-OZKUQ<2l8YmKg2o63hwv!g1+7i@3KGON7uQ^Eqa%)rII(8q3|Dz!mv9KBO+QTm2*g;p53?KD+m zY&qDm!WCA+O#w_8no0u;`YXg0n0q}TMZWGX3_SpMR)mJ`w@tKkWyteJn zEl~Iy5dl0P3ivh9h4)(oaL2WLBIw`DIMwrbu6;K|OmoNP8t16El)PiE=8W(E$+!Q( zKlq3L`QQCpFJ7E(!vA{?z-TkvvYxlL^qjGZoSF!4(@K_CVMnB`nWq|qvgN@ri`q_+ zHNClc_C*r^mp+jTgOT}>1{-t z>YOtx3WO+NOL1NCI%YPik&LuGvR3Xj`p@z^P%fQC1jSxw2dYI*!`+M+9#R6>k^)dB ze`FU6$r!oeCY`mo#u!hxK%VLUuh8oFc+#u!O#lDP4gj8s|4&T(zXbh1YLtP^Mx&I~ zTioa(z@80`x4&$o@P!C(6XC`Pxz3!8uL~G#nCc`SrS)hwj(&$1?p?k%?*V;85${K8h_RhmYZL&1L9}{(n6H;BC79-#G?o z+n>W2V3UlL52Z3K%yPaImS#0;XMGqB@z1d|behZ0K4N?WXM|E z-EGK*h>^GYp-nw@yf+ffF6nijAMgC*Aprmv(f^Mn)X2S2QZ!`gPue&QMsloYZ5IO@ zc$=cS9F3<=B^*APXIxCWI}wTR=bFt4EnT7D@&c-TB9dl@G^)vDI81VIh1rR=eiqGY z6}C~pVUXScb!Zyl>+H8Sbm^2)A-NLn3Cp)g4PIrL)Erbejd;_Q11#%($qu8?N))TP z(odA*X9uqL78Tps3+P{12KUQLsObL=q-$B540Rs+SvlwDF*$KtyOSMzC8k<=scez0 zaWG^lqh>Bxb`@^C0fWIF(qe5HRFtv2g{Ifbg_)VtCd!yN>5a;zCh63zu2X`|NAor$ zE)0et51#@}x$x6EYp{V{%k$pXX?Ng>?Xkw|fL$X5UK`nJJaArm;2LGmmdQ`vd+q>Y zUTIdho)FwJmL)~-VHE{b!;g`ykrcbEkD$xNO-*AxquQtvGVRPj3T_bveZ!Rx|H0C8 z!3x-J`(24J4pLwZ-zqp`3+|{j&`G`(X;Al)Yi5I$C}#U;4NJ9rD+<4TP0vz*8-L+4 z^#A=90X&uq(2lIVry_vs*YruD|E;_kb4K#QW@gv{o?Cy>n1;KZDv_6r8UNQm{@;J) zSAXN5{qw(Yb03$^KLF=)!4;cFZ9+s@;cWYQ=-^pcyp;zK4RpwM6YhC_DuX4h2&=_N z7GI~$uP(dYK9h8qzV@x*X9u3QOjAs&E;+0%hIdNe_Px~)a~~!b3u<}&QFg`qPyBE^lXRN|haZ|1{H;)mA#S9G3tmEPkwCY>6B2#HC zA%z6icXaaesMjA)3`4)AHG2CP;Ovk0k?voK{(s|^c_No-#aR;%1>MMIb*it-sWMFV*;%X|z# z8u;pRPe`)`Tk4O*RdN`R8HoazlEJs3D1bM!z}*3y&AnfX{?8j%(Zf%LkACz=fB2p6 zthxOyV}LXF|178Ws!kW*J-;6_H;=T{l3Hc41IkjFn~R2fSAm7hul3ktJeHY)xR5J~ zPl|gA{f~mbW1mjs`kkV6ps{lOuB$+{f|aI&Gb|CJ9`!-nN8a*Lv0b`P*fu^!Fs@=x z2|oCSZ6aT(cB%Z2+#iBV)H>^fl!8^60lk}*Nd+t@$N#n|H^4CG+%h_=(oarh;~m8S z?G6yvi@7s$A9?qQ2n_N$2H-PM)E^K1N1^}UQ2m!1f9KUEjTb(Oz*P-czz1Tk<6cZ{ za)#!+&1ZA!9piF7(4H;`|u;-gBn z;6_^FQBgo6QyH-TcH5g{0~xDN&UifEiy6%)+udhH7B3rl#d@b2peBY2Q?>R20(~h4 zO1?jd(IwYzfP@PE=}2Q>4ag5WiK3BjuL|?9NEfm;wBZsP*k+;5&Fpa>C7^GM{lz({ z5mLXM4j$5`hkb)nWZ=xaCl^~H0_D{2E^E8`?w#w@L0GIbf-b0pUpJe7ne-nD8CM}> zep5}b)LI7?xh};3c?eEeK@N@77aG6W-|b<;E2Qe^992g{h7hzxWP|SjTTHTj2kD`` zW%pK1w!w;d8dex@Wd$wqO}ECP_7i&zNZVknM$W~_Zu_s@ooGky>vM0xl{oBbyPkNv zKVY{56nlO^=pC*vFypmn+^Yk4D&Y0$r2zMh0bWZA@Mzrs+o15bBm%hL!amRi=rbS! z=*#(Lp#Lg*!^}8bwSSoCZw~k6oa4Y4W1hliWL^H>{rCUl-~G@2lbcXW^*=GA!?#kE zd%$7jP2W=DXxYEDa}L)|mp{8>9{H|j6$0E%i93#0{2I7v6Ap+C$5p!DBi!0fCw1_NSz(JW{u$UN|}$2@Kg<23-i_mTcTUYu?lQa%89 zz1(NXpMLK0F#13EO#go;2LMkL=D`b#si%kj?d{wCT!{YT`fx8#Mu*Tw+l*{wBAiq~ z_q626L%sZX#Ufnweb2f}sa(ju6==Pv$Yi)9I>#1mxlyhrOqdvK1T-yWD;i9JKVx)1 zMBCB^mhZ2H7=z`gL*c2SGs9pW3f^5qjghq)hRMN(@O*uPS~INj4fp}JOq zF_Eyo`DmdZ?Bq;$g6;6)oVT-5NKc|mI|miB;|d54210MI-Frci!qWA{al*FO zCt)8*R~exEPRhub0^~RQV;GT`hXKRoA`NpNB0u+m5uBhI_y_ICG7aWr`|DB-qV zEYykRk-^p?CS75w{>{A+-jkbVU9MvYGO&50y$$ALp2E%l_1;0 zgN@3IL!VUimXxNJ;uLAq(a+yllB1NRo;Dn%>Q7NjeU?Zd00$4rBbqU6h`R`Wkb6kU$_3_&`m z?}XSJaK}m(oX1-eH5qc%IxA8);RDSbHsUxJu6};50ypOl#G2H~7H-XBoE{bmku@d5 zb0sh59XHZcG3Pu{pQwJgxb0GXwKAZ;1=SGZXpWWyY(D-6^o`7=an2Bz(?U7lufYH} z-N07p7Q(-qN||{5=zwAh=C_?wUlS%(+dArdV4x$1bq^Hg1MFb4=J5xsp9LXx@>bh> zu6qKuPY|R_IO`*DM6ov(|FZipes|wnh0kO2r%0rUt2p=m-;t4y z@VTSdd#V|LJ)sofzA?bVr2wyp{=ZKmfTxQB-to2fR|If&Gd?Nwzp9im7-V{TLRRpL zG}v7n+NICT?Em;*|EE9slmFn$U;g6xdJ0N;COUZ(;oW9LT9vAXFBMUJBiQDVVL&i_ zLd)h;BT$bb0L;agQdr>J99lC8zK#PYX9=}^$JR|5>So6CaFk`}j|zJW7m<-z_Gq@u zm4i1YBLw?J_b9&3B*1|^MGaE866K=pVj0QI;M@nsnIhwyvqXi;`&BmHjS6mcaW`1UbCw(s<=9TR=%bi;On zmQ;gEt%!pPv~#6Pj$|bnUv|I%F1QF8>DweRT@FGFSe-uP)W9#MA~xy=4x_i z=CHQXv4Z1E-O~*HaoXsR!&rinHgkLkiu3OefKY2_RtcPnL(K!e34iUg}48VK-xU`;rGW!1w z&{(U~^H!Hgwg6+dYQS?5opnySr|rp;DuLF2+nfEGVfJc@B*ge4juZ)sEKKK7ND0~wE+>>qa8X|y)yv@(I z2*AvK?kB$bU;MrQ<_$pqO%bS5IlIK1*UJ)i`ShNxZ1R8p-~P$J@i+hF>*F-QA|w=G zSVezDUeX9gun9%EvB%U{+S*i@=4KO~z=hPqW*PZDDTg+?&#S8*!6GO}yFNfdcB)NV z=&fzL^N$-Fy5UN1U^(`bQgaQNH1N>RD?zd6f>kZ;r|!0&=NaWn^mPYka0Q$v4o1o9gVPt9ZKTJQj|l- zfcwbS&!u|+fx_)3ak%m$CYm+XzStwNt znrsOV6OYDg5LO|kJd4e|slj^`5y11~GyHfQ`afl^u?SryW^ zZ@wt#k7IotxA*+!jHul`0~-`rB6CKK05l_L>tQ$LFi+ZmZYnovEWA^XceB)OrqJb@ z-%v^32E=iSFj(KCClI!0E5ksi(-j`UPAOmp2g~8d-R6Y*WMGWAy7Do&Sse5xn-&L+ zu=ETjhucY2S)=#;h}n{^`um~ryzwr#8bw8|X^m?B)oIg~o?zqO_sb>9V_i`I;1S}n zWynxix0i-hU-lZroTYJTP+=8Sy*(X_!7{Bnq;6~zgc2xZ6`D1S(am{)@7c)}7>F{L zs0a<#fl+EEKw$SxC35qDM0XEUi?!H+HV*Gyo*wRj~
_0^U)!_gVz-#-RVh?*`2{NCfBz!s%ologib*RI{&(^FREz|L9-+ zSN^5bdGxEO0bvX>BFqpmQ#zlHov?gfbpbgJ$W14zzi6k>tczk6aUKX`vED6=!(FeF z*1d%oq?V8V|Fie*yt=MSc2JFa-no09?$a%7W7B|bnQq)Rrfmx&0vm*#;DE@Ig#|Q` z-Q*yVAVSMD_|knuib!$b2%Pd45D8I>i(~>qWRY<8nr{_B)u^iXyUqJrbFDqUKH9z3 zT;KdI@8x-_MvaRv3Cq@;aMx$dmSLdt?jG)o&B`}#8y`XC3RHV*Vp@u=;ArmNwsPKS z_srC7ag|bSmia|0iTg_^71e^YpTWNto2AVbB%FucicLb)-o(!k=*vDnU07E@TBu0O0_jj&%24AfA`5qf)Hk14yvg>C(6*0$ zBLRl&z>eW;1Uy|jJU;MmR4~1J$(4HmoqJ*K$??0@oW_er@?mxos&KLRC-e4e?>;@< zNhK8JX4ycQ%sAyB#=Ar;K}zkip3lY=x(IVF8WV`-AI&l~c*jDU{V%}X7a7nJ!uB>m zJluq_e+QCZl0z+{KUI&0HtGLS8^k$aOBRqk@)U6fzmLZsG1%wZt+bwC z${!MNk`?2J6!WLsP@D+RkEqRQADDtYbVogT8QE_Vc0vkJK;FeMK)Nioic`Z|$3k49 zQ4J3Y=MkZB8KzZ@{!58=l9HHIqvoVjRF7%-oHs^TbeWf1XCVm@b}J?1jNV=}uKA4m z0H7{LP|U;_#N9~K$OQ*ADL{h=F$W{|?%pm8Eui%p8hD{5kr+&bAWQr-Ehl`MP(K4F zf^(8}c3N{~8kdU|+!({K6?Wzf=FB^#bh2Cn{iKaQah!OG2;d_I;G019*X@$#f%@Sw z^#A>6da$i)yMG9+-9^_jvkb6-ghh~Z6Ac3~Gh5p-iu~LxqI6Og5X>!3DaFNhhmJQh zk2{QaAKGzC+|5;GICQ~d&mY!5T-St}fbimrK|M8a&9m3KpAa$ig~pnRiehDw$DC`@ z#oP7B3+M|H`7E&NX5g2L9j2sbJn%l7_1|aPL6HBipFAph|o9jKxfL!z>P2<8` zI8%wsbFET})5=E`&Iv-+EpAvV{+VMB=bXgLUlGR{Ky&|P@T!!&zH|7MN{$&QKm7T_ zU=l9Yx(;XvwHQf^Oe;`z@ui!ag$$w`Y<%$a57hp}0TqpdP7r@TuuD)?uFRxF??8r_ zZD;9zp6f$^roD=Q4t&r!O_}DQQi(Us>!@1lrdl;rEvde)PE;JmW%~Om@gBvFj z9u*OcFi4ibQWF}C_pRg`hgT7h2PerQLKSP&2bxlh#o8w8jK=bX!@p6Q9b^_m`q18c zX(Bpt^RyDxYk)c`dFX*A^34!fylW}I_b=l9KMurymm+|dxBz{tB7pzmKl|z2(2|cE9g7j?w?~fB%#J{r~vC{?woR6DPn6_k!%SZQnse0;w~0 zfx6vC^)F6~o^ZY4B;8Uf?Ai4ytO5LR^8@1vv(ABv?cF0uj0Y^OP!$?8gMb05L`jA{ zgJ~#&!_aMsh?rQUjwuuh+xIpqq`x1s2#K#!y-dhA$C`?2e3~m2;mb}+WSH_ZE0Jbw zPN&wu^<9heLX!} zF^d(l^rnrcyXi5b-P6V-C2Znj?QYi*0UbhXGb0Zxr|P9u&t^HduSB$wxb`0GwGQIM z@bjhZYIu3aucI6}Xy~d%eoqJ9bn4irS91EfZCsUZ2U0@0-rEf_yg z)u?rlkUDf}Ahm0)wU(|0T^h#xs`(Fh+uBx?NNd}mYi+8VZg-omwRFWVV=Yx(Ydr04 z)3xcg;(u$~uynh-+wQjd$-28+OLbdoyNeguwhi%;+oo&jwsa}hif^Gyk)I!H+tQk6 ztq5*Pf*Sx;-4@G}YCb9M%d-??8bnUA@b7636vu68spUP1X#@R-h+;U%K6Bpu!s0uA zef!1l=L{g!0K#v0z7zWZ0I16VmiEAimn(T4AZW!SFl766d*?rf7(X1V$z#pc%Ma;& z$zW7v4ngtm`o0(Km(M(i9N5r?NZR8&=`HaYie-5~I>wR}EE1+4w7-7?bIcM5F{#;@ zA*N*2vi^nG&Uv7?xtU3=0U@qQD>EmH#oav=9%efu#yzhqt|q~4QB}HNEkFg(rJ>;Q zGG7=S-HpGVsw|Itq;A_|`q+;;$V z=M@>hsQtEEbFlfYdGxy-$1pOgxB#d?SHFU^8{C7D=$Uj{)Au$<@hKD#u{grCieFS1 zsB)z0q~W#Ee@396+7eTya2^A2NuW<0!Ri`gjijudX=unwsGSIv;}(>{P*vdJ0>olT zqKE>vwQ(;}(dOktJD|364yMUZ8B8Z-GHi$-S*k589b0Y^4hpI|;8iRI=}rh;OQ5Pt zOD}ndo8Ud3zZ~(GqFAAyM7vhyA*!oQyO!WZNa0!e?F*+VQlopV=%zR%TDyNt?_^MM z@{)$?_|D=7cskuDw414(q$v&tM>;bPv#)#if*<%cHL2Vz>Fc zU+VFDKl`16{wMl>0^sbsP4wS)o9O@P1$hPisY~8=+wb@Ne!u_W{?iYie)#zhKm7dD zryoB3@bgcfK7HEn_uP{B_#ghq|LM3p(J3{lJs!S4yG5b0x7B^_?%`&01jX(8wCwln(JePUlh@H3&;s&UD6jwsklnhh`qF)na3O9IwzJKdIo`xocH zIn5>ON+Jw6RTq7zv#g;*Wo|x4^yo*|Pdt9Pfa03}&qWCSLHhq^i~s$g|9|5HfH#Ex zpLtik3Gx5E+5SMUqW|nKo={4TsJoV}#b+@$Gy3wTBfcmNV(2x?Ij%>ioNW~rn%~5C znUh9fH3ch02cfT5{;SHgWc5<2BbqDL{znJZ(S^BrwlJ#UMhMlk^Gkn!2|zY*c)qeI zR8-kPX5$LzS}GuJuL}N25Xii$stcmgQ(&!NOeU$_Www&hfT^yP1BN)ZF$P$w+qTw% zLZRy}CkIQ{y1Rqw+SUr-KK{II`I8m@q-$I2?ryDZySsy8ySt0ofUdRbzuN|dt}PJ% z{7bT_Bb@19^#%pO!wp(dDw!jue5+lgw^e z+K>h{Rf1e(PvQ1G?L%koGfy z-bH&pgZ@<4n7I_314Z5xv}2?!M#hW~Tr^PA2&v>Il>(ty)k_bCz<*k+K2`7P3HM)+_Y~v23ZLv-+}vvIKtv zD^FS5*d2r)2P%p=dgW5*$4FuIV&4JBm4`6X)=YQ921ZVH6V5 z7M_?Rg%i*}zXB>m+U&56RukwphNG8T!$-Ojzab8bhj95zGl16{1H2LXk7qn<4u2jv zFDEsXKNkYJbY`Cda^d_(H(vbYmG$UXbHcqld2xJcO2_a0?04Q8`p>Q7ez*I*HmR`s zvEBB2yZ?0m>4*DIpYHd2GdrRykpK06{$Kv-KmC8Nq9bUCIuwm$28H}Cb=z=R;SEsT zJ{^gr)73$|LUdJO69otNV9`% zfW&aHuS*V9bw@3#F zlR*)YrD{7V8{9^6tlLK|K8A&M94Lp0!=m}tlYlSl|MNcS|1TShKJ!h>>iIbv&IkSf zJ@mkD==lFE=>JO*|K-(ee;$keUoV67(xSs$_?z{mlh6kd)#;a;qkvSu7ZEMURHFz8 z4Sjb4UM_qXeUj*qelq&cM>Bxn>MD914T z&)8c6r@1#Kb{Z&cqNqvM%Vy6xLI~m{av%UvU14~yfU1LVe@rZBZWBm*hyVghhb~=9 zHL>;h=Y-zx_^)f}rfaP&SpT}VZRy(9wshqTK-b!~yR~g=yGz=B$`1IKyG_>yCHlW@ zs?d@qtoSDR<~b?RB^lZiAGofSgfMg^x`CyrQ~-)MhZTZnY{23dOmZc8gu^&Uw6(XV z;45Bn<%ml63BNl<05t`eVe)=BUgu24tKH1S&yVN4oA1&<{su7aykHsX2(S->9u^cOM+y zctO(l@;COPtPW(+tRoJrq7*D^(Y(ka2rNT^rL42XPc9JS(PK6^BxYu{OqJNEb5Cz{ zt*<2lxUxQfhycFg3h6V`|NVh0XKh%UvVBDip504GPNf>{r=co75<7TL?s2Py9dC&P zd_q4(GxsVU63}J?owxA-`XfSI=t~P$0`%;nOfgm}>wLgzC?f4CMvobY4{>5L(3Z-H z(_I43baGMca3Q4$3C)5Et;)H+Gu$sh@G=W(j5ynKh8Uy?5(d7jYMwfT4sR_*fr^Mx zkd@L%JZ8dRV=CM%H@(G39HNbrV-kg)%`RHEN_) z)WPD0nfZ{BzpN6DQQ-}!>W$4YUSXtDA5duIXeYPV7=gzhIEKl|bqzxJ^Mrc>rWdc@ za=^vnulYl0iVsvBK>$JB0?Opd5fsnQnm3fg9pX{q@w2hcfZZK^{q4*EHD z*|?`f)gw&X;shM??SrNxWy5&3(6 z?{B{;^k0>T?Pl{ev*hdNAACf0PF4-e)9YO+dnxJG#wYtF!Qp`r?1_? z4wpj1wDS?t2IjCIgLf!WwrZ*6r-|x-fS9PJW1CUX@v04ZL}WL!bmw3&D=>`we=uqC+fF>cM$B`J%v-6Y6QWs)kH z5tYzC+_QYkna93cu|eX9X*oa`d$zP{NXW>E;GXO9@$JL6pOgOo@MQFj;(wn2sXT@L z55Muu4{F`#du*@%ieHZPFJBb;mzP8T*U*1?3OlB=EoFfGsnbqBxQGIl2KsocxPviT zG^kve3c%;)TU001F~OxFhKPpCICaTDrOl@W9-}w|s1IklkEtKA!j z!$un#ZtR{8#t0Miun`QKWOv8X;4Q}MF0`A9MgoCnl%b2MXru$dKp<4Gp~8H;5(*q1 z?!ZuYm*ofYsD+ZUUxUZ$b znMOVttpgdpH0f@fsesCmIwcY^viax&lo$vv613W%6t@iYRs=!T z3$7c%2X1L^kzPQ6cw+ld_`NgdTf#4h@J9{|Ia&}4gJ85pHNRSVDaQroZfh-b3nvGc z3EUkjEjwhpy+RVeM-0HXR@&dF2VRT*zt1%3$I$^Hzy1%_u#51ZX&C) zXLIY6s&J5*>f$hwh3d&gN35)ekqZk3i!)&&FcB4a{vi!;8vC$jgXe@bYm?lqy*@PQ zc@Nd3!@^|{y35ue_pdC*4}eK5$4aE8XUy&jm=-e30EZGq#B{-HC*|?U9SKBjXk-sP z1k8@20~Cx(TGj_$V>S8FEIGfa7ST$U$nj2E;;;HHSu%x0&#VSb&_x^QteX?yh|7z` zvp_ViTb}Q_%zVUjafZ~ojmm7U)7Bh|5&Lm^5?LkGCRG$(s>O0d}G9Nf$(p^MXRro$7 zSIJ}#GJ`aqGPVP$xWNih3{TNkk5x8`Lm@UInlM~qiM?R9tX{fzA9sW^(=F2e*eB*L zqG8>jx>CfM9bZm0%rbA!2RFjpLwIf~vKy--L@aV>^rJ%aJ>wdqJM)NctW6w%_`MmR zR<=yL?K#agU`tX0w_P_oAI{+oVBH@j{U0w_0@oWIikHy;qkn(=eC6ZuMvvEICO*&e z=QUXW@}-IY@+!ptYux`QlzEUNKHS?yEm$beoaEc<^b&EJ1$C|$$K$oWqwwHyj3H^4 zj~2se?N~vVcQ9ra*>=+?#+&Xmj@gLE=?H?DMPt!6y%JpAA>?A0jZv%hM`~SmOKBD~ z*oXOfRKq?fm|4D-(h63T6iaf%6>DKD$~{(C>#U_)7#3;L^Mf6htobnL&j^9FrF%~) z0P=r}9zmM_8tnd%2&B)CB2owD2`yGW!pkUl4r{4mZ4m-%3gXJetQdxZBzI?Kn*Bpri` z?YI=uKKo!8aEiqDt`Rc6yKq(_ zE^{X5RGk#F2TS8Qc5m_4K*xdrqG_469l(lnCfgSk0en2ZJgon$0Dvp-&F66cKd1R@ zckASmPX1ab(zZoGe6IhIU{53z3_fkipK&mdGX8Aql}a6puCgQiq7$XHZj1zT{2uT6-* z#C*(8p-SS%+&BU#FSj;AdCa@z{KJdR8Ns}>eoAU!g+if7`G5ipWpV!RM6X)bH=x~3 zm90{nEOgYO8q^B15(SY6rAe(1rJR=zPg%>g4uC<-YtdLpPQ3H1G`+zj%*6V(e36Eas>4p^GA-n(bC%icWcw0s`j!KG0w7ah&1^9B@|7%|s@<%S)o_xlO=|KvuFwRu}-aWmW9FaN=R_Fw#? z|H7~S>L0$p-^s+0=JCaP?1%91*cgih7frN>uP-#51VUr)3K{O+4lzK<`-(Lzu|~li<2D4~P437?o)04rG}0 zRu}+x`rt}0N~Dt?U5UN!4qYXS2RcxVcyc?ERvXTDNy|DA5T#%_-XaXaX<)Ah4m^}0 zfgWMDWg+5?D$au=(m8m#C<*6EQCz^t6UEF$U_Y=ZrJ7`^0&Tu`e76nNYW(lssUO=AW!> zACbW*aQzXAxx*hiJpvO6N;wrbv-m=KK)-9I0;~+csoAr}NLy*aLzu)Z#16Bh1QT&{ z(2-_@$-~fz@*|azK-Oam#R8eEOAP&76nM2Y51+!`-H!!lo##5ZG_i5S|8nH-l%{E2 z1LgQ1eEAqND5_|!5xxw2qahxVOph9D9pt6dS_ckAyx=xvUP1*Pa8FNNK)XC;L{OH0 zQfQZ-CL_RutvawU@`xOL*&lUpa&!tS>2O6c-?kR9hw}jBJwyVW^>DAA3UK~4zyGCQ z{4ALMqn?Gw7unBE0(f(G#BVnVpk@HC3;hTBe-TLeVfP9VbJ`Ofy!Kln%f#J~J& zzwxL3r9b}1e)ZF*PkocPFe`}pe?0zP!|>1*FU{pkL>!iAyLuKX%6!4Ft3_qUYej-( zonzG~iCg9YOjk1(H&zA7X&VV=o}1W8PJw7NJ|soPAp2n1in-f1@{^iv>K{A9AQ5_l z)=1T|gO0tKCzPZF2LtCIeCvSnV|;S>9K~yBiC{qdiTY-04@i4&|}5`&mIPRrS$)c{y)#A|9`gl-y4q)`v14_cm)ffcLn{+H)Q+s4=jSm@I&(}5&NzVskb zsEbu@P8tHj>oZT~9F~SZU4#!7xr%;v5Guc&eh6-1V^Z4fcpfZtah52mOT?wd3Y+DI z6ggYPePpgG+){q0+A@4!2@9Bb6e{i}t}A8c5Ho~zN<-W69FMQY!zG;mqXT%x^-^>` zGQ6ae=Cq;L@I}d*$c+OPuZt21V4xTeZ5f}1N~khD!~V1#7&2y=2buGlfS-7}Ot8v6 z$`8@8*|^%VV@$;8!cB2g3iG4@fZoQw`)>c?huMiGwiQQ7bD$;VSs#ZAaN|)(jenpJ zttoc1u#w2qjAFnDjhBT!11#ov252*lMBEYADk&tb%_c?#eyV_0+|b^>1)H$pH^XE* zqmr$pzG7K=(TEyG=)i41nX`tfmxe=nZ};))mLA{EgJ<->l=@!)9u`jJ=1Z6DyXS)7 zZT#u33vSR&Qt->Fy{xf=r*a}UKQ;V0QL>*%*N?L9lfRzI)sMfc+qP%7bG6a6FRdB> zc)Sjj@^2~41Wd_x- ztVvTl)d&LsJUq*4^T@R){qHIuNK#~uVH@HDZU+EYQOgCe#`Cm*FA!hKj$cX#B;1b# zZAMZJvv_Uh<#q1amy2tA4Cf1TXY6$a+@$>=`_FWD>Iz)Y&kDnVEI*t|D-&6ol6o-_ z*+tYvtWXD`y-s`+qXt6UlWNy?MczpCu>iK3g^b0@<`a_=&SKzTR}jl4k6(^RRNPum z$^9V~*wzvz3|*YgNE|e$q6;-zPoc+x6z|hUjk8p&`IsT}q^}UN7|=1vuGu!nP&4s@ ztcJrlq8#$-$pzfkZ_yNS+;TMgsZoQFz%QJ!`QhHo%QR|R9N=V{W@^UprkNfMlK9(H zLJWJT5&>Z42gO`&}r>gkM^k*;StC9=^yyRzwu}O z^q>Fp|H`lb`XBq%f9?-`{|nz$XKukF((FCF*7j}N@9$M0OQ{LYT$(U8RfAzccVD{s z+Qns8tQD|#+N=%>zp%q6p{*7^?sJ)Jz^kRhU4$ZOKODyV@IHL%hCcr2(BS4uBU4m{ z0aF#-M3i%Vs{uI((ZkG=z_jm3Bhx(MN;IQ#<5S8xF59GSP(NLMd{y2!%~Y+ygG_zG zroQhXEHH2C1~)ZL?^Y;ap6QSQDYSLOaW%6Chh%sGe)wfOfLmjL&rbh;(RlQO{{Q2C zycBx=5flIARfzwufd0z`8cj0Nv%fAy_Ixs`B@4uDj8EENG&5?_Ml})rNUN`=E>+v; z@pi2WwDc7!ud^{w1kcMmUYI$%(*2k=p(r`iV7^=ffVBDz#~b*RVRv*ey@f(#9klC8 zYt6(UDgPX)JmS=@%P?;l!NIFCf%7*jjnE~C4Cx9JpFQ4-zm*O^@v(I+q-bCzZIcxK zd~6HATH9I*gmfU(52b8SP^pk4bjaFPcFuH$mUOsIg9uS58D6EtY-NNp4Y+*&6YH0> zby^D{cfiOx@+K}uCGA$Qk9Zls*M{fE>aq(gyGjpx#9jW#PT+*F1`T+~X){w7_Y7Tt zG{*$Z1+D#?J_D+nZWPk-z)S;1WJkvpTO#|TY#@1p3F%cVaq|%2fS4o(@8poMJcS&M zt;GchO=}WADkMPB+MQ#Hh(jdm_p%Uj(p=i>(k*O5efmpOlxK&CI3*!n8$~8*jvof$S@YV&`?$%mc`6W$6;l>5>8AJeQ*VXzcFTPHE|CuN5vGo7>E03W6KTvI-ad2u& zUKEx=MHbfGmYYrib|P~c7ZKm#@MGosQ(%2H&>LD@DsU_R_YdACw?{n2=${kTSbi%cm7c#YbF7#cZaU>k zy93RI!bLQ|e5qtwvI;u2uejme{g1@MwpWv$V7Q2-fp01~F!+Y<=j%@*`^Ex)WCiil zIXVU);|IzSQKS`=(;w#OP#*^PDL(@`@c?9~GetHljf%SOgdk9?O6^*u^#-J!Sc@v9 zD|I4EPmth`YFq9{mDp-JWr0JrgZEZmbo`+RfH1b2`|?!fbun1?8H`kVQJkRsMIX_= z);kI~t^dln>cF4}LUoZN5~mZi2crU+fUT97L*lTK_*)Vt3S^Ui@_}-kd>Pa#qPOk z4_?6tZU=-rQ8lXUWvqhIdvsiR>B*lckwH`P^Qv%n+bxBd;-!TQf4T6?k%5etygNUP z=kTBg^9QB@vcziXmS^|GLaRK3dYTyD$Vl`wZXA+m4<+QgJH&T$7bPZBrhmIRv`vXT zRNCCjGuP;JRreYO+*Sk3#q|9f1brd;|D^@(Z0h+)kQ1*oPWYhze>0EgD*(Py;=jC_ z?aw3X#J48?-zHxWx(^pqzXK%C8bSI50LgdbX%G+%g1DHx+Z}@|wZ>;9gt7>>00D z_Nts>Xxl2MOH!OWizB?2dY#1J2pT^jb@7q^yq209;#dklHqPNz~$%Y-DaQe2M2`of9fz2evXa? z7I{i}{e?wR(D}vcPDv?iL_}tyuMgS?NJC|mF7+6PubMIe8A<}2gzV*54(*&>=^lP? zpvKVcxT=`B0%qmx9QBPGPlN4NL|ES~0tmuLBy=}x3t|kuE2_R^N194IglkH!^?VuxZbWp=O)J~Z zxS^Y1$>1NLw=Zw^+=$xYPMopl6?j{czK9ABfF?+7T14}T!?mzL%VNeQbPIJjL?q(I zGwHoTeYr}G8Fu9nGgKT{u?s{~FJ_{PwG)a%>N;{>9mAUpR0TAUZsG~i=N4%aVauXH z{~w0K<>BMgqo?9(Wqj__E-N%&dbktZEL8%<`KVRRDviLgVE2ZOVGmBASE7=`#Y#%Z z*@Wk&W#QK3xtMcrl|#_eVNLejyigH06{xH28zs^izp*JOI%szsjTqo(cq3nV&ZJVx ziKsIZcE^af<^EryOC4+muc8SPD{r4243UPP-s~JBMNVT9ZZcrUWl<;575E@b&@v)E zFkv9k;Mk(?yZS6huV?f~Eaf>=VT?OsTuwYtV}=xpzT=Z8k#-;scB_UP(UE=|@O_L9 z;7M)Z^TF{qkOKU|Pk!>b(EWEO0(kQ%;A`*u4T%6=&iaqXr=MSzvHr084eq~){M-M| zUlx&H`?Wv*=YI1ye)@|)*|u~YjQz{Z5~~hjG#%b-zZY>;wM>kM3shw{#ZtJL8`g4h z*`Z6#;DD|b+I>|u`p-p{uaUH7d)gQr7KaWw_fpy^QdL|VZ9o<=itj)-caO{?8UY2K z;KPNWf&>D@C{pAe2!e^k+_WTIab!ySRfa`jy;x26$Xux{&04sf*tFJfsnYI0hYjfv zU@08*F?7XJ+xKuGj4vGedo#26@)GSW`u|+K z@ZX;P|7Fl{e+d1*zSMls|G%b(KJViAa$&#nLgN2hqW^un-X{LPHTo~ZST}LYA#HB= zTBx5m%g|0VVt0a$l`{bM5k!`}_v6tx&5w=!rJjgR>&=f6GgH;kF(;pzo^=ol9-|2xuJ67?jRj5ed z%oa#_1N$y;4l+UoR%H1qvwV{~w`Jrn()7RWU-OeKs4f9?WtM=pU_v7aKr-Wwg8_w$ zFI_wsw6gK?pAG(4a?ZyI)|phN3{FTw95a{TBY!&jPb0)q28rH@NH^~=FNUVmeaasJ zqCVWEOpKTa9V!U7`1&jCb<$j_h3>)2Flr}M!oIl{xw7+3lp=zo-B5$Y)fMw!SIZBBUB(TWs1zmiiVi)T? zUvh!bVP9TI-|l=b-_sep$+_t(vRlI^bYMusB^QV+MI|F#C_Zp&ng0ADfRD$wRQ5dZ zijSxNlS%hT`u`yS;3oawFJ(98q+V4-mM*BQNP}OBmEq&koc*d|oN+jGpEWUaMg?bI z$jI-o>?@23j%TQpQ43P^`BLp;QbA zg9XBLM9e#YK-Yrib0LQS8^M5@W0v94zArJW(3sKNj38)}vt)&r|IC>6Hm4D>D|-%5 zIaE2WIAs@H;k<`c{%qwshQymZdjxcFoBJ=M|7Q>vAAkL?{ndZ%&;99N`pNg- z-EGOKXAWHKin|#bx};Dg6+N=dz(cfxu1JD&ZaCyswOCO%w+ zX``2&78wzt5|~Ro@pss6X|*2-YYhCA5(XZ6fs@4nCW9JJK4NY(be!`V-2wra7K93|L4j3>|+w*{V~1Q2mSxEKAx-q z_;C~e<&m~OUl95yX24e28{!TjxexjiE}oeql_t%Fk={Mg^H)b?ql>4Y+c8L9HN&3K zy@78QFWpnXt(34mu_e+62wF2HOl6bp7u6@ws$`f}A2%_uL+)9T}s;4|# zS|jfmwn&wP9F3MH17O6|g$JLhrUjtG#bF%<6cBExBv~TBRc7`wo7=>n<7J%%t7dJp zhVO6}fv67?tbYh(B^}PwiAjB&D1MThA*ARdjihSLPbP(i3v(neXQwV2x&$&aowm!u z&+mQxCy7kfA>UxOnDdSc6-cq^r3;|PF>xMz4hGw2F zM$>B9m^(EFR+T>>=1?{7wmfg~1;3XX-&lr+wsnzF8W5afh322!8JLm3$W;Jw(9B}w zfOWS5>rYkB(zw)C8Bk@81x{x?&^Z_SQX+s^TZw&41-_!k1D(lL`u{_Z$I}0Af*nt$ z{~zl96*qCT*K4T=)Epu!DgsG?THjU>v0Oc5iJ16u6vZqxVM1+R-3Lx9e8!%D24K4g zLi!fHBAEw4i6_&^GYvQF-OJ@Z7f;k^!d-PuA{#?(AQM4FqsHE5fKpUe+xM_Z^a6fW z+ze}_?|F9E(=?to>sp(H5a9RWJ3q|Rt%OXuBQ_{YzF!j*vLsqHB#)5*+Kiqh9Y%T3 zZ+$H1>{h##&;c*DiT$=hLN#O*q7K)9#Pg(BuEueEoEveb34vHf4hcqG$pUVq8;u;J ze)sxo@8OxP(814sXk^_7`pyu8s!nsLpqxsVv<~hkZFo2^OP`rixQ^DD%upG2O8NSu zQ<$R2)PacLFt|tO3(=6jj#$qRQnI=-y@OE;gtU(FO6_A+CK{|`#|X)(%%m?Cjs@6s z%8+4uEnyoSoz89CGYjY{!s4?OzA*#%@{s^@8FzW16yUR?|6hj);PX7bB@uwU zc=UCR{(t^0Pu}U@{Tu&Y{NY!A`KP(+LLqn_pZ4L^pc8_xKG~dtt&vv0XB87tvsFl&*QW3Y^ zYX(q;hxx|lQ@Cck2~8q*%Pm@6_R@2>!)04BTxq5nTV{&&3q?R+Ep|IKH9G|OM+p-;LjzEa}9yqfLL1L*%3 zC;lHkV-odsHj49z6_?LjOO{{e#27s){;c48Xi%=S!Y#_Dt!i1xdv9|I++xH4mQzU} z5uleJP5Y{IJ~l{!7tq$;h2F3A1r$ZlPXqNhJwph9iaQ7rJ<2*3Woi#a(Cn4RGc*EP zzWeN*T*z39=|mXp7u8CG=MXBC75^_y{KM*9lMWt`eR#yjJLn2_gz8Fn*E&Z?UU?}8 z!t_}M&@F=kg3C$gOrA52vD~Op^0E7O{?D z%*EQPJ5o9&GM-AB|DqlxH6GeV|Gey}0Y&>z^%E%Pr;laL*;>T7}4o*g;RmSgUgZvRP{k!B5g%nu@MJ8q8hF~(y2Muc08n^D)M z+jgsL`l2F$b$54s!H*b#uk7*U001|6pY;DT>G-#sM2g}7Y5c000awD^}T^kIA@?*>+-^NB- zGzvKbs&QBY576@i)%`H)Jx;+&cc~gDG4?`gx%vtZ!C`%=k_Ct|p#4xhNb4R{E5NA+ z12`E8@LFv-NcsLZ&AwRgS)UA(eHMzvf1wLvh3Jg9tA^bDSPc|qrCuyT73+25Q}IP~ zoSpV!ieoYxqBsIX+H<&7_)iK}oF7Dh}siRJ~y|*MCuOtFE zKZE)N-+x^E>8&C9*PaCMyZ`0O(f^Bx$~pc27dD)8|Nr`5`>SKw%LPArh9r#7_Aa*) z>n65A0|>AffS2vD;Hu;g{vBh{&8)aZp%h@d};CU+nNBo-|c>X>T2{# z1|Clb)!r-p{}~AWwdVJUqs9;V|2Oj3Uh$GThyLI0dj9H&|8I`|`;F=}H0B5HMsvp& zI;At@Y`dMj1S+|X+f^{QEEsZbiuBe!Ssk*!O}AK1(KRR7V>NL&RIyvTf?y{upfK~M z$WggaTazLKO4AVt+&gpAO$|L0)nm6*DSz==-=RVmgK-gSMe_w#F=_spWts^ANKe@6 ztJyWSxxEfACKNmE$m5HzxH?u&L}bw=F!=sep}Od5`vMgBdk8>?jyKg3l>jlkYkQN| zrJZ`jFB7KHsYOUxX1XmE3Za0UDM}#aQ#^Y8B36os@w}9?d@;z1uSYv5r}sl?5xZv9 zsEY<71DKiMQ40}P`p*a??}*~{1%cdU21^VX4RtVat!5~Lg#B;B;gT+w7=S|aWCz!- zG7?+_SZ=1kUJBOm?`N2y>au<3flY#)jR7BM%ulJQIqmx+nlMc)ReTQ*XR3UPZ5sFd zg4|nLV_16qhmO~G#t%f|hY?~6RZTEPL?GDB#0T(%!3I)Y$?Y8pr8EGqvT0HXbyK^a zE7dy_0bJgUK4JjA1e)>U004Pw`ac)o*QNi4_(u1%YnmhLEw&Xv~M zr-Qr}iYO{bCz*s1BS$A8eG3@hV&`&k$6C?sS{kK!5#-HXD-VD@wnz9+cCFON8(qt_ zjzDa^ox1Aop=u)N?=iS`BbPsCoH2`s5A!-q+rd)pVGtz1h#ixjtk3H%b`6bj`;wuG z>oCLwVl@|2>3RS|VA&}$*Dh!r_~sAIy29|7yOW;92E>quI{_AQlk=u@la`1zT&eUI)_Z{n2j!C?^{LcA?miR8UGX!gK$XTeX z2nC1blk*yH5bZ2H_MJDK>d+5hS zAp36OBa$#%mq_^vf7^Y(*R^bSjXVHft_D?GihX&wj6uu+g@1C0>@LA|E3~LDfb7h? z$YZ?*LTq1sh}U3H7>QGWS5Z|sjP3rGIuwxDBDe!O2n`g57K?^^5U+# z(kazKn~e+{5C{?yNrgovxo3ftF+K@Am{<5vWb#Erhv?m$T^=`d0K0jb|0-Z|e{UH( z4|S2HIwj@9D*_jX0dhqXP&0tX3j(S#{}O6|&rJW92PdG{{D0O9;(tHr|39jSKIVdW zSLpv|C;rQ;5dS|b`ah^9Y28y$sY->& zSD=@@mNyY&66lSeUwx4>iDbY-Y1fY7Ux)f3=v~-k2fjGW zmjtmqg^%MDBb{*U&~|27A0|Ih8?Dj)R(J1%7Mc?O%-!Y3P#ie;dc#_<3HZZ&XiTYM z;;|&17PWeKS_f$pB@)HziJAf*S$$%K&;Sin*d z^Cc_b3MZr$k94>~7;0rTm@Wbl_!v3Bo-YFIdr$CuDv46nfnG2oBsos8cfFW`fVG@9 zQxYU)hGVQvb*Z1Jk>mnD>-~xVJ|16V&2#z-*Usq``v1c(_&ECit!F%m{(sh-Kx=o7 z#Y`)x#+#~BWZ)10dHCzbf*hlIBUc~>#(9rNV6Xe3jY-QlceAu8FXt!cPWOTFH`PCHE?XVmH?W6Pb{%QE@)``}$dqO96iFOHehCRf2 z&S?pX(^v)z{nrw0#uhoU?!!5Wi30iG$Yl&wn5tII62V1MRC+%IL5)2k1!*PU47G+} z0Nfe*1l81<9eMpY9wk4?e9b;QK2j7a%8!=?Dl-x!0tU1O+z zS%zq61oQJzY?ze+n7&c>E@A#EJiJP#EOGQuw=y+D%Fc0S5x0HP*&>5!e{mCyeW05$ ze-#~oykjZAm*)QCsZV)p5x@nP|5rbE->3*6Zuh_c_y5idUg5Ez$_e*hM2_75!)qd~ zeH)_A&=NA+QGckuID7D*H-%;>1dG)mM0dMV46eWm0X@aS3b()((7o8Di`31Vh=wA- z6+J8QlVZw~e|R#=3U@?p3k8}bIvUJ1x430u%dq=B2gSMTiDJpHFmP55sUlcPfm(>F z9Zl+TbhaK>(6HUlqyo?K%-gOm@|^NSS=lS6siTYRks}bvZK^4rE3HPj7n}h4nTdRH zExDx$cu)}VmwxL%bU8T4eKs|~m!tnbbM<>8G`-OO5BmR)r5Sz)otwayAd$w@c-pHDlLn(Ct=J?|z+l0|f-^d0H&rqG3lA zPp-N$H#f*}y4(l*sicC^PCV4zOPL52InOc20I@}>PoJOY7;zU>$Lt!TYQ!w z;sCa7VO-lOg3xNbdN>d;rp}DHM%kIstE#%#CkFaLaDM>(I%Wn^#{Ai}f*E_95Ui!l zgrj**x)<@wR1{meANf39pw)kR?1+Q@{-asV(Sh>aDuhm<4xgPlpuSsm!pT-ZWjv1m z$nXNS%W}%cm&pAqG$moP zi1MSC);uuPDm9+~79^$-?NpG;32$I)=w9oF$>%ge*WI9gwVw2fC(WTgqKv!JA?rI3jDI{%8juGohbMLT zSLr|3tjYZ9wejlo|C7R@cRKBbG&F57w{~&6-$k6cd}3y?VeV!b%F>WyL4*YIP$;9D zXG#huw~?$zA^R936pmYUNoN$x(Jdv5O)Vo~CxDpYCt^YUbF)JVAH>YeO@Wgt%B!4l z0I*sf;T1>EfOD^Xqd)L)TJcKFapzIhCMFQ4wd&qEfRGMXX*;?TM)ARJ;7LSOl0GiW z_p5lUwhcWD8FIfIbt|XSQ83gA^12uJ$s=z;Nm+>C_ZrQYvSHK$mi~C@gp(YTa_4DJ z9`2=4GA&){l;|u{x)LPiL3Qr_9j@DxoS{q5vB)O{g|){b6C{Ub2=1pAA;7!-$elNg zA5j5{Ely3$srdU^W>hMookG-+#k^+^USTtIfCDzC?{t61gy-bqWe|cot6Yv2GY)me zIlUd%rUECM;6rvm{)lB(-<=&0u3#C*HtoCbfAUrBkI!X#;*}wumqr0U7L}75h2m}I z?-zmo>+w7zpqJ49|GWSGzx|b8{^=?GpO`7*zSw&*NGFLtAx8>6UGMA~@p4PmsO^r# z5hPBqkgEp-inUbNT0whT0!>B{Am+MMM%)VWB`}s=+Nl+%oyZ330$)nnmO{!Gv1gPS zN0+^C$O?=$gAg~1AKJaq+fSjZud^~ls&dD@BMNfz&UJ(iK>?fCzW1Ira$9t1iC3mW zpzo18S9!(3#;nam&7wD!VFj2`IRdDzaA8GKAuk|onfUwAFyPu4;PxcoON{}ZLI1xw z26!_4|1nG4?SACO2YAl#;Di4EO+2>Oog=*|@&EHe|MGI^Up~L>&q3{cs>$sbcR3`l zni)}eP0v1dnn9xu&+hDCt0VCM_1Y07`wa`ImLY3`!8+=6vrKZO*4bTjEzeI9`!40= zfv(oD+hydM&hr!6cbZNzO#s81vsMHCPZaskBSP04lf7>0Jh#-B6pW85{F~3CgTk5 z%!BO&JeU|{RcRK?hbd8KVdDyT%X?A0_30QC7k?PpyQ=Iv1EQraT(f(AAMp~~7!8Af z0;volR_S?eObGU#wdH-0I(?PNwsR)}l^LCo&O_6spIWAOB*YKeikR&&vdf53)$qQFRT)q>!RokM z0I{~h%|*?<175t0Qh=44L-+}qxZAF(Zkdc5raHy9i@g;v_vuT=!DG3+U}Cy~y3Sw~ zPuXA$mK`!J>YX0Adzkg1iVaQBgGE@y7t;+nfMMHRS6c0+`$5Jm8M6v_uB_2iH*2F| zOhb2ETY`?Qw-0&fiIvb?+K$<~2;L9+ z{|HZ>6F;1joah^Az$c!He%z$4yz}QUNK}>S?s&W~PCmd{k*PCIRwH%xDc9laLjO;~ z9Irio`2T)*B>MmTciTDoe-YC=x!3l67g{ah7#$9%?>mDW`&J&rI64#jyw4~hGSTp-iVWQMvc_Isa` zBcA2vNL3#Ak)`Y}1Z~x@sBWw8i;gMKo4<@d06L`B2C;cEAzbMI)L^d26Jh+C6r8E0?;~(xneY!Xdkek*(r-d#j z0kcm2H~*vGI=Qa=@ZsLj6zC=N|8oM+OX&ZPO(JHLqB@rzq|_Z z{|(Xq>nG`y`#+r8icp+OzoMqSP4bzTmkU@DWmcbpMDOW)QYz%^=!m{D2TwY=je)qQ zB_h??44+XI)XtGnW2%~L?#YkqZM!&De3vxdt(@3|@-r@&M@KURm^gxJCC@T$x7pyq z&L*LM1#4_Zpan=$$^dHLp*TeKHkmH7eajI@N6Z~Wh9l5$0b1LpYpLqmHqs`-N~jJe zKO*ykp=;VSG2W+Qn-#;=$A<&@pH*F33Xk`A`M>HH8T6^2C&OUU70D+%oiIzbieg@(OQWpvn6u%eQYfUzbO zGs6s6z|die_DO?&S1kO=h9h-yrXv8IZ7?G%pzuC}p*HFIr*o=MQOh;GDpyCsB2DB^ z=1S5)JbAJr;aM4yg5&_Ew||_?kOx(=XOdw#VbW9&P*rNXc^8zzK}i7NKpwvvJERxG zUAk9sBmncv?alia0kjK{ev~!u0Oxq|Nw`cibi4B82i!kzz+oppc|-cYpHCV(884O^ zT9fMxu?gikh)Jg3PEMk8RSa{mwbb1AeYZgPj~S~a5F+hAnPV7;axH$fqd86IV+5XS zlen3=?HM_KwCV5SrfCrsvsV+(VuBxr0xcteLZPB*Q6oLZj8qdLGr_F_@|mGG17PG0z~6`4dco- z_=&$VB}+vmd86g@1b)c0qJWq~lEbc3qE~YtY7nJ05Xs@MpGz6=NrhKW1w^^-RB;XO z9A*AL#jM`Fg?tsVEe;ozFeEH9%uzN>sZC#bSrsLpq*(&<2ENd8Tw1KI=>Q(YH7bYm zIqUP;=lQH;?G9N!Jia#W|22RHm+_#7fgLC*dPD#xtp8l%`1swYhyWhX z{lECQ!2Oq`4h)AGp0(EKd7JLKhmt+qWrGbihNcYYp@%SZsY0^v(ve*Gw%l=yoUw3!x6eIUqR6 zIkWsLRa(ZlIfY4}|K+k8+za;Z?pR7ie`yC(du)NB@5j=KC4x|M1)E{|Ej53qLk_ z@d?3ePH$cW{mZM_{@hv!-Xrl}ZgKzRnA74C`JCt+S`9nA0uBdgo{49q4kaq;vy-es z7uE3!vu20$ou>y3r_(_+bnBhc*%F3;E?N6*FT>I&QwN$27vw2n^x$EFpHS>{r7tpm z<{SiM*-^GY@%LON|JsWW6=A>eCFjfLc)&eE6iy1(Jg`CTV}vVG=g!Vt8$yJ8Lv5rTq`>=aA!TxdA7ahcwJ^*AQ{r#l(mc zl<_68Crbsch-TFrH_@WGIP!dvd2uVf?JE%hd_3OMLtn9kcpClRTrSf8uWs^hPX9mo zrf8avU@h;LPRo9ajNG`|mnN?h>24qGuZ8`t!gh1faLz>o<}P9Vzuc3HXW;{5c^f7c zPEa067jMuVXzm(nh>f+xV+GTcxF@4Pr@StKq2&J!qPrOsCayIxt&OJe;xRaP1rT3Z zx#&_MDfC&%YKUfW z(k75&p=6FYb(Z<_vgPs6P+H?XvFAYvuMk_IR<tS`ol) z)<2%}f{#51SLy$F;5F~>KNWp=t>qp3h*#C;faTZ>_5NHkHN1&4Qy} zx@k=dR`GDtoAp)%5&Kx_Xc<09jW`LKqeTEZb~oi3sXs`ZSeq`8!2(Kyb=vn=m!HXR zbR^1LAX5C|`$X7p>K`?naTSy>y6RBEQw zQu&c#P)ajIW&1MPV3~H*WiDk%^~+wEEddR& z;_}m}mTqZEdRgW;fSnRk0&-(VM+cO4K+A<$1!E;@e~XN1>KiFhC^AzA%QH;9gzStA z=5le9)MHrY_A=L3M#iEKwUESlHHI&m8B?}9A4F9}tTHh)h?crku-3-Ir6=@`5V^dB8cS~2 z-RJ7ve1AIhc`uD)W=|2m4>R^y3(6n2>GNeU$BCvu0?4i3GmE~rg61;|Jt%3k+VNZ) z;)_$YtYx`w2j>e4t71_!3skm0%{a)I2RXkrw3&dV&lGDSg3U8Ev;8_y;jC}M>8YLP z)y|MvzqH&<3!r>MJ8jZ1UZt7n+^O7!0Z4%;r1?TtW|-x1my08J07oIQ4iChxtU@Rj zFBMy{=g2(DKh55T);DR(pn=ynI~#L*Rvh35bZYNR8b-ZV-uLr!OLa8JJbxKitj5cP`Jx_NMVqB(IV;;wA`1?aT zfVptp=HS0dB*3FO*3Uei=jncb=>Idm$%VhZt_a|BL;+uW>vt>yxXt=Mx$}PS_kQOw zulW-5pMUg^|KSDhzliVq3HQIyL-#@ zO}7o(9o8o6PIPl!x~*!u!nVFG&eCWnKm`lOq2M@zBbG^BL6u&!PXHj0di^pO@+XUjPvQp#T4P z2LNB%^G7a1|L@KA2l`%Zf2N`h?$hGMFBx5Wo4+`-pn4YtUdcLf+)>`#LrV;Z1 zYkM3qK{&FM4#&CF3HfD}LyHbP=3iB{(v#{#N0G^VNP^eN%8xq^svVC!v-yq#JV=D% zQs2mGr<&IiV3NdFO}M%3)!=%e&JAam8i3^Y5Hkjwl6aAnpFp+YI#LS730sdzMkFKH z!5kwS?kpgUw-^SegRfj@S5}5x91xk<4DO4=mZ4buJWOPYJF_{1HBBj3ODNrpdzm;$ z&oh)DZ+sh$7$q!GVBf8ePTbe&X*4qf+~yMGz0OqBWsxGK4TE!T7iHqwRyuISfNhJb zXx+fpFG2%(GS)4S^wgR3tf#tJncW;k-!@?Nlkk=GQD=Mw@WvBMh>P_9t8|+y^#3PU z+iy?*&sBXb5v;W_PF2a2^xQ5`#v`>ncYkwlv`(>Spe9diskt--X3ZBga}4 zOAS7(w}paHkT)t4^rRd|TwCSz=b2NT2vP1bohmgrDB*h(RiDbCD%Sy`u^`N?3#@aB z?h#yqqeYg?YE{oiFwR>@`}KLPW)`yYZGyP4+Pjh`Qj3WImKP21C@xHG+B@>X0&@5< z`cn77T}9uMr%lJ4%3Q$tJ4N~GLiCs(^Pw4lJ@^{$E*6-N?|$m#YdlFtD3iyQBak?{}jL%PsOug|Icx`USlc4`v03MtHyafHfwh;KfA3wSI2~Wa% zi0jhif};9m#@ukjFBY9Bd)7q{-w32#Dr>E~4Z0Bdw7Ow!&`op+mWamb_H1J{Ro7*} zi_}!53qlCcT404)l$ zswvGi!(y^aPbC4WAn6&gP5^7P=3?pojJ9(|I0F@y;=9`(yojYMkqW=WuYYh1@Zd1u z+8AJ>Tc2|b@P6q3k6G5PVV94O|GoD3p#Oi{kL|sM{mT1t{FnDn{6D#eij05t8O}g^ z%cPoUy2G8u-7|u2LaU_S2e*$}IvG}Uvm->x(?DkvHs2NEO9tJEN;tOR2zOoLZDvl( zz4W&O$$=P|z5z4G<`hu01vIH)O<;*uJ7Wq`-^~0sI+Is~PAU@*&C4VL<_b$=A9I(r z0(8!=6$uI*6np}UQzWaEQrm2ZB7x=WM`Nq1%*^wWIyf9qH{)2OhAZAmZVWqG8*?B5 z4U3X~PL~{KVG=6EN{yyI9hrqIWz-XwR`t~)2i-h97l!tudrd~%`7BWa*`{gI;6u8I zHWebDI2~%O@C({lNz&j$t?xz?gn)!pWlwW^Ch=OnNPJx~G{g-8Uyxn;Hb9hv_lfu) ztKRT0aNmvBe}E)L zSpVTV#jceTSLy$^E9R%r|8b>ZIC+uJK>yeCmSzbTPlW#4X*xC%P0AlnQ@Ist9ut9! zqEdeay}XKwn9EYBd*3YRelGNCOFwx=zIyJ_YU0bq5&nM%*T2rjO?b2I=ja)zOGiRH zN;Q^_XB}qXD%uhSIlg>+S{JunA{j5j_j1%%y8pS`N!hw|KFnz$y*NT;&g)oDsHPm_ zT}%y`pJwT~U#Qa|r-fi)4r%x{IcP`Jn9%fuI||kzsv_cA_c89&wtnv1SO_O7?}X0TOa0$=G?IGM;CP7{u5!)tA|pDv5jJ5h%Aw_gHhOU5;v za$b;r1#@qgPrruk-i`&9G|hNm4Dgs(V0pU1?6GF5i6fgW^pvBSHtSdi3AN343I`0gYsWwVxM$T7jqR&{60fI0hFsswFls7qST zk4T_D8p#S6aHSbQv*nT+;Sr_NfiJ^lF)BFc4w}1}nud-5aDnQo6a%yU9C@2F0NeMA z!vMKy4Riuh|K;EQ?Zbw}=fn))vzP*XdHVn3_2SQt|MiE^|LYCa2mSx+e(2M0h#wX4 zACDpae=+p`68HbwF+2=QQSo{nXnn55#y#c#+TFV)81cnNHCD$6^Ii1KJ%( z`ZZHw-Ex7#9j2DS+LNbfZ(2P2{DZJPp2CC`rawS9^Mvt_@WZTaV@g}5^(IW;ngmJW zSs5x-0^ib>Sf)CmB@{IyNxt3E;Lz6@3w?P$SG)P{#08_fuFEixsVT@{%8l}-fneZh z2k6Yy#p#t+&Of#7=OvZlkbb_x?A}pS%0#Cm#)kzFNrYNq2U+RGCQm=23f?VaD;+fo z21uhFdNG^r(J@Efm0LLwjqw`~l2YMe-crxZwdVay`;0VtP60t19~o;$8^fIToN(GD zF_uuM`Is(~-l!C9lmjRaFj4>q?WN}ho0;Pn@vroJZfU8 zT}~xscIHm1cy}{6>rbzf-Z8|YbabpxVr0}X&{Tau^P5R+jfWD!3*4tgGJK>vXBmQV zwcunta@Z9Q1EQm2`}zO6P9cj1I)F}0v%yoqh1 zNA|ybHZ{O|rvE<)AiO<+cuFJkMEbw`<65o{`v2F{62CU|{~q#wkpsu+WJ0ySUh3Yg?Rzyi1|!g#x#LeV}3jW^HBnMnXE@Or+mmWw(L8w>zaMfylY z>q3VFx&}=omr*;z&o;e{TEIOr2WY3@@q+>_T=pa!baZ2yCEPyH%jwT8GoGo@JhX8nq4%(>4E4McPOZiASOi8uO3C|xg z1HA2n_#>7Mmj+;d#Lgm%e-<~?=hl)w_$obp`w@zu}GVu*6Wy?nYVoflL-r>fe$z_n}6@jHm3+@JcPF1 ztxzqEL>Vs&u&BH35F4i%|&523n`BI9NQgmlfN@l>; zx-*gP+9MoOH)cj%Q#k)edI0Hrxe026+x(=GqXHX|Na%LGqlg-z!G!jAAECmPm2_TY zdO7w^{%BQXb0Kju6$bL=2aVjVo(fOFH_wUiW7|Sa9Z(iMp%!2=O?KSmGQh#T+1p%> zff30=Xzoatl~Iv+8WsY&!rvfh7FC5Q;%8wZ<4G!RF=n4Kq9Rnz)=vA4SE{SAqWP zoBZs*`L7@U){nIQzxccRr~8Za|2YZpGw}#DO%<-9SemB3L3)d3e5r6spb!aqpF(w8 zOLbeiZCIPErEAl>@38K$-N{;d_Z_x7U3Xy$uzD<2VGPH)Y|G;K-)C-Ip_ZS z)d|WO_y71$n(YTxd$|;NjZS#Q7@VJt7#y<`2~4>mPtGQWMA(a&HOzcGnNO&}O7pX@ zRDl)abXt{`TwBR9)BKMLQ*f&^oH4lx*h(9x=Ks^NKm!g>r+iEv{pq6`LT}U>P^`5; z=DwENfGhhT&5@N*I6hi8p!AN%((dD!>{~IwNoLFz*d2}mBG0Ktv*EJOUOelS$&l?P zI;SCVmN>a_y0IW$aSS@51qny{xc=Jusho>CY>zHI#UrH!u-Ao^A;wKsAL~+b6Z?mU zK#Q{-u^|WTeGOP@6$V*cJ>XEX(u@d#WUz+SRRdB!QuH7vmN1^NO9v}v?_VwWD7__- zR@w|XD6^zYWT;!S(stXGhd71{7BrHke5OUE#?%{3D!Xkrq31@1gfpJ2g&S@egAfJo zp1)A{K!{feqG8=_Nhdt6nf`ce{n~c$?nM9}F#zu#>pzn-UlVX#q5nT{i9Ut?pHqa- zMgL#l-OU4W`L`5Ui@T-jQY#*FP;Sd`ZN2hku`j#0~l3bXVr`zqRpVJx9lW$ z>Zmhw>K*=q?jFQT%!y83zj|yva^THPc=wokdYKDX@>99 z)WRer_{tCDr$^9 zwPj+A5G9z{F#ZEpMGR#bMT+7g8toEHXg~tTQ`LY#M_YE}mXHuzhR}l;AkpGLhmaB| zsZ(NtCk5xX=Xh+4%RA;=bFRyG+uz>%TlrO;{e9oM%(d2>?>ojbo=d9!vw8RYuxv$r z?;eT)!eI+woW{ck87CbNczDncA8`60dct^+al*+H0)~1GqsX|LnZs8zX)_Cxy7~?+ z@$k71gCvGHl^w=Cyllxc>!@%Jk1+0kj$cYZdU8ihbwD zS%1mONz>V2tqvgEPocG~mA1LIDn*wD#2tV+7oTE-nNHhqw_+_d`n-l6y*HtScYBnL zyACRmK7g8@He5vthfPvLvS)^{Hb0yER2v?GqJ#&g?fbJr(hRqfbtj$^`f;>4;u;$` zk1UH9)!J`L+)z@2k`(yI=n(=vz%Xe3?iyu=`UH?WT#@Liz%A}w!y*dM&?;M|&90Tp zOc>l|2okH#$RZ}bbSa-ADTK&d>@(BQWMT*%$!TXfIeGVmjR(n3@*Y78!>K^hJn9Wg7X$chQOIC6Aynh^Nd!SLqni@@G2fGI*~Qs318pk&NQ- z=t)i=h7>JjiUg7z%Yu%3t4HOuv zL)~pD%K8g!-sL*!^A!Qy4{*HSo&mCWLIA+MJvFK1W zhnOVC$hWhlwF)Q?3yDFhY9zJft`=2?h9JP$wIN`y(s3q4W9H|0K z7h*PCKMTt=7?Q?AS-Jhr2;a)3nAA?J(+vV!?>P{V?y-|mLn}M{*rWTCKUDGaxG;~08=olD7PbZvC!-@Y7AN1i{Iv(WopyNTt07iHTNc!Tc zRtF~)OD_s&Nbdm8Gn!Tii4%Bl&7k7B%*!_^%~)S8lAoE`vNX7c-k^7e1Ob{A#mcPG zSWun;UeTF(uL=)a0tQ4GEiW>fn6xy~iE;=8qsyIX#HlBh0N_m#|6c+9 zzn%F1$!vf2xc@iRwK%Tmp)1$f%(l&AX*P2Ou7@j45Q@_fW_ry`)0_Tq=*9pfL+?s? z9SV8LN}w-hTxZE@;hCJuVj(pZ0En1D7;jqaUxMg2BAh5)lQ!vxT}aLySIiefpZ zQkH~HnR3YWUeXl+#cH214BJv40F5x|E=TT)FMVod6*5TK+VDnMCz)))6&l{$0;FOe zR{_>DBgiijw=YCKnmI2_B@Nik}#(38lMoDeaMndh};K02gY)<`KLzp`-x`Y3C zxTfhmHd&=NN%;*Hn%}n=31VZ#{J0zh%u1|BsqdKuNpS&0SOX`&RKYITC(0|ktt@BWZ#;1anwy( z^0UuT&zt`nbpThT05{;g7sdeYaCplY;I=pVY~AkX$^F02#^;qq0MA(pRJr&`MF1}i z{rB5bt^fbr|GfJ(75aY{_rLwVtZ!H?Lv*eqyRdJqhZlbnX?5U7qw)r%}c-?2uB0hlT?HyaiL{+lFk6=B}FZWFuk zT>u_>q|6>ZCf5|z5f(ss3Na-5gV~y8{sD^(keiQ6IV8tG+-mD85jjxA%5Vfu^Pw1Y zczjzb${`RPFz@wr+9yP4n*w7Xjf#)Xy4^9r<1_)=YvCow05cBnth{+u`u|yFb;}wU zJRW^ciTOMI|Gg`Ii^Ts|u>HBMO#GC@e_2DNPvQPk)+=mD@>5JrvKpvrQKV@7n5{7@ zt*+&eb}RGQh6T8aJQ}nPKcGewnvmP+|u)zfkF9?|$=;u#PO=oB4f(m>|xuKaM&KlRE_oe{6@CzI*K;qw#rFUiekS^>@M z;PR+(9G}ffC=Y%BBPI+XaGVj2>E$c&c}3i@G}c9A*@c}`#s-LHw>vPk{T1t1N=c}Q zb_&}x*Uc}BjYckscTXbu&Xvo+8jy-nwtQOVuE{E|9a-2sCuL^xhUZT+>Th>bu4D4@ zyN917Rcg(|q%a8T&OzOj3(_NA<22Q7#WozW? zqyxNb>?8)7s*N0;`)CjMc_Wj5TR?q@0T}6kpEYZ;o|M3s5cS zD9tvrt@-EpZMjUn?I06@SM6@FVhjNs<87Y51kkQuPxo1KP>escajXj#QQ z9`eJC)CoEtG4zqh&#DC{NhuLTL@|=OiPWaCmGO*1MWzN6slk*qhN=%B{OpP~F(Rx$ zR?Z8M3_6%~x2_y8A?+yxcyhvuHU`6-?rTmDWHX7`i34~_*LHEZaN}R@YW8o?0m$cO z2lPcb|J?MA;?@uF2_k@}L;>&h6R#@*VCj<45^Y`q`iBU<_j7;f=$$^%`hO1qyoviS zz(_J(G|pP}Ll^^2VYQ|Q=_C_Ya{&Mts;A*n03AcW^+EI$fxr(BdV0Wk5LG>${PUu7 zhIE)u9SR1}pxfs&=ODevYHNv~q^%u|MPgLIj7H8}n3(B`EtKpQ1FMIM+Z(qNHDm2# zH_hQM%Q?ubMGG)J2Ao*H;BSe5NH&=FxK`V^=m;wTrm{NoanvaOS*Z?Hl`-^mQq^Ma zkJHKjyJZZ}hXEJH0K3D0*BJv;)C8cD5qR?j{%rLBm&6s{>HqJy-P`Gguke{6ZQjp| zdeLU1e}XG3Gl?gb4)P9ZQ?0-7crgM{)IK#-91M&9qfbp=mx|7oGb^M7Q^HiQ4nF*3HW`eK8lKra%4I14 z+Kme~KtoyIFdtpmIux$i_u+~Y8IfM|fEq1bosqPH^dK6LJU5u>O~GWJjJ5#hv6ZUN zfH;;@Far&d349~mAjDLZ5DTU}i_nMZ7&+f{lGCkIA+p~_nD<1(Z<6uKHTMeQXBkk4 z|D9s%+=_+LlZpYFsUoYZ#EksUwnFNG%rLM@yda>YK_zIf{(A(OGVT-jl#@_;>mX(p zv5Ef4nFTR1+_uGRsp>J`AQ=vo^ce}LW|qet)e)yD7`QBs*w9#ik2094LJY|TY- z<0vy7n#nk+y4-#^P)i{s@(j!jIu@D|p0Zx(bjT0M2y4$QV@fYue2JgzZ{L$Nyn2zu zey)lSw1ozu;fz$f3_5Du^Loj(3;bpwJFGHs12l&VCk9qeR9253h@+VRRNA*JEoII? zN&%43^y#BF(AG?Mjw5nlT{9BYVp{^Yd1STLd&NctJWje3QYA+}zMo({LZel&fhZZg zq*0KT!3N1?nd}gzoD@wtFasMR_p+Ru*#F+W1bJ5RpM4{W?YDQ+xBvJiX$LmNG|0q- zN8i%dT<8)eR zAZ4L`pnQ}?=sSdZteL9^7ts+?XhbBt5hBLu)`vHUN;NSE2%-f6u)K8z?(yiAL-u^6 zYI4GkAulM*!fI%V^M<`Q6yJj^;)5~)!D6`^ny^e5!WJ{lZ51OY(Qyr9Mk&>v7P2x5 z9=&V$3}E^Aah{DA9WVO~KzFh7F+}7y{nT%zu`A|f>MfDK~e!a`i!P~O6ZH^%^&YGna5z)dw+fw|4tKLrMv0wmPZ zNXyI(D123BP--?Ev7J@2z`8BfqQ+IQuPW$$xZ?||wqA3mv2TUzu>=H+@BoXkM3l3x z=tJzQA>xZOJd}+wr6>S`j8i(0-;M%Pgc#b8+TQyG-r&v$7#e8}DR5viF!PJh*6h|- z5ZOnad>PK~$+QbGW*m=*LLGD-VN9E%cM%E9XWI_2p!FT)cz!-4J5V&CE#?db%&0!vwl-rLr3j)^AjjGC;wmE^-+B>WHNERqGA^{98kr`kXlLs$rswqn7EzT$| z=1^4-lB^Oh1J$rFxs-|qCe0SstSBU@L(HgE#``Z%57Mc5>no8_>vk6&(}_x@lt zu4~O&;`F5U@o-?U0r$69{|3I_bgk?5a`WTapdubS9v+r&z7d6d{`mhZ4jt3N_~dB=v+jtc5$jgq2Fncp1@o@L78-f;2NtmVo=k%tYKE!4aYXzUyGX zzzwp13aACiYRRJ-z7A+n>V#pVr_E7*4g-<)?_M@7f-#??Z+Y`uAU1VbZskT(3~95B z6_;|7D9)NhJUe&i(i0-hi|ep*AR=Ok2$Zz3Bo2+tutoq$vAM1Ht{7EYHf(%G_)Km_ z4}1=y3PYeK=_#awR$!&Cjz(dcB0tcmqYMT!{x^IZ$_R)Jo6qn9<6I}0qYln8X69cx zZ=iaMCNeBTr7SOHmCUmX{oy&j@jW>H61X1+`&9VW$wQah!`GYv$fKBQUjg_32(xe5 z)R!kHTde;O`#=A>pE8@-sU;FG@EB&8qLeEuru|G7B1QnRZE-*xvNXS))l~OAE#>GC$7_v~HavCvz?0sQuCO|CfuVzXx&LttyZ3L%!4hKjQ(w z*GK%nV^H>q(SK~(#OuZD- z1(%E~uyVb1b|Kvps4`U}RY<{@Xr$p%`^vmD#FG|r5>a%g66T70?(d`_fLv~i%%-Z zIUwL%nNhS;nG=y#M+TupQP8}%(?%Cj3XP`^CtFOgYOb6&ZMHQb#TaaKstwxI+rP`5 zf5ScBvJdJOll;O=3j$#)lE@2$B|;IJKRp{j|ho7yTM<~)43KU!UPX_^-)txUPp z{4#t*It)H}kH*{FYlc2c$VNJMIs;&`a%#!rOjZJYUaB&!0pi(e2+fq%k&B2@K$_;r zbj`_dq$A%~0^iOCSe47guvTd*iHKd_EVj2HcaK8p&}N6k>I zAa!uH<*si&^HtIo-G)(8^it@!k)vaYKT|@_@0!R*H~L5O{s# zGr#S>I{Gm8t^beF|9iRrTlD|zozjg=Elqc`FkhLnghbm^b@}*FF{q0WrbCQ?>glwQ zVy35)m@TRp4@xfH_gT8{=)htCd4hag1Z430sH&N=Tf4l+*~KTpweAa$p)$31`d;qjFGRczoDf!HY^aE+rTGuV_iyeE)JhW|G%}_dZ+)ty#c^G z@&E0j|Lvl=82Edz4d2fFpJq6^&=iTua_2Z!Uu#D7I;@!csC2vD_RvWMTe+vH3K=RV zN6AsR@bt7X5)H(kki2(XjUl#rHEHhs`NK4vDKtR!JR(%4S1d4!ypO^_;}aN-?4~MZ zmOCwz!cMsI6PWZa4~R9U1-#Q66+tCqcLxrCLP~?mF~t$HK`t4EM`H__4# zA)rPqL2P5GxfrfGWar(rU8flOXWYI-uj+`2wl^dH=<|p)`3X=yjz5ZLC&*VUaGFD? zhX2FDO=~YL`huC(Y^xnE&jieV1VMSP?=9`WGey#(b@%E&J|Be(W1KF!GANQcLI~rl zb6h`;Tgzh#vbb|-AVg7c7cw162FujyQlYl5l}yp7K>V;lGs!&8_^tcHEVu9d^{P%<^#2P*^PTj6d}{jtCG(&CrtV?ClWG6LBrDjOPV8XHdo+@ z{x7?BKdYz2K@qq`vcNWvi~E&wrY0`4D$C59H0*C5qclEA?#1Y$iw42>GNbOm6$FsX zhI!CAKS}hzDM{IY_$pU>)g-OBlO`O|zUAkW_?{A8f1;r<0N3?-Q;F8Kk^GBdW*n6J zkn^$hQy`$bbpSVQcGr*K1|7iVP1CpI*S7=unz;W*nBi-P0G={NdQlNTd29MQMJfBA znsnrdkFNBkoO%7f9Q41r_f6LS&&T~gApXn7#C428aL=vzc=` z6iqOqJM$o4OZ+5vW^G1w$V>>ovz1$|R}IK$016jdLg=SAa6h+8+)-rJi{Dn7fFFHx zqNaw?$}aEPlt=eY{a4_{y zi2~A?Q zv=A7}M5+`LR;g5r!wME|nT*j)oa)hiz=GYdP&R$F%T7y#KoQTm0EXJfj{s;+wabtL zA%+%bB?J{6IEi(eyU?SK)42%Xd_}xN1OSyYSDi6VON$(MBO-utIxQbRzVR48RUd@XgZLb67MupNW z)&L(e1k{{sG$N;aLm_+vM1*P%-)rXltf%E}cHrg3OiY$gPjJrYLxP|+vEqutP@6Ry zYJIpU9RbI<45b0Lp?Lk-u$DSVQ!&U2$i{T$iO(O+_NXy7COY4X9^+{{#_$FL%y0 z?|xiv&S@1>$9CdnQ})WxKY%~>C%*U7KmEHOjsBk_{^u{dDU5f3#lw}#lhyrW%RVVW z>zGqh&ea+Mt707(!xzkj-vBB)R8Ka{ZDCbpF@|8@oZv=^$YO#80yhZuxHnYC z0N_RO?04IrC!zoCig_XKKlbC`AP^mr2x=~oWqX@e^3^IN$Gl~wWg;$@S&P>it*EuT zf@vHAm*mZ*_g=aQi3kR`v_2g@GVM%ip2j;Oh$>+gXPicQNwW%fK}o;Ahz5){Z|1Dd zK|ybPXZ*lyYwP@}Kd<;BTF`HmR7kVY? z>C~tCw}7ny%;CN{vkODAbpMV^~=mh>X`XI z(;KG3@7xC{1P7F`Ei#{FVra_I)Herl!#x!dv4u!oK~NDR#x^G2G*cbZRSiYWo+kBe z8P?#mV|p9S6j`7}w%dw!o&eQ~9TL?JaRB^3vKhPFJ)-SqYsCQ0tI-umzn*I$#gU~B zZ7@4~%{3*bGxmA#1p~0-qxU`z_2%;RN>9HImFwy3Ka~qR@X8xBuh+^z;AePyMdPecBuP|7Gs~ zMS3!K-*pgc+{4!Zg)x=RGYW8~>xI`2X;70z6tbv5WvFtPSttOo2vl`A*iNy~_X!Qe zI0?;b35ZeK(AbymH1jvreACs_&yCtkzA==Gg&N!KYAtPq&8B?K+JhBOb5A>3A@N4k z#Z`7*o&@~npZ=-2s=S_v0|uB8mU{G{BmWRLkw49ZDYKnyuITZbE1o z{c=w!NCsIB;rj@ry;{cemNq4Wspsd|y#+YeBm}>V3b8niO;(c~KYE`)I3Q1t^A(#; z1zd_p>hp|`8UMHH5#k)s#%N1Sic%L5;mFj~XvC=%XW9$`3<_<}yP#Q$Zz5{S0-UmZ zwBte*1f2h;;KzhDB0bprY29T~7@9}=$fUF$CIZzV`6>ZvW;F5I>w2RDIGzDq#WTJD z5x`s6^8fq4_73{*-~RCb{`Yq$0aqdWJ*@n`VrD#?UV;99#r)^2&*=3375cxX|L?zg z?5fbAq+9I9tiAap2z&-=c5;^Cg`~$)jx=U zIaoT#^ue2nNo?=DQz7pSRRvqVb18&s-=S8sg#=YMQvL1SD&Mr>Ve3@y) zRe^OQK+Yh>EOu&dLZb#0OoxN`gERd^2}vq@V7<{yKf}PTGIv_~P)Me^(9Tzfr%rJ$ z^&z;{rQi_1J<&0{TaZWB7j?5{%;fk zod5FCA^`uZMW`?O6{AoS0R2D$zf;kLOYhy*?sMDf@fD!|j)C+Uz+L7)w{!pZ(f?!a z|Ek!D&R-W>N;sVuf?Jug>T@6lFVG<$7r&>DVP?=pR4J;blLft>V$?CXfCI3_TWO={ zY1qew{;bjs`5Hx#l)Jb~+QAx*??AdyN zFo2;!du~-xycca;Fs@1N2{%F~hdnKK(6Dyal)@`iH(p%X6SMr}Q7-wl^#@G6D%7%1 z&4AZAJ1KO3?S=;IhPE}Gc!lofQ@Ym+Vk-ex`UW&s{_OgF=F#m~WReJ7TG8waF^3zN zUo|2sR%WK+WGH%60ym$6=*m@SZT_>_MiPA&_DveioG0fkSbGN>lQ@?mgB1ds5A;+; zCT0{E`h?HIDkn)Ko-ZIuP~9lM&K;M2xbDO&h3MXuwn&0BKBIDbeJa${#0o!%0l_@n zlmSoI{e@b1y110Xa)^*)i9A1pP|6e}#sq?y=*y^X>k?z&_->OyP>c{T3TQ^eLKZry zz`gp2XK=j`*9+Gb&~KJg#B!i0Nz3WH#iBn zDhN1z>i|zb7E*s&`v3Z&SLpv6^Plxa_t5^W{X$q>Zh;KNI;pCX^Lw{bQ>Zu35H*@C z)G?;JzOOJ8(^%v@P#rpa$8TfNsB{3W;i#BU-MBxd(WGhG%K7v=a0Y1U-NJNd)+nKI zGwWRO)cU1U5Yr++w9y^Rl~V0%O{zda<4$j2B^%XS(wMC#_bkr}iw1Nx23Rlq+hW6d zWA;o_f!(LUiVD9O4sgGCZK=Lf_=v+&8EKI(DcD4te@sQd87~>@`nLPntzCUm9xBt6 z|9s-&Z_CbXd^KNXG7nHAhfK1{8YFWsvW)4XQbP3Q*Ew8AcID9U2Um3fN8^EKodL+T zNPw4%1^&{}|EG!o?tJ=Z6#-m4F`py?h|Z&uX4qZnXUAHED)q#$aD2_R1AXaO_1!NF z{nyQB0FSo*e+lmYETC-4?8>tbk(x`u9e?}|YRghoeern=PW;AP2f$_MSWHx)qAE6Y zFmluuQlLZWB0ril$!Hnm7Mo0Tmr9t)7+97i*6_4}tz~vA&p#!7f_Kn6{r`Oca5tX)IM1>dwf*_bi2w59-2Zd*|LBEsB`u!#jBfL7SPHL~ zE@n*k(g3)_vRsFH7+%Gb7I3eswB9hrTI`H-QO?1GH3Aj4=BGjY6So+GXrizzgIt9O zVaBG|ApnLl^9SrNCUyOFHI<-40KSNna%7fw?n8Ir=ZCO@c3cd859 zz@nxa*4pBFT<(R1(L+?S|J1JBPc1>_HBM-S?Tt8!vO2?7Uk4^dI(>30R3N$SGUW@{ zY&q!rD>TsW%8#hz2V;dqv{Js(q8ir*L2_?jmRmz{xLDZz1T9A$324BW-(k!64NSozNuiL&p5^NgE18W?7wAb^P;vjP zY!l|M?F3Kf@S6ME=`<>z})?o;jfZ9~C06PygRR|A8CLe>(bqR)HKGN%KKBRCr7b zo0(xdp0#Tq1v*42W+F<(0E)XUn4sRwC)aZF>pb|_^uh}+pqz=~*IJ0?Tcn2fUos`>*|5q`` z`Oj-5?PF#FICvKH^YxI&ex?aPE7W=EC1%~T*07e45EF)9wIs=Z=;D)pH^?DTV|^ye zYOKOm{1oVqsgl(GL7+u3P4+}f8t5w47Zq^akr@319e_;j!;9(w99blD8X3_t~5o~x>nI)*JDT})Pj7;j-Tljjd%!Iy;o z`wZZ>{};da7W7|k_WeJE{%_;{OB;yl(8U&h%oRi-qDoIbGwEHwN0w1zr(O(DJt^eG zVZxyl86;_gB1(=xFb2dH5reAh|6~dM0R(0yN(i|uG3}3%UJ0XF2+A|8hvf2cX)L$m zd*Slhbz$Yf?IM8ZxT)A8&=>NgBa*g|sov#9IE=gyYtrv(3 z+<$aD7pvdrDwmX|8RDA%o*}+Pymk-tz^^faARiq0*r|sQ&>`i5H%(StfuA{j^`ACx zR&TI0e(B+X5_x=ZdR+mn^XT$6DaFbhGw^q zz{GvjTie{hg0%qet&+-+iq2ya&Aac6Jj5Dzx}vSrAxxW`UL z`NqO*IV!PwKE{vc-k1)aWk`m{`Z5TWKG1MTgrqGMF*6@mI9=B1a>%pG&>qYIJT`rmBvrQdQ`96eqcxR?{} z#q;7@P9Wy%N;BTmB;#3=AFj>$W){x+YDpE= zv-2@>Us~;@xnj>FXYN02skYlHGE`~1n%!sY-EIJ`d%<+aAN!y^YlAFEWL*$T+k4~h z$ml9JVCoecR+Tiam)ueXQae=4&?JyrwM!93&d#SMsYTV=udyiOep{h~1H;vC`^j$y zs<>f)yu7;J1n%Fq3xD{rANzWpe{MQqa2dloKGAUS&Ek2_@SQ(i#4a>ATB(zr1Lo`z zy}Lx(s*>U?9%yOP8Ql+6m4!CcC9gQXrf`Om^XRVty50X(0OXJTiSOQm{&)Jnw;#KQ zGOmC*>=6;bdKqv3s8&~1G29I(CyCBJ9Pa%!4c4N;L@MHkiYP_LH~}gODlmqQlVFId zjuUjKMn@xQgF8+`1ZG^afy&Y=0)TU~eyQab&$|Areg@0O`0()W{pUaJ{n@I>-Td5I z>fJFwpOkD){?&DnNgOm*S(r3LXi^??vV_jRRMnwf&0I^K3wDe&-=u0fYq;8dUH;DTqnPK z|0^?&mOU{S)32X!rgIYB+1TPAmq~#yO#xF_5Zbzc`rT3hMRhmPMA^OiLaH#iuvzK` z)LqDSjxWGjVI-EiXROb1@)4eWFU-bpcMC>(04sG_8#a+lwqVqy;gWRX_oZp^nfnoEPH#{4J3EiL%IpnJ zdg3k!0|mw`V3qVo5iuuBCa_}37E}?6ndJ~F`1zQ^|MLZ{At^9F6cclRoU+7cm^x5N zK*z`s4l}cJTg>ycx&l^sh1>Or)z7T?hdb*mmLHCVTpjpjdFp~D3!fUML2z7To7h|}bA zpHj)lU0X~C+$Kl_Ce+wCOfk%e80V>{)UfRyxudOO-({rJA4$U)DHc#oIb-p?AT)U1 zjr#|2iq6>clU%tKgKfyr3MY*CVp0~7F&W;GHV=)Ec3*9xvIv9tsceY42w z($#83sWgOr)^ji3?j>aLHZOX1l>=@mfYH`mUc6{Xi_O#nd}z|0{js~Ub5-cev?N?ivABI0ag?z^ZHJ%yvdAr%UEYeA4Oc=7@O(1&9Rem(l^qn~4N?_|~_+ zK5+j@B7nm!?-Pjtw&zTb0g$Z-AP25f#$EMzb%r+A83?FO^cg;LD&x{Hzr}RMvmn;= z&*4hda4YNoF7)G%{fX~xbO4*%#~=OZ0;cgS-2WYU!4z*{lBsMu4WuQYm2g|3i#r1h zEsuQ;)p4Skj*}Tl)6>bmp+KnQLe*gamybFC<6;YRK*nM}dS(;|7ndEHe8snB0JvrU zKd%~K65!~(5h)|-smY@hQsh+3(Ebb3e9}em0~J_-a*cL%Kgo-g`_t(Ew_Id;Ljmzl z|NqKwdjB%^)`~6$z`~qz*bGzRh<7 z*_I?glR!}Tbtu%wze(Cq6e%h|pD72Ed}1U8Esf;@P1ZX1FsIxor#Tj$5&8oKG-nX= zzj&oA(bDp6ymb6o!fQY)5RWJZj@F$`azE4P2h#_LG;% z6gZ||1}QoQ;#Ai>N&VzfJ&mf9baejjIA7)0jn-*JE52U@pvM*^pNj}!oK6_0yMW_c zpnpgIFW=rp0ME67|G~fXOMmb${nGt4&;Iv29!|T(_Y2YguUh|a5Bu2s=lBBDtEZRd zEm@Rnkd(oo4!HMWfzZ6d>frcpd(Kt;?J)=uR9YnZd?HFxZ6 zgG**$#INM4;*5thjfxJnaEnvmz$EE)D`0rC`5$QDnRJ3nS+n%bqQh1r)K5i)^e(3t?zrL-ve)5@HTXJCit5MkBNf zPBhL*?cO_oBh_euv~HG5CzK>zzZmUi-W2ZA|NGLpy-&u~?yS6(oTrIP zV_L*iglSj+-<$1+N)8=DCa5wmVG$$ZWQ(>UyM4XTDSAa9+gHwN;R zXEF^F35eI?bSFS;OFhRSPbHa7P4U4nh5)Md`OeRwyW;haXupy_-ykA&=PZirTmq{b zAU>z?Xi34%hNzhD@xSv-#ykTj3!n|0GD$cj1bf_e44sS=39&`ETf{R{JN&UqZEiD+ zybSWwSDEJU4Ha#%{Z5W;bPn$IH89sMh+C?-iRY$=K3oZ-}oBdPXim#!zA z0Rhq}RL6%0eR$|AXJ0(ebpTh_;iDPA)wOfCaJeu8*l!VWX{p{qsJJvw<;A$wM>J!P zhW;O3&%N_&zx{!~_=|twFaF}~*wd{w{tMIpuO7f-%zwtX(v7U(3B{aNYr63zSHQb0 zxR4FD*z)nCEenlii}|nP|ERzc**Tf&YtGdo;}4MtUs0^7;Sv#z5V%yvWF?t3wcMGhHM^NHUApF>kb2N3DT7#y44X7xqpYxWCn2lLSHfZkK6ya zCDP#5eFwbyn%5b!kNl194A+-sAx+0{nJmf+1XH9n(`0l80;ft^xr##1b}VT=u}b5- zdwM+dU*>rCp%mmF{o{Y+_^)=f2KcLAg8mQ3ekdB&5%+%@E@`|3Y11gpX?amRM14LT zUd(Nq)E9k>6I7u-r*KEpK?jt_5I}~r=oGEN8GG%?)8HUHcF}v)jbO-Y>xg>;^`c{d zUdaIP*yl9@keTp|kV|9)VqX1PFIwgVl2Utz<|{PP398(=h@MLSzq*m$LjT9*q~hC8 zx_A2jXM4NR0*IF{+E<7E<;$`Cx&1MRF>1X#x|R69d7$9n_uKopZr}a%o6cKT-mIbN z%rP}a>qZM?FIyj^xsK0JlV9JpT7d_zXlOIab@ow(F`LZ9-eL#n)L92LqtfRXurGz8 zLi0!;Lm{dr7{Wy`K$8&or-hQgqe`bk>vVW_$)q|Vlj!3A$NWLUW(Ct)1WgmJnQ}lF z&D9T5ae@^UuwB~YeMy-m`GukZilkzFHlHPos6tnI41gr;5<~6-yWaD8Fjk;@|6t~f zr^D!$d3tf&C>%c`nASFb9{<~3jOA%x4AVe&oLhn*eFzw#$YkjK*i`utGlMF^d0!MT zw@oq&F9*z2<8)z?@TRc(#G=Ho#X?XcF%L-VtU79Em!|PiFiLBx*6=8V;32*j3rPTF z6@ZuqL}|1|p+YQ<94aIu5=j&uQ0%#vX0>$BI>tYC<4Qp7SIDN7TKC)I^ss#V=4$tT zq~hP|wQt;aPHG=*RYbOeY~%2=HT>Cl_-v%>YsY}ikJ~o_2suutk59`1zJ>4qetV&9 zd{g!Ofxq~RerEl?-~2CK>Zv{x`u`)%f7bWAT7Se=rAVkQ>VekKdBmE}#XWj)8G4F= zCQTUXD}V2?NUBC>r?UlHZvhr=%oYf25=-43WP_nw?2#-g*sO5E+kez45?d(EB!D0k z$l+%|i?FR6n<$7hYYc%91atR~{9t1k6|u}}p(56bgdSHrjqx^KW|zRU8+x}r??b`0 zLKBBq6|NV**x>#J@JIO}S6*TgGm z-6Mu;{p0$<-~D^P_SgUOn>&>GPe(BCG5wd#Ik1NK?G{XlW(dW^pjpjSmu2x4)!j_z zIbbFO_z2Mf5w&GmylYmP&l3hoP$?n{#~91UMHG-xTD_}_!|8PT=11SW*p>9uMRHvq zVzIZ&#r}7G%YWRk5fpa6g6yBk6livH;o+lZRL_4FgQ_i-UdKw>93%5psA(K z1T%6n#1u0Uw@NxFFp_92TE6EctdvTO^am4?Pqx$RMM(?lyom!Y?y+X=P&;fzlx z@5Pv2P$Z55jj+Z!{n;&L8&bh?@0qPVk9teAcs&Vcy@=9^_Y%B$D`(D`-aPI8eT&zk z=%mY2z%b1C#Ps^Xtivo~D&tdiSYJFuh`@-XiQ;(dAQkfrPt*ok%W8yQmXIOrugbok ze(p)S{MQm}eQcB|6b|&ycm>u#i%A+S-(3#9l(vTz|Ud_^p5^NiwNMV zOV8_x0QQ~-0BsRA;#yj1Mq?)xR}(U}7~Y16IxS?=_)BNzmPE5ObhCbG2)uCU?R(bh zpR@iSf&OnX9EwnW@OS>+F8Y6dP*3Fkn=MC{_q*Uyed56c1k5ZOH+p}oBfLqWV--aK zm5>Xls!F8(j*hoh;FWn$<{p~-m8X(A`x=Jc3o`#b_ z#u&{|YPu`TQAAdB(}J>Ui*keL74HZ=fp_}YO*(oq{r}z#wV6!Z)EZxGjK8!K@~gU? z?nSac_q<>E>`edVZtnlp<=|1=|5>s`Q@$!Yn0_)PZ7fD~Obe4e&T>T|nuwb52(CHx zQbL3Lks@PgjVaK&!XSasX4IPoaPMirF21ku;aa~aRH!GghR#cC5@JZmAQt_Kc$J9n zn@BM>r4j_xa2v`Aad5F?0#PpRRnQc%PV+@$A~L|m0qE@+)I5|Ssv@Qs`RPxnA)lwB zel_WH(gKhxVc63O-Er6uR2T09}KbDpif+y^SC1E*$Y8Q zDMRJ`ZVihY6_njiAx2LV%W!xd!No)}Q)%%Y!zVgEX26z|nTS%Bsjq0?cD>&jkDVF@ z0>SbJ5b?hWBCP}_F@Gw_faf*Tkj}4^h;0Zo3FJa^e+lbh-<%f;%oad>bOfr1e`^+K z1&Pyxh*&b#a|*Kbwcr*~|M?7{9-n1iF+b| z%lXDHNBnj=I8Tu`J z=n%8SogkAxx=MzT=$K<4^=>YK9Uh-(Gy#RJRB^LM{{l9)D z9Ny<W80N39>b7hl;q0yhNVrWw5wO;M(A9G%t3BV9$VVQklWU@y@t&|CFUIeyk z&vvlBt03JYp#KZ-!w>$>-~F}!!mpQW-2ZVCp0m&WH(QR5YIAJ;>UJG~PfJ|K7a_nQ zXr`w%h`<{$2bS_Q_+m-0Yr6lBjS~zUyKlwWmq{+?z?c! zENw5>_j&05H=mTa2|_%o<=$_f^8nx(!hYrDZGS#v=pT1T9k(<8<3{Def^bCY@9-9H zIwTbADALS!3gPOWr$I?GiCkc<&aL+VMe-&BXijsX=|m%GZC{UW0_)z9YbFJjqb>vx zbBt3HWA!~C0tCGhoF&EVD^>jYCW@ab&g^r%g4{U=V#W}tK*$I@v~Yf56t4W~raM5K zvGFd*ezsSXLT)fsLoy~G*f;i#?Dn5YLZT=oZ5*F}*O6VbKHVNapKT)W${ z0!rZjt`X4G6Z-C??5x+aJc2;Xmf7shf&g>ao;A;Uv|iqV%r|)xCX|sjv|1cX#`g>k^R0XpzSZ z3EsdA;PmkDz7Ia)99fZU+h2FS@eQ4V>y2;c)H|CMoIU4FzY&<3SvY?5z7|Z>-%nr_ zNh?lFWFM-t7_5#U&wExVy_1MYOOjR%lABH3&SG~HKld*5|1$L7f8OE#wrI?TXWg(zAsb%Nlbq<$r^uxF8 zNB{U`YDx%R!`|w1TsB^K48W?Yeb)%6$N!`-v+x3%`GammNo0f`3-Op4AgKw8_C49I zoY6kr(?Upp(hj2Ya&3RD6WN;+;PP(xPXB+uT^Ino6aQZaE%-dS|M@Ge)Rgj|cPP9_ za{>KNuO4Uk*AiM{$xi+DO3FFWt(ZLjAXvn%FxiO`z#UG)2$pUTGf8)|LsNyAFekt= zfdce-Lm;k@m3%z!5G($Sa$PsUZW%Q5Yb7uZtw=qO=EJ&ho@quj)1iKNE;Y8{Rs z4PZpN7u}h$EUU1s*JZtzq_&ejB@q=&!n_8-W!pB#XR1=pHruaMxRBay3Yr}dHmF;h6fImZ&i7JnNqMJ<&vUo@TOoiI@xpEkE-MP^WiI zs5mtS5+>2n7+aX~qsRlJ(r|GNm_5x0+Ln9@J| z(asn^M85YQ{wp^^`OiiFzmEQ2DBGTH{(~KB_)P)Uf5aG4*(5YoxCXQ;_PS4W%SNxe`%Nhi!RBJ zodL8f{jn(jTb=>DqyKlD28Z{#j@KXE@ev|`>!(w?trfmV7ME9iCQDh+I6o)_vqDNP zAnR~Zub6$;n7tckG3hGsAP=2yg&Tkcp9=aHk-z_c{hfdM*Zni{+}!^Q(EpC-kJ))m zV@B2C)_d;%ve2eu0D#4)7{p>r?D+2Mrx;_H(H24#rhv(5%5cZGer);2|7f?cIsMpo zKK`R0?jHHWhlh_pdNDT5S5T4v#-IF&^X>h`#sFBkEF!JBBD^ z3JscL%ko~m3OHGZ$q&UCeG*?@87TkRg5H;)4!r zr#pQ@$?G#=dgjzlq3Qtu2!{jI`4E8$TKIDxj!a8;4?A=VWT9Ij7D1<>*8+&beUO?{ zB>*YYA?*gcDVc2pZtl9OyJT)x!U8n(e~0`+O9j9xi8G1o{1&Oq{X z@r+z+nT`q?);kO5(QpR+#(lKAIz+5MgIWBW5?}=72fFT6f^;N}SRlnGLM0MNGaM9E zOuDHeys=XW5uwH&Rc4e37${gjB8pil$ErGA{(&)82;gR=bw|WAzVHPGam@fOJY+Wv z;KJgnV_d0bHm~)@k^oNMy5cT+i{1Z)+ryCe+w*SePie<~&!7KWzvs{Yt^ zw*&hBGnoJEU$Cd~;bHZz$Ef^a9jd3{>!+Sh7(-RZX~b$7L;Xm3aSJ_L%p8xgFyhBh z0$eOO`<^P0F#xe|7XQFWoe?9CO+^;Iv}w7&Itx6}U6#TV8&CqV=orN)j{fJGk2%)Q zBzKv3kq54<9eWI$9jo=juFkXRXq5Rb3Hn1bGT4vbHrQJ1p8{Ngldk!_zgX9YEfeLe z{LJs-cq}p7ax?%??zZB=?g8wT*_4;T;Q+rQ=$Tv{&* zQr&YK_VJY$lg(DTEX#9d12innPa#c$hzOh!?~&a)N&A@#lG8qK)-BL~hxetBoOVfK zHKGXb$@In689ERo1W06Gjj@{)#9LOj;}-SmhWk$ce;)uG7ITk={$CpXziU-}!G)DC z$^GBU1nS{p6mU|&uRb4Ecscfdzy3r0Qx77{kX@`7I++fu(@|a5y;BFrdsuKL?^Un9 z>f%<@jZJPF)_<>RAd+m=YY#s>g z{KN`Th{_Dfmf(bYw@L4ySwjCjiYq=8v=L?~#fT&cPKe ztRzCh*G1@Y)@)v-wzcq=hOCAdKri;+gN7$cbHWfC4WY%~kj0Y;wMP(MrKL`wM|Y0_J{kT0Ma_TC=>O-d$8Jf6)6ml?VEHkiu`cOQ9Xg|Og~9x@SREO% zuBkPQ%wMlbI0631v3DBRdLOXGM9QnL?PROuS)_?t?$P2cVjw6TTApt84h>n7y(AJ2 zF!yuDTcYLf6Y)2$VCxndT$7AR^RMy1q+4Km{#k7!(h#m|p{&>|TzSD=@Fm9pYb?G> z&FvBLpg^Btyf?%R?}Gk3hW^>T^6(ZL;EOSdk4JuQ=s;d!25|cr;PB%~nDQO{f7T%Z zZvDFP3=k3y(Bzo;&b?_G*v72Xl1{Gawb|zpDG9Bup;@J&Fg}gU&w6w=$ck!iMd&SI zP>)!Qq=S!W4gKGEu{;j?uiHQP6g}d<-t#^PT?xSq=c+Ch`BvGX0nP`hpv||Cc|Hr*r?WPZWK5psf!WH`jTt!V+wz z1=S!YeObz~4Vxg`-f^SW=Q%R)uHF)FcRgm>$_GIpdl(F4dx>-nGBJaQSdtFNFjCW4 zRqK!g9w<$MhVP%-1*NzktXDvn`A<2S%LZInA=+5vg*8k>I7|SLtZ;woNoWt-LrvjC z3t2AuN-7_`9QFM$KM38PwbLSrTM(dh5^M11x~dFUt}B0!OzX^`ezc_^v1^r*jWB%v zZ5_wlMF11HuOdmqe@aTdw|pcs!oejNu@#1cXFferHd5vgIc?AxL}3Nw_<0ixoC@J~ zK-l^@PpVSz1&o%weaTQGrfHPhYmwwalC~`7ab)IR7x6fsf(4l9=)a%JK<}c@;;?X6 z!@oNN!0FP~uqy)a82}&E&)ibm-}4W0BUB% zx3x3?b-EagW+Ij}b7b(NRPJN4AEbQfL^ESXruBTdy3LSYp{E450e?~GIoIsEVPFwkZW3Arx zBMvNl^?f8TeTGB?I#z|(&^Z!_G&z*%3dKWov%wz8kJrqNiMJpH{7(^SCQy;Y2)2T( zTx>WyPpy`ya03MDc7F{#~x_ig@oJ9Z|7ohL`^&dL=|AK}MdD|5M z;Js#h!rp%G?RWm!zxg}=?B86UY|l^sKWOM*(){P_G}@v6?_KiqdI8{SXjLe53_YDx zp{j1C#(p(Y%vW#1Bs~4gkj=vQKk<9a>YyZIG^1>p(Lu>qopJI$O$HimVs337MJ#LW z9AysLrMpRV&Dwg6J##ZBN@*ZMnzwR1ZK=Z?w1=eD|iG97@tB|D(q-#>ioTkqT7GhL^T!h^1f0Q43FfFk6w zEHs9{}K1!&a%5E_rHB0{_vGqZVhk5 zwSPk@=TAT*M9^J8$H{-}B7leQ{1e-L;hGW9>BFa#)2e>nyV4o)^kv2XQGhAJ#UY1t zDIctW!8D{oI7bG;ph2q)iAgdt&uoU{@-ACN3FV3Gq4??c8yr-t2q>8#hbm4dSHeC6 z{r{e#{hj{*6%7C`ZXx%e|1a8rfA+RNcR7x}0q(y7cOI}$ESZG*L~rLSvAvm%wfXrR z;;i+;CcwBcrZ*sFVg$?-7lb!XXz?@rRG{&{lRY*xIdzIa93oc$ZC8PoyNya_2-Aqw z*N2&M%)VKyE4&;Pgg4A&@%h{%gMW?1^w)s?v2sA_UQmtO7^96!R7Nv0qHj@{m2tWd z&DwVEZrql6`HVfac7CNBlz}srZ+H7ySFX%jc=c3%x}tqnSdSed9=D?)dC!$oa|2i; zb9lHK91wsps`)BLD{O$_#*U5Iy@PjH&Lr-J4Q>wZck1q6LOij%vqqQvi1eA{C zND8(x-KU}hXWY4wOASzcHb60C@NV1u%0Pb_yQNWGe2H8aZY~SwOzY{H^95N60nMr| zQ|WxV(aSUqcemOD%B&9CIWFe}V!PIH?_0weQhc@t?=Fa+W_b8?jQ%k~fJ0RM^8jW) zaUOuY;YfgY^#2*U*-s||@UF*L!7!kRncHgs8sVSGA_R?T3ZsD9@-Z>_%mR(gqKtZy z2waA8YkRmNhXsMn*~Afp$9S#`W{V*AV5zrH>rvY|5LBKJnQkY_Js_gf5T7y z#H)<~HqYvYKkfpAng5hAfT}Vt?YTw~73QavD?Dw7xl%rc&A+RKe2}1V`A={pOU^3T zCZ8iODRrkx@5jT-0auaIBh>CG^naWa!r$rtU*rJbZ4m#zINKk2e(t~G1-bvX6aV|d z6YHjGs7lt2QF=1MKW$Vh~rnfMz*&PHz|2{-5g zDBgpI&rb~xST&kgbv@7(nMmZE{|evBRQZh1l?k)Yh?tB@Zr+p;U=$^d#uHBjze@ww z7=3~7oBSw*Mgjdp;}$Py!O59a47O1X=6&X=8G2V+^BTDUKc*8tc6X3&(9UfL($JZ@YT2hca=cl7_cd)n(Ffc-D}ng{>~HvhJyj%rY| z0O-ING>aDtJ8y1q60R4^4&}2~^JNb@EyU(ih4*U9QQLe(moJAGg8uJW!tdbzAEEzy zclO=VHqTH`(hc-lClh2@mk=v}(hpl?>vkXSktqA% zqusXi!DDPg$6}IAFBFP`;cX8QH%b7`G;bT!LN?L5S-r21Bh?1BMkFX0VD7g}ilQaQ zpIp_uC9$jht86?2E)vOlGHE_N0=Ujq%Y|;O(pzOeVy^>Efq_&@VxAVQ-LNS;7B4c~ zD^RotR|W|+m`U#V6V*03jf3(E4`?cy9|2Sc{4F?(Rw^Ltpl^2_0Q8y&-~h6}vQnJJ z^RB+1qX^);fAt67{cFD>FMK-^0lY^6KjZCj^#9H6Xa3YL{LG*Fg*$MuGy4B0Hvc(4 z_rCq@vkU)0cDVnt;{Nw*`E&}!05HY?fRis@QVzdjX;nu`MCrPh8;lj1!?Q-zR!!80B54o7q;I=U{Eq%V>)CbGwp}}S?iK+ENn6ak9`2PE=}B8`)Fofc9crhU%dOZhhrWEy zge?&LRrO$-$lubnBJF07;RT_8&PV^?m;UeD*N`K7 zpG#o?%X0AU_K5%9ZCP)F5pT~wjr3_Bo>8z+jxpFm_h*3@Nq>&YwD1!$%iBX_) zGST*_prmA0BQ1#?ZY~`vf>)oX?%s^?4cv}C0Ag(?kVJCCyw~wq&dLU3CLgTQb^S1-Kvt=~sSn5#AdT`dpKWKON8jLQp)MKF)h{-j!y$9Fz{bI`iUEjM zl|bxyPXF)tO#KrxY(cw^)1-=qKj0G8XUu?D!=7d@y2j8`cIdW6PV?{ECosbeLO6h^ z0E$vj0b*ze>nDmCm&K%D_{YA`o8w?#mb7mPD&!G9Ya9SXh zlI*bpIdnHh*a1t!XsM+OFI(R-x>jwcqGoH}E+qD}uM*HT-RzYaUVOrx-^pk<^HyQgx6O_;3mdzoBKF77 z{}K0p*$D%P5kkj^X&K#|Gnf$$xhqN#-0XDzcv=@Sr_FC(V+Qc*Th-~qr}qQ>w}0Y4 z+CPD}pUCr!0cb_XC-VAQAwvcK`ar`i8nIde6Q}32_?gTR ztetu?r#FVc3jt;>T}~BLV#k?AZ_i|PEyzFCD&UpO)`xtLR- zQ2dfM`cL+K`#8*sjmbPUiTY~hyduAO&HX-1{zJ#-{Qh7TWQ!5K$9aClmqv zk-zfG-~B7U{F=!Ay9nUTbz|3Vzx{vtKdt~J$MpY0^#6e7|2*bDBA3zsyiT{=|C%qJ zTXNTg(lY>{Ixu96aXJBz0mabaLFh5|^lioM9&$?{X#zsDXqG;TcmMp@dPg$_NxT86ycwg+$wlmh-N`5PVta7W zs?xKKKhKjEpnZDgb6$ma9o}O@M_&P9f4lhYr`G|E80|%OZe{Tj}ag z+y|6tMq0|IIqfqsW!z}X9Gf?H4K*3QXWILhTCTC;@Gc3{GxCAMU6zF%hU`p(pOmKI zQYPb~V5F>RH1h@hH^yA_8fH55{4#ne=%1G^*{ulRfcwAu*n5fp%d#BpEI!fS1EW;O z5K`3#;VWh;ba;)?MF1bZ^PO#Rbj=9p+yCsp_*$#7e)4B{iCdxnhbQwDEbG28!2Fjn zU#nT+JCLBtHhz;V97R&}+5Nt3d(50bO`#bn#4Pndz0c-j=p^7j-=NGzdrC$8fA4mV+sbAjd|6kVaF)PKJBL2(gZu|59v-d7BwsqTC*!ae( z^Z&m55G2wFBq$9eBcU`Bu89z~(y|*!mblj#;@}53NG9$eA)yG#4bzE@;}}FEpfs#> zB1~ctDT#zggoq-N*a*iaL0F=d2y954Y8a$WD zr=Vz$4{bFt72BD~7l!&bEPRPe|4IR7b{p!HnG}=@9b_!eFKrYXVj_|R-Bl*O4GpX5 zvU@UXC)}9P|I+`-Sbm4lQG7S_x_E4^u2%MAMK?7 zpEmzlnPOKn|2gUUy*95mx&MWNIq>kHLG=R<%mW5C&L0s(h15)ZNJcU8mzxMU6ki|T z5Pv3ccUE*axvoW=wEEG{aU$aW1QOJL>k+s?U^x?-1(AdQ1Jez z5Zk$TP-%d_2ALD*QYtS{<)0_1YF4qC7P& z0njab00;X23=?42)LuN*O|E@a8Alau?a!1~i}PpE62?4vrA5ETyET6BW@ ze}V1KxGV?|nL+=R(KtRn$~f{c5Kx)^L(hCcUpq~D02m(L{np=>|D1~e*3US%dpf>U?8SaDt3icMc6!_)76-U zU09BzTVMp`zpy!xnicIn6miaEx;t_MuNW2&2_hyQ7=xej>&JD_|BrD3XE^%~w?zLh zApXB%+n>6`Y;ylskoN6`a$%=j9lY+gRm$w6b( zX!|s?ws%v`hMSa?2+Tx~QR{SxBnC0SDA8hj1?e^9BveA7Ejgm&4iAzap?~9&&PL3s zLu?qI_5H)t(oYu@dIC~$w~IiiR8^$KVOdo%3>cW0F%0Cnn&DkNxDH_9cszr!d4}KZ zF#_tZlU*W!laKa#MF58Wcka~Bh3vn3dHL@v7|$R7dvbj5kN-p3LH{p*KSBS$iTMxF zN%Nm2-+%8cE^zHiZ2l4Uazzz+jIJn%5^z!(O9gh1N^1Q|hOe0-qTJ}}4jD~rWg z?8mORqG-ZHOK?DJ9@-LRDCFiUEjYNJ;r{X*69S69j9TA1048ZyAi8UyzRlip&LeQ! z{x=rBK^%#7l#XPnJJkSqURe4VPdiua$C#d^{k_f!>KP&dW(CZF{@?PlJWB+yzPqUq ziH_qaA}~A6aNMc50g(>O&D<5Js6Q3YHNVgpl^SOagvMubifv))_Kc!ju={FHChK$Y znr$olFrKkXWSu8D}Iw*D%8 z#!ymf(XU+^6h?B(F)$~I#OVL3MbqgxzB5sp>0;zg`IjF0gpO_L%V2~Tf&iW)v=`9- zK}rYx{{t9jASTaX`*UXDdVj=!x<2=Rf9-oN_upbZFS=@0x&N!HGS)sL%!|V)HBR>z zw&4BV?rq^d#SXq|1;Q-IK>b$2K^1mrFWmoF^j-Ez>9>!>`XeKrlezDOsFq}8Cx!M?lqlv?^NFtQN&ETa7NV-ir4lg(rqGF(!shc62L|>? zpJ+K~s6$k95&@(tVhwyx28)hRpgFLBOEPb3)ltNKF3fSlSHy@p127Cc3}ANW9{|IH zW?QHtYyGOe9}u{87{JmqZXMb;!T=U2%;j06+3Gzx*RV^UD{YBe&K8 zEV=+4B7ptlM)dzWzW2xf;eYbq{XevW{{Ld;Kjmsa!}@=CSmpjx&;73p6o6qs8ah~m zGkTu3B&N#Fm-KXqQ?d6Fr#lYJ#8*%@m6s*9<${psFWdKpn3;q`T(KpcE-hNlDwIhA z?p)W=CUYMNXCO^!TE9DIf48gi5^hR0p-LFkq2N{AWN2Oqh+^pV;@Ab@tyRgWz4>Fj zW(?+{?{UX&v3u)!wpic;{lDtKIlsl;i^P^I8AZj9NbYsn4jM_KZ#F!c?xJdp!Wy5} zvd_YyJ06GIMJ8prb*tE!3wS%nb-dsf@`<)Cn)irXd@z@Cy>xtI<*rI*8At7fT33Vq z&l$$S|CKNN;^h7pnEo&ReB$3yA7^}goWA^?`#--yJp~Li=1Z+l=0-qO1h7yo|Mq|T z&cLSEF@FCa{iD0LpzE{&#&HZ{oKxcfVrF27+i{~9f*L8)R{+r(S83h@)PABFMHmLZ zS#jFT)+PvGRq=B@#mW=me`Z0c857PeCD=JJoH2)JsEt7D-hfNi9I;bmcJ zTfcOFF1|y+^hHkV(bh(RdSW1(lG7fFk<=1jueFHCRHC>7NPaD+g@(z@@JIQ=jq!2H?n;Yz< znh)ih9Lim@`tO_oCvQim$4XUZ5HnGe5K1c}#629!OLdB7q>JUERIQMd1jPz4nWAwu zfd-TK1^K{_2Y&e}$fyAxZLIaBSG}_5MwqQ3+~)^i@W2G(hj*32UzZ)z0W5%Yv+98# zcAc3|^Z*twu9Y6ZS{kr!?NgWR3pW)3{K)_Hi}RD$^XmW(5x@n2*ks%^{&#y=4`6*Rq+d3g7Lfl)S&kVlEAjCMMMrOS-z z(Hy6{!I%(zW7p1dp;v=OJdXhr;n=5QWma$i#M-?{M2*ISOT^GA*CK`v1$u2|i>t%n z*pRgPt%&GK!@D6eabmQ%f-sh?c$W0V_?^#8dos>#3h zivS$|b^mL}&4M-MmK|uvpQy3DvB|NNC-*-EUD_^nOD}7AZX6{xN1nP!Tjx=ZT79c5 zp~mq2&`KY!Zben#mH*_x6eFaxo!+E~0G*dh@Vl8}A+aDqtA0ICu{%^xpnFo+# zy9aPv5x`5KThBWj{TKB=y9)0owE^rWrjDoPxR1yI_An-k(TzIG<2rIHtN{Qb9rPdD zkVP*swVXbL(ozE0NXdB1ks^$>nM3`1uC9rj;e@g}DEhUN5J(|MRA7Q`4XNj3$Kb%gO)K-!Fa5o8o}g zivwM_RIHKghH_dz0L`?40T|4IPCb;hsSLu`EeI&N`KU@ZM&KQTWR-Mjeha?I3-1E+ zYa9DNUZq)}!t}#w&_-{1(Cz4&VOpM>h{bXz_eZu~H>#v+K_l{q@^!v>r+?|`8_rF207n$?a$RzN<9mMWAAHY`{euoxIEVg! zEAyYtmfIHne+|?dhULn$Uiz?Rtu;3X5WoX5Fbp8bC_-vp{T{|EN~$A~j#}rh6+)ur z0}VNvuiYq!ypXlzNnDE^KopBNzhP!^0mMry=1kNjaR?S&f>2O?iYg@BT>cdY}UYe)f(aSPD$oZsTq88Cu&sgbly zLfz_BMmZ>Gw-9NsR&FAIdXhtbvN2_`t>|p9AF)3UV=zb#4UJpAAd};7ZmzkBsJek@ z{DlpzV?=%!8$e0v2O>mJ8XrfRzVwTr|J_5%s6Qo`{tzU|MP*H1gR z|BI)9X@$Q+Q|NAR2R(qdF&4Q0w{HVPNFz@c8zqu)3__k}l(#Q98pghT125;bs+u`) zvnkGNJ~$RlPGqYK!;g)KYKInb0TFv#6-}QNOXf6GsGdl(Q)s?aPXFQxg65}+$kwXX{@UCasGvEv-6HaT ze9u)%07$bQRgf41-_3a_R0ZzY*KDK^{(K-1iAp<-pvX78?m%(utG0lnxi`hKIprFvE~*>;xR2>i~9b7|$C9a9t6=2A%opB7h(H zsV^)=uD_%X;1B^kWjtH_@AmkfzxFfp^6bUTe>Tt6!^a;la{n zc)||@4`vM%Ej$$>(^Er~%rlL|T-3y4-zLV&6#lFp8HZ_ey)y16+l{nCnwDUjrbCx8 z(0oo)Ahg9KJ0Kp8UGP>{&&i*i76F8%28zomii;_TFrc}0qq$~-gOgj+beWx0)%;k=13BwK z+d8e|38eu>oCf2*#2Bx_H5nw6!-ru zq3c=P|I1DP=@j=L8}D;@UEll!b@xZP(iqs^DVQ&<`Mq%dH!bFEhk(nws4>Tbb)Hr& z4l%gHOMTLo5>s4=KpFQMHuptVT0fP&hDccZRGr2RXNPHPOP~)1Kv);209Oib zAGQASWl?N}s}3~56{dbu-q9WVQauMOLY(dU z%uK}yezt60&kmAs{}+nRh4X#D$u$7G&x1dzrkn&q#2!dyfmmL*gmE=tur9y@80P!q zIzk?3WmQ?!0nF*T7d&+O->7qjVY&Fk%B7zwFAOf^wp2HT$Vf!vqmTs^it|dcOLSy}3{l`&9g6kDYg_eTe!cYt@d6#dzCGidt?TMNfCK%1xp7hipfyb0jWsci zKQXP7hPpO=+PrmZ1;1!wY7Osm?^U!!0Q-$}-ByR;oN$8*@%cfZ<8PEx$>fky5jm|f z1l>(dC}6kMI9$|xVwz#-yP*HwW0~(yG{OB(KEm>^&L{pqk^6tyOn;&g(8EW!RMB3q z7Jv8A^R0e+egCiD2AFacV~U|90aP!>v?ypjxmb6a28lYSWs*@k8%b^Fb^n(cPl}oy zC5VdEBf8o#!T?m-yU@ZVX-ke4^dIf0+G8f!U2O5<$(~ucmaujbI_Upzeyn-3UU#K9 zY=64Sb%XoAv#z~>`_ETMkYBgjx$>@dSxcb4prvNO&bQPwQ=#~5veSeIIb~Lp3rRhu z%0;Y=;1}L)%?c-9L0HGRF_4;13@|VeJBV%g-{iH*>@REY>6AR6cNJQ^McUcvi3jfd zF$wSgnqm2S*YshIXfMMyGSJaJFPFlVTHH7_38vJJK@hr4xwO-xW@Yh22QYm6H8a5O24MgzY~r&5fv+e6upYowL;yeh z_rLJNfBy@M)8ig=0E;4k!v*Mq@gns99DnM^e&$d8ShN9N+WcqD`hRV1u5$n1y;}}0 zo1EE}wlOo}ADC%iX7-R^6@sdYh^WZ;{?Y7N#TL^bSYcrIml#5YEo5EP$zB^hxC~_T z%wbAKzGn>}iD6J`nQv(n$V|~E=zL>U6Tt@nMTW*?i$D_r3LTg>D-5wl1Qn7&_{kv} z15bqSQ|oYyw+hu>yb0m-#dGGRbHyIOf&M?krE~IU%OZe~OQFPgRTfV>C^esrVD?jm z?TAQu7*wf%cMZh@I0!m+ny`$t%vDE;{w%KF%kM`k!kDOhuCliOkWx(p#ze~2a7aZ{ zOOu}#TBZx!&2A9}y%yh}7AXJo@y~w#3-v*kAN)$TKUb@JXGTC(1h9OUl^(z~MF5+S z*YeL9Pr3W^jNkts{?YU9uul-Mrwz~&_DbG|)sGxWldyb|WbLVR&JE~Sl_j(a;qhCi zuwgzC2+(2##62TbCw5_z6caS>vIqj0BDIwan(J7+5-Tq=hal*sZZ%ytcgFlci-Z3E zK@MIzZ5_5hS1NZ`XV@zD|D4A=kNf|GYh<1KkL~w)#n1iX1IaE~z*d8x65H*I%Qk=~ zzj}OYxp5lKBv71u@fy18OcVcvO$y4B%w7U`bq4U{FU^-`>HTlMVNeTf!2EvcE1*kT zM30O%AJ2XkqrCA++d*~qTxNMA({$$Co~5M$Bm5H(nOSmc7R?acpV2hG04Pdp z=isN4j|h>XaxV?ji6=#qD1^DQh_)RTI%)TJ6F}p&a$6YPAOiNvM1@3~#6U)`Cy;r+ z127B^!|?7M!{h+m!`z^i6=p3DV21v^a2UXKMF6L%&6kP*e)#YGLMKBhQ}Na506t`6 zkGqQh-57uJzy66;^ndO8xq48(x&Wix}fn!RdK}E#D!qS4;kVouVjGHOF3SL!R8>rX=Nqc7Bo{}XX zB9(0l0y(fRjjw7h8BB_#`scM9r&f*Lxm#JtrF@N9CAPIX9L<3@v<}|A4q)e@=|KOV zYhd@U!kjZ=I0K;5JRzwnH)roWkeNa&5_+e)DX03zHr_#d8N5r8+TzmMpz3h>djf2+ zuxq-FRq;twhy84>KTD1;$a9Ie*vU`_mbe|1tKU zXR!Ubfcw8T<+pnPi$*}T2XO19_TqaE!+j+NJNl24k&26#&Qsd}UJd4fAMDwHfM)NF z8H{q;?LxT;WqLMCf=SLtUj>08x-UQpTcEf@MNk}pD0>y@Du&4Xn~I8H_6b_Kq@}g# zlt*p*HL{P;y8`(=Bv!g5kf$PFo2&Ox=Dmf%Cr)2iUDVDc{?nU5|L4`}E9d^>sRzl8 z)kJS_q@3+V%N{^D;jGiS&-(;Y$@Z+eTmZ1-7cdh;WF$@QAlwm$XWzH;{MwWI%FdG% zW%SVlv)8MeSLlW_&@#J3%Y)Sp!OG=1*(vj7Mm4UB*AN;?5ene)sm4od)I$gBC7bZp zWa&ME+(|SxGY3@SKMH1Tp$O)-tN_$AeJ3BJn?3;$lGfw#PzN&CAR<)`(Vr4odPFJ~ z;(KI7y72(xfpRGz3>FF90ss>d7cvnu(2*YygM&L_=zHbANt9k|KY#)3wu`27uNwCB7nC9Sbq19 z{@s-cut5KR9`m0y^nZBw(Uvr4Wx}51{^vrM3{ZeMgBL9Um`G$)(eZK2Sr?)-Z*0fm zYnosa&3CdmBLRedz$6A_X|m|7X5*wtvt$xD`oNTo?A2=6}tDDWVuw zHpf9jqbnO>URu`g35GQzy>|M6mXR)L2j{7vPUb=H{$Jce{PbQ3-1g_pn(tn1f9Tb4|DR;~PwU+O-O%!hFQL^Cy_fAe&~}a5 zbV(Mla@|(@{_dq(Sc_^!yca}ULL|f()bnN#I<5G4TPCip_B@#a9YP4~xe9fn`C9#c zFjWjJey_lGzkM~%AyaYCeXHA7dTU}tO^gy7tSV{0tP?LHNpQc|0J>GE9|^SIG~*nB zW;p8F0&y5c#&%PoFmV=&@L)3oq%{2}cj%nVb*()ea(zMY3&0O)ClyGO8c$V3b(C>5 zn+cE@xbGyuRb3>XF;n3)Mm03L>w0P*(qPkI1z9l#zVpf!wdx`f=)2xvGH+%Qg}{~rDO3nsey`Y)a?2?JzvhT`T*K@#@EY=m6+aJD>yozo)Tu zG~w=B>=f5w{u$})>PMvT&uLLB(bG-Je=GQBD^;$DzC!wX&T4GAMEGR%Rx8q#TY8KC z-r`l_eE|>q%fPae(@! z3gHuJ9T8v%7pQ^!&mnouC_0Tj`rU523DW7x%d@tpLn#e1Ja4NLg4S6CEr3@0x2L) z!Gj+vy3T{|!Q385Z0C0l5U7O^)LEvgB0)NE)(?Zq*?~Yb`Y%et7{W7@4bRa?FAx!X z8Zko%u!0zDM1JsqVK6Cx0u1J%Df8b%$X9_bCGS3qSF57p$Z&s{?p< zKqBkckG{g<_Pc-d?{;l~C8qz?&42cz|Fj*;vBv!$hRv-9^TjO}R6^vVfGzXamSho; zaLs9_J6rc+w@RwLp)HP{i0Q+)rBvEa0!Rv1x$Fm13y5?5K_EDh7pK#AlL9scMHNsA z3T9TQpFs;DAbZbwdTb7~tu0=QircaNk5=Rx18i^CUcQ8cb@f=_W8CPvSzZdXR_^@) z2Vwf(+Ll~2QY%z8B%zh6^QZSpJ6J7SrscJC*Ng&i?2uZI!HaX65TT?U7Mi!4Smz;) z{`0>onP*1X0}x{xX|*Sfb}~22uRRoDCor-R%zGK-e?ETY=YO$#)a%*)+;rTx5zsS& zVAmcM{cm6K`^SY&0A1P!SZM}m_bVke{{=EnV55L|#ICkra4@&SezgE951VBCilnDs z(9}?uh)C0~8AN^nce|l-yk?XvM0MY@$O;4(VW>UTs2NfMZ;19tQ%e{QeP|0P4i={5 zN`emY(z+gF2_8OK^&R824t@sPpZi+)p40Z{6!(9>h2`XqlLueq{y*)ySm6Gzp9OHk zwLovZ)@;TCV4;4+G%`h(J|na`l&F#Kbn*<^!rBo9stdo6tZ~e|eir|<*RcE+%D=lW za*}F=C(W5=d5^A)KHYN&_qt$9Ik*Z+8x&{^|;KD!>)v-zi zO%n|!0C))7pMfz9JPdyM3=c@aZbiG37r@*IXipx%O~L?nk3~B33yJ`K=qG>fhko+s zw${H_r309|03C?R;DR0@I`-0qw;^-h(w(0oY(Q1=DA;Y8k@N1yG?j>{w_F+Ria{3&P-fCowy{;E zx&uU$!bF4~7wnosJLQs+B^Y~puyQLvRGP^ISuVoV5JRVN1;;qXyskU1HM)EAxTOx@ zp#R^^Z zMB`XQbFue@I3B3&3ke`*8XUvkg@~AQXTO6rQ&MJhbYoF$?z|`X{&aoHfA#>bYx{E* z?*CaU!2TYuzJ?*D%1{~oyiF9rs6 zgznT;-RPOHKvzev518E{SpL=JCATP~X+TTYRW)ZJe+=KxX58ZV`FYHyT+^}mRqE!n z#q@DDF8#IBAPQDex0(4aGJgcC@`E%9IN8!tYm^-EF-IJV&;@G=1lAMzz}^*aS8xAp zn)!|SaN0~0$REUbIy$NtOv{%OG%O1 zC<;}R{dx~TMQI2hRALNF1RfY^TFL{J+~YkufQOGxm~KB)7{G23z}n;RdJo`sB7h(K ziGTX^RrLjR0EY-*XC-@|@xN;$bpW?A|H99`!U%$^Dk7-d($vBWyD78;8E{gX3INQ=ySlIzaJ^W818Ec5)KEyX z&=%lMo&c{vHR)MC`wqPkmL}pXV8iMnJU(aN_Qt{1&>R3()y706S5&s~~B^_|=oQIf?$auYOGsK$o@w zbjo4~&tK2_MG<;Z_VXH4h6$cl+!-x6N{VjMyOE`rSuBWx)K+eg6C0!q8J)MAxWeJfrMJWp_mJ2*Kv;F8F!>n{uxu#3!we;p#OgW<63C@o3{O- zn{fZne7qOt{_l97SNyW(N7GiX-Ch|t$=98|-Gzo|-*C;ws)`Z$nOX?c^gz{2gr*0X zVpX%_Vk_;4^_Po%7q^}|?=9V+-;ZZslhVpnm5@pr-bLvjzhkP~R1*IY!Hg*tF+w^b z6z2g6;D{L{ih;oc9+)xk!_ayj1LvFthW$E#rE;{>0X%%>H_d>#dkh2E7#lr+MUb&O z9;}D}meK#$uLC$l0Q&kt&+q=P{@3Xhaz*nWW;zr7-$3hzkH2P-`;TGRxRe*T|GB;z z_rDfLfv>noT2w?VV@199tJz*w%WN;%yv*s%T=ai^jitqZy0WP3D5^zn7Dq2gY*(?+ zH$hm-xwqanN@kt-W~8E`BGC@d^Ig~sdLpL!rW&?IqFuOf=R>F`>Vcyha16R59RQt@ z0vzc79bGk|6GI;KsGTiq6c(KsWnyufxwJZ$HUW2Th@MF6pDMM5xA|#=1PgN^c3gg{ z$`%D`k@BQyhru46mu&5JM&t(TXVbz1Sps}-KO!=CF>OXltyMb?OduXOPeazgP2!&$VVStb5;E8 z=Rg11&wpN$?y!5DXaj6twUc6G?hb@T&j<04q&M|bZK=vym=l&LS5^JFcpQp?t7aD_ z^Fu{O+lrL>XpiopT;0#b;UFCxC0qdv-KU5t&ZWoErl5LYh){K_?j%7E$7GQ2ZVnTn zT10H2UB`Gc<0@F{o3{O-SHt~(YUJ+{l=Wf>le&l(<5?Pyy0R%P{!D2aQBeIKdEsFh zy9|ArbPM~ee>Pw6b+33``k*GAjND?;T=UAWu<(@Lb|;eby0fTVN(;yO;O;Gn-n2p8-bup@R@(5x}0JV7{H+t^ZFQwFhub^Bo~{SW-Y>O-I+@Ek7Wl(~<`RO+^Ip6LJ?L4TYI@UWC&gz$sgNP#Y0NphWw?aabN2sWdT+ zWDypS{Bsucf95wT<CPg0e3< zHGdEZlxgGx+wr=s9B!ycHK@rtmy>M_m>8P1zGFK3`;s<1kasa#B^L4J*`+X72sJ(j z*aV#^8=5Qv{@#!MLu1(&~MLDxqtiEUDvgh$tJ0j9qOqIp{)1p=5AHx?_>cp*w|StDiYpHeP2- zwJVYo#|a4$tlE|_?E3*@?#H`@iSqgx)pq`HduX3VW<@GmK_Q}KE=T-8O#E&jbg=$p z{_fWSEcO5;Y_y%Zz|3;ArCq{?C7M-ul0?6WxCvz=t{JtKg^O zYke=@^lrEBW2Uo8qDb5>hBU zcnIAhlPgyrHJTTgW^kXI=i~?I z(#R!uWnUkPS#Q))GG#kXs2~kNn43iBLI!9DjcQFLu%C07eNhOT96B)ehHCPWw1aP5 zn+m4pWmdWWM4jyqbvlGi@Ml&H9_8Sh8xK$3-D}}>5dUW-DNa#tqccFOr}u0;H& zyDsz*g?H<`E(N<#%=@k+N6iRi{ zDUraeeN;ws;U|!zIHH-!BcenYhGFbgx*}qJrAoqp1aV11E)XeWnayZWKf8Mnv8EAL zksgaMghe01t1F`(>oxFd4$!anTx^!+qqmL2oME@^Z$aMDi`jei0wpp;9 zKi&=WzJKeVJkS^Kny2-ArNMkt{q$9RGS&n5Yk%gO<2t{I`On(e?*Faji<}f9ETDU; zYu{?l>u^tw@Hb`^F^tBjS70UqL5SJ0c9a5D9l)A2l{4ABK}ZUPr^fjUcEf&M|lm_iYJl_(@HF2v>w#Y42 zWkCEC;2nbS-#}yYTC6Tx#ZIlG(4Swl-$x>5fQX2P2bEDI)KxAZCIWN}V>D2d4k4 z)$hk2z5nX;F!IqSzxmTI{wpH-=#x)A{o)s&WzvA~YM|8u{Vx{OB}vnPfU z$OeV230=~piV~BkGFtqJDgo96EWiaA$w?cN)~^OXguoTxiDTIubXw|tE`QuObAdU= zYZ@0JhZhuV?c^#w8CD{+YM=w3j!+ zbW12-#P-e+8og>fUE@3#wE3rSw`9tMK9ecgzVjVPql1u=>n@o0I$GP!c16X5R2 zxkJaxcduq9B8GT%98Gq+WioiwZaBvK@&5wM99{i%1aboDC_=F4Av5=M*FFZ5=bZ7R zb242;FVX?5)TK=a@JwLGx|J?0C0C+G~rc1XTA7va}!=;`R z4ASN_?YvEPE@rxifY`yeAFcgZxOT9!Cr{<7sKSF^&6b-Z;4bO6{=f zE)!k(ZBfA5c2-gm?THFNZZ*^rk4cvbsKfj97^jNuGwSVgc9Dy=E*z@2m%JAA#J8UW zR+Kn5YQdU*tWeTIWH)3jc`-(f0Rsah7j$lNr{ve0H)hj5VR9zNMee(8GepV z1g`liXg;5r=t~g`P?QV4gG6T{gWWA5ChpjF4Gnt_NA!#x?CJ-t0i&G|?c|wUWE2_C zr~FS%eri5y9aRL-LApD*{I}-*w=&`UP>^Rg0=oB2b_M<4I;Nbh2~Z`~@o^m2SYLsH z=rk3$Soc_!W-|vJ`foQf)n+CxwW~VMl*4>gtEww!9hO0U&|IW1ckt zKeHub5lnuS2oN3{ago4HLF#zFKavJ?VGEN=qma~|3&<^8@X+n+L} z7k&TFs!h-J{lC(u)+|Y0aUl)d^pTgc2kR;5GOYh5FZanWU~LM`xe6Y!I88R*n1m^J z^#-;!ScS=Lb|MoP181qNqaOmibst3d2zu1u;J7D)`y?kgn!txY%vj?ZqK)4eI8M1q zH=sxcmSie%_0n?)hDbT$eMfTjK$m~e(u$mMKnhXSQAl(gWwJ){z+~Az7?c(hq!-tp zGx7j7!T|DN_w)ds8V0a#1hlgUaP3JCBKm><{r`Kmx%&Kh0P`e(kKQ_m@H z`ENem{O4NM|Ce$9b=mj7B+abQ{|)EwD5`Aqa z=S~tR59=tIOhe}6mYh|GW}26sb~H2(wIo19(KO>3BcS;R{x%YMk_PW5kkn4gD5#E3 z>)iuHJ;vU87#Fys-uC=<(End*I|Z=*70<-JdE>My^UF!8MN~T8&PHbqoDR-~&$xiJ z)YjAm`;t4#3}isceSLvXrPpB9c7%r&ew`QU7Q0Ro8-uqBD%zjtbRxA&(L;J0BTJE7 zrWF3#`|#M|7C#1~3aNKOn3E5zm5;Uu`d4Dz3-v7f`!C}D+vCn1|GoNsni0^y_PhR_ z+b^_B7OeaN`}Eg+{&P5EO;}jQFKYv=H3QO-F=YIJ5ukdw%}cLnxRE;sYm{%1`Q%Q! zTF>Yq1t{tzH|Vz*?%H3h4$$S`&8Dox^b5k?ti~3q6R+Zuj8mEN{~^-0s%xaK)#D=B+cRr(IJN8LzGn>cCp=+qS9u@fb*`Itq60Vpj+Z(qoS6Ovjha9t;4C_MntIk0=0# zCKKT7j#Lrx#4E?+njFv)!E44?_{)}8=U06$D@+S8- zF4hClh}5e?oX2>Z<17UEslEDIVT1t};tGz91gl9;{`iC`|{=BuKATPor(Pn~dX z;8!N9NY%^)`XBy9&h|05C3^tzG8kzQB@PX#k%dS!veIZ6*mZx*Y;YA;j>nT)=axEv zU7N~|9suv_3Un{v$s&Mr(}4f8zx)3_=P~-FbO0Ze2;f7b|L3qCz*WqDHiCaIy!aos z!l;(H|LZ4ATj!_T|MCdYKn4gRs^h4p-m<@p;-@c^9(JyNi1S&CxP;5ei6Ydup!t6G zL!RBr)~86IUzJ46CYrQGTsr)uet?X48>mVPByhiMr_*|mA(xB}!3nfZN-j?RT&M*D zw5{&4()s8Id>~cvedqv=)5|N^a;J$S35*BW*RCq}zR>g$Z+_P10wm=KV9Ee5xx;0L zN_b~cX!&331?Kc{BGUc*-3`_z=PH>&bKNmzS8>UqGAeTP+>9^ zFQXPgzk&YOEpH$6zs&civnc<;_Wsph`W1REDE}G8$sT}>>xcmKCd=1V(6)d7k9_ON z1Iyk^WT8yEqzy1Wj`@%w#dI4+f7=fO0bHiJlk;-fu^BfOv8PHi-qFs}*bIlTNOVgW4wj& zaM>6C2BCktl>5K*8fsYFnUA*|5?g(fXG ze&ut}2tSI{TnvCjC?bMoZ-$uYkO&V=jGLjuTIEUFucqVf$BJlSN~@E;DKVc#v%wr;a0eo3eAJc zxID+rg%AS~sio|epYQzYO#}dyc_1(bE~MAhu_q9C_~@hY(@)pZfN3cZ_}ynddH>}v z_78i7G~hq~xBu~#=aa6_kEI-7?AY$GV}X}xEcCANj_FhRfL8YTC-dp}2H&Rj0RG!Q z_pOUp|H@^=`-6WUKH6#wY+3(bu!;7GYm;N;{8zxN&`OFZNIjdKRa9-oK)@lT0pVC+}*tu?b*5x^#29F z_bv0E`3fF+r)ZQ|3ZpfxB~bixeyyYez)N>Dy{{qq;>}T8V^QUn9pNYoanA_Q$a^V# zpIFuHF}1&wA^0WerIq&eqIDlO>oJH}E85&d0JxMO&B|5P+SM+1AP@}$#z#x4x5kGK z151(u`^tYG7x6$>5~!HpS=M7< zR+0WLlZfD&oCqwGU2E6UQ?|=vt9?_0_f6Ul!1m`u<^I1}51U)yL+5=`Z~J4_Qws(9 z9QkGUB-B%cWb{{{7Si$kiETd?6zrz2T*Dc;DvQIauhg9$p@Y0ZowhDI4u1$s1)jan z0{sMm!!s8pDw*s8vfmHt98D1w%PLUSkyJbclGIKVJPf8;raT$w%F#Eseje7>rM)_U zhm(1{z`Nh{$qYPv$uNMk#gp_`*fFw(zSY0GMYU?? zI%>tyBFQZ@=2iu^B1A;oJE8~j!R*_mC>aFi4z~$Wq1bOL)X}&AtK>=(=olZ^cv&65 zae8^#um0rXFtZHp{!%P4dOMF0FPT)A+e2x9hN?p5K8i?Ow{Uf@xFI5-RPd_N_8T&n znk=LoD$F{{%LqFjN=8xA|BIJtY!0FcR7QAjJ3U6gdv~C)=MYsH1&B{U)iVIVDWtB? z_V_ruIch=wPqF@2`Tlef<$peY{h$BpE4`5K*$C*i=-JBHgZ^I%q3Krfwyg;$YJf;T za=xI0|2|EiuI6v~y5{@eW}hl0F7GtEOz)*;-6+zd8X!;mYq*>*CZbuVH5&s_Yvxfi z)4~Mnv)i~WqeOjH(SNk;59?~6SpRz|xUtEq9+lfMmJe8GRs4tT&+;9g(f9uv-+A>1 zzv{yNMu#3};9b)Oi#@ERyLO(PUVb_QQAryU$VG736<3JX90DbwYPrxZY2Tq0?buMt z3P46dJH3LyY1Jq0sNkmqtvQcMs^Sbz>jC7HH0Oq{)aL&Em(WNyA%R&=>u5+5h2EJN zG4Fy+z-JtZx90olJb;ZJK;{8FM;O5V+I?mO#FwJ{7=}OpxBu}q>HjC!(fiH=_%LCX zIsN~uZ%YqhJ%Alc$8=IZC;G3auSKlW|2yA*V7br&Gr*L*enZ-&c*Rm%gDD)MYwsCU zS_18SC`HYKjHN7Oj{fbK@+;1(ab}f#Rr4KIvn>!V*pX4+4$>xq2gBX&MEjO-38R^P zl3KmpkCNvYy9(u-T_^`l=~bQxHgAc^U5ZSA*(^EQX+gsA+NDn6y&!-*{M-^G z0)c(2ik~!#xxLW;;*{01q5r3>5YO)WzfjZ+XHbat^Z=eA3iyiSqmNI&{d3X($tmY4 z2?1HXY~=)~w)|eL*%;>K#YD^lFeaz#2|~qL3M5S) zU~6l}O4S_39LNWu284jUbEzthud1g@Eo-34+znh|8i3{J^@g#au0+RPbqrq&_amQ| zLH{>I|Mi8@|3&Wqey8kQI$n_be~dH0FKyVg>YHCfFG~Ca_D!&Y-~`Ji*9lEkusb2d z2cDYQtTN(0;g6{nAWW*nV8#SdMe+MLy`GYX?e;dwuK7)_X1?Lxcps$*&}IrmY=2y{ z;B5fbw6zhnxMO>{GO9B=2{ek`(Mbhh>U77ntpk{d0O)yj01LazQ^Ekw5doal1GsY$ z0KJe7;LVEw4*Gu`-}Zw)esZGiwEn*g{Xabm&h`B#lE=pl?*H;*qGimOHp?n6qnD8- zvj;h>m9^fKg-5@{L9};qZD4#mgGwGogWhT{Skn#6o$*wod(G@&G1i>c%06qP5CCEpC)se1EzU<$pfjm3K`p1#sNX z@!9YA6ZB-%?%X!O#_gBe08s&fT{Qz{bL`<7){V}9HRFMS7Q~I1dg|RcQ|f3jBJ1fL zU8V>{h7(Z<=yv#S68n^8nM#z1604bM5m?jnK&S&m;C^O6e>!BU$y7_rD`r32@y+Pb zB={i4-Xqpw`oDa~p8L-iz2%eKe`Y?o|1V#t_W0=sQk(DltzQ0^pow566THB1lLSj( zjz+gN*IjdGcE_=;YXk#jc5mB5wIv3-BWK%JiNw-&C<=I?YU3HFgv{y6AOJK-s4+vq zOdu=TIl37k8z7BmF@p&mMTHb3g``6I{OrLt#wMOmf0o>XM zXl;D||NOHzpH;6!2k?$R6tLxFt^3tC8i(+0KltNY=zmXnyA1u`nhK}Pe>Ne%jpAgL z`(L4^+8#jjLUb`WRK*hF;MNd!CQRxjg+>ctH)>9MpIW=cCZvh^kP$mjJs{ASm;$gp zby`jv;Y@UNiffu?lPl6(d2UdYYLH<`LQxL(KJ?_6YOho#r-25E9px;2gL~ZV^Yw0Q z+eu^FY228NjmEaKvC+7(Z5wT4+fEubYRrB2`M$sF+W+7)J9E#OgB=dXhCCyGK(?(< z!ujn~4qJLn*nDNVocEAl5n1ZCz2AO+Rvdofo&AvjAhd(R=N7qwr?Kem2oJy&T|67j zR`KeJU}JuwF#Ae$-_hBKSvo%H{~J3AUTP>mp>r>P*IGo<0!8AV1i>}q37cW88UCaz z4fQpIR^U*qj|r@~2iW)YAnXn^ZCmvpsQ5n!eMsd|zt5y33axq+3WNrBqf#tjpxfOG zkY@N4v}{8)Rg7nrQZA!7&~Y@g5y3_`&_acq>j)feVH5>p1x7WxN5(GKUC0@m>{d$&LAs< z$0gJY|Cn!dcP8*TKCP4aqHyshAO?lJ^-$9Do9KfF_3KD$3lDz58t~Wk`)c92+E4!1 z<>yD`K6R>l)2i7veKDy`cl1jMg8J_R_U@ltb&b1_s^+k|8$sAE&MUG3_gFIJmX^sW~gB?7Pd*yYJxpJjP?dnYNn0M0UnkS zv@XuezwngWVpFo>XwSJObALHr%x%qtD|$-c4O+-OG~VXOxN}3u>os zkruA}t~*nDIL((eZ=1dvF;1()QEyIi!0mi3EEsfva_bqPRhA(6u=#o|lo&yLftQ4j zWF*Ei34jSU8C>|T!P~vu+`#&h@kKReX@9dZIGYBero^gVNH zKRbG;4Db_iqqTbK6AHkJ{ry-ZD4qj?FEG7;<=p{Smy=MkQDkY`iFZaP z@3Q%yyV}R;5iwQCa^|$xC#D`s&B4MDtHs1tGBG~ve7+|yTz!Ll;eSsZQ}4&6mzEju zs+Fv0e_(*dQd=alTpy&Svn20ldPM25sPE~=EWuqasfvVDl(0WbEnPghXUj{L!aMEw zxvJf$l z+R_1fI+rN9z0zmlpNI>%(CDp4I=o;vz#(=r&NHYZJk+XPs{yO4FlJ)NzvJ~(nmZRTAdaG}}?n{ZCD$SJnjf4y2v+VVHvY`!?ly|&yI zDSH5FbJ0r5!p*b?Uh4e?>z7Yf~G`&Mw!rA1*{1 zUYpaOvG1IlIk1FSKnbQgSk!b)}h9wEiiNxB?* zGqk--AdEyQX7SJ17Moi+h1Ya{*h6m<#w=#RJYKe7-v5a{v>T9iy&nl zwu|QmS{r}nUef)oc$=^kDG9DOH-mTQgCG=MoG)Ow$9{;~boZm$9hnu=4=*Qne%Qr6 zV%9;w(An)vNxuO7#7)rCN(IPO<1LM=uD)jOD}_n*<`WeTcTG_b)^qgYq# zmKk2opk8J8T?``Af0^V<2ON0-*gofxXj)LW8Yba*pu87cW7${^S#KmBlxb}7R^%OS{lqX#Q{7^zRGDa6 zN9RO}mg$aLNlcVtWrU!kID zW}1H=oseM;FT1C8{Z?6^4q6SbA>6EZ9b?4>Vw^rK&qpMf`)d0Aa;82Y{HE*ctNmCeaY;HR+BQ%F0|!qI3JkaH4uF z6$=XuKS1e}T?c=#?RZVU_XA#be!utg-hdb#1&6svye@6aLEA6yMcpNPDo=P2!;F-Q zZ1N~5cI=26C=&@oX#VdBA2!93hnz(H`fm5JDk8+U$-lO|1@Q1v1qK+?bWn@0jy-Gt zRLteb6%Vi*3}bx4qzg_ssQ6ZnF8?@?#hl7q9$tE)NDA>(SYY~%Mmk^!Sx5}zj){RR z#b84L-*&6R)1CS{Xm4pM0I_jk$w(4esp2*13FzIw?_ZwOi9+HXasIsaXNZ{H-7N6! zM*6W!@TFf+*%e$l5B72e`<-_@Tus`!!)EYukw^D6&&|r8Wj9NSFn+OJv!>Q4+P+mP zNAN=$Bb`LT4Z2|6kN?B3b41MHhXT0Fr}TXNci7lJIUOY^;yh!|>CRc7fOJccjj@M2 zK6*gpmyIvOysK+V5kOoDTk{#X+izDc3HML(sF0msT>sv{8Bw{CjB_ z9x!M9S+vTf=<3xKvn^FKq0JTn@iDZweIzJhz4a36Ql&{6nM;m*K8{>AI)omRLsAl7 z?<>e$nKHJ^TY6I>ScGIw6D=!Qxx}rBO#hhU0i~=R!XV_^`!F{6YY$0-d8`fb7QF*O z^hdFCA{$FSe3FmflaY&c{ffU~aOg@K95|4fKp zwa*@d9Ld$L@XA+$sL;w!krX!Fi$iZ0rtgMT`AD}v6d%HU!u?Uk*cnM@D@9=HJ1rof zlneZ0vxs+Kyp354J4h`6BD9;N0(?qj3Lii9lG`j=oY;hX zs4Pbdqxa&!RQX5Ufrvp*uYq@tA)xly6zomV(H`d|NM9}cfJ=NU-FRt{CQE5Q85KWo zX%9U}Bw z#-wOlF}J38a#?CO*yBc3a&6Y*M(3>Oi;H#B;Se3%>1DxMcf-OLCGvY=6ZX}2Njxh# zm=$C6x=e=_>~U~)*uXSCgcb?9CGI=T+o>r8TWF@gxhdJ7RE7lE5EtmMKUC+Z5&fGc**3fIvD+E8lcGKs#RF=tW-V(GJHUP9 zMhu|B#1IzWVCd_aR0@1D9^XM`D}*0W_KmZE*>%7Mi<(@5U0lcyGKZ&QQMZP4p)cu} z{je0eTnvmf-ti>RGWev*zeEp_lMK6IQW%yrZ~Kcbmg z2_TLFYmCm0W$!9d(!!7JH7=H?nKS%Lz?1PNcSo{;7e*I5(gEZMU`>4Q30OkFm%RBx z*Bt;sG#8}8{k#q)61n9ET7_o8a=`_WI=sWjAAgNA!Pm4WU|m@g!x{3CYB%tNnQlS> z;e}Mye* z;sn4a8X9JJwRToHHX zYpK~NL!6!OQYeU=wv2GfGrGtq0R9lD?*V36BfT)Ji#A8L?Nt@)2bZ~4YS0hidV((M zDgs&NmXxI88S+CWDpNubl)+rpFMXZOBD> z>H8~(Of z){8kvMDT$N3Zkeoh;hE^pTJXo9JA_eo5x>D}x0ud@xJ$ZTL9DaPA2hZ$%q;N5L{5rWBXVkDs zx9MdVJi0KVf)d@KRJK+>QjaglMxL^}EO~t!`5lTty}$03wCVo#B&VrSmpYA$fFaN2 zv$~G8J$~)niG_+Gdli`w}{txqP2&;qIWT{6NU3;p6JF%zIKCB64 zuk~zTvd^0dg@(9@@t%g2W*+YhY5}aj@{YLONf&bm$)8!{DI#_DptP*Q=!fubtZ1%4 zLuiL6pc#E-Cm<77HD)*uX|d+|{gh-JEb;R#>oEcK6U8~u!0$^=7$zj*JzIyc z(p>_+z_0wO`4r%Z)3_;m9~%x_ygB}mDF^R(5bu6=2e_!ys1cQw-G{k?5 z7=Qf9NSycf@xPq;NV9_YbC181lWiLgysLmCmLk!Xf3%nWY@78<-=IfCPy5_DC%wjt z&Hhi=>IGOs(`S8-Elc9S^Dq4USgIt1KekLp+RrHZRcoU&Zd!7xE>VO#-foCV0}6-V ztyf?e(gWfQ8zj8+9MAh%HKZEiaHPxN{hBEj0*5I3-52FHxDiWo!w52|N&G@Pqrz+u z)aFE!mNg!*#0_Sy7MLI1F%eDFYSUv5BC={lV~V556-Omz3E0ImFZhcBC_~SFEatW9 z&KO=xGhg^-biX|k4{7(`#Yh7-Oabj2P+ilsLNZ`CZgId|vn`Z5hBL677m2|!x1q+S zsu@%r)$*N@9i;^39>r+F^Y z!fAZqL#&@Ka5T_%#9Pk8Y$6u>PmZLI27xO$+k(r?k;g9|XxQ4{WJ;a%E(0^+I$aBtN?e~{L7rf2`|6&3SOki4iq*)#SZESt6 z267M&s~5gNTRq_Uf*{Zf5WXb~PobtxbYpBpEMyeDEjs_&_?4x`1PW*?cVrU7F=W#3M6{PU81OZTAw&JJ?bjQdxw zp9&Vb0vhn<380vWVm!8jPBwUF!Ivc5Hqe{Rv=r27MvFe^Vy@{>-&!-{u>QtfpTd7j zMOjb3)F{vxFVnl>kqK1&g#4wR)vf!0`_f)ofzFegJiOTW$V!~Jh;R(SRMHwYr=PO+ zpKE-Q6;JSZvj&A&YmKB#l4o4n!F(R>vB&Di?0qM=tfBkvCqx4>sr@cYD1_L?#eV`# z{`eqp^3M#lC&4IOx#mTg2A;J9ndtAF7x1k3k7eBgXIqT7W;892Vh33)(a&KYzT^mr z#?S~ux--juKt+}=ROH(-O8S=gF9x9p6e8dV!U(+b7slLT=v9%lb`OBxa*Bvx5b-_W zAp+?Cmig{<0^wspFlR$p|44_Rj0GU|D*a1LyvufMETAg!#h*b?qDeWy>0<$86F_7n z^5kXrmG=egiG2=rDN6GW3VqFwl!OBcOA+<(Hj|t|(hwpXUq(5&xH58S97XZVrGga6 z@NO+ulj;>H5;9aB{?V^loxSE_?|*5nFfDLgkPy^&fBV9Nn<8jTA@~mf=>p~k=t%Uc zy?aknVGGU;+;1-G32uA9QU0T`qUTJHKGLI^LQcVd351r8!A8`CB=VQH5f5kMNrP`7 zo!85{m;zY9x1T^(Mg_+yM9yT8;p^A+nxet)E*dFt03c&T5`ECm^{H-`pnIh|iE*$m zZknQ-Oy(6Ha<>KyJ0H{wsWDiIFM?J1Z>LZpc&NTIZPcp_QPozpPbt8YJYGEXH2-J7 zGyzUH;hkTVCw^85461+?Gd*R!J=xaha<@a~84|h@+{8b@&{f;XB?&R6L1KyV1L%g& z3Nf2vQzp0^Mmz%E=y`9q~H7=VpE$g)Ug;RYdTNM(VoUG##G$N*taT_Frh7C99v!~;D?@lbi9D=>ZJjIz% zUkKLR0sUx&66q#cbDzC2Q9-7HJ5x)X_g9D5^WGncE z=KjhaBzn8^=G4u&t6dG(QHM6b@7j99(R_=$}aDLk4T{_^sd>K{TE^`53D$oG<~4#b2A*gC~e zusq0oXDA`UbZ~u|Yhyp(K;zSY_*kr%N{RHV0Olkk9;**9JNc{yZ|8_m(y*zTQqp}- zY@qjhqoNIwAiEgAot)qKO5klfWcJlt6rwtlX90vfLnEjCwKd&K6zAf##H`G-`V*q* zFSgXqJAxTjag**fNP{iqRUU!nehz&h9PR0V=Juni?0Tdur|Z;91P`ZzDu4;Q5MHn< zTIG$xdeLz2-b{(BNKC6ab6x=N&jR${50MZut%`R;D1`3vn#0KUugRm)ncd%5MsB~i zh~}B!jNFestCa)yFBP?`S#V??*=Euw>;X29sxUf}{a3{Cj%;hkw=8h|!N0?@X*^<+ z7!#N3uJatN!_JAj^MfZPWl1t?!aG>Cukr>0+(Qn+QH@yi22;b_>5Isyg^g2 zxt<&?u%kMxJ=6T_Em*JvJGghP%To53K%wd|Cb*2+Yjx+R@6F0-PS0+$Pgc%Xh3suo z2Ysnue3qJ0iyMaBn|%(wl}Q(rkN?s4-!G(Lx9g%_&p zTjcw?)5r1~ZQeHAi4-wg5#mXnG^t8H2iIa{AnhMI^r;83g2;b7F$SqBi?wt#hrjVr zZF+jciEyjt0gGoB=3Lwdsa^h#P6XCGlFQuuZbs%fmL8R=M^S)?kh!k37WQrzriweU z-t9#lo7MpS|9kZxLp$AC$V|pV*ukC51TJ~=%>;@mv^`~c(-&`(kuq{kyLEIZ&C`m+ zs$Sn%4SjIs7T~Zfj>_l&m7e}6Xqas1_Fphcu-e(`0_&JzlHknU3rWBL$n6OQn%@E@ zED{;{g>DGC=R46ZqhL_U>knv_xqD)Ocb(B)#y0#5c?!hnuJ7$s&EAO95#z1Oh9#valjE<)j!S=J6!mYT}vvCyO?z3?g{vOH1*$qJl3{kus_7de0f=} zWa#YyGjUBzf@cg%{We>?-vYQYi_wj!|HC)+R?6h%fj^Glx1?JiDo)Qxh&C!34EFx} zCRc3Bu7|2s8@74djTs@#rI@CH@!38|D3Q)-j6ZyG8NOkNJif7a?9uB4ymfu;Xq@Da zwv!L_SU(F&SgD3yb%MDQ>iZye(mZ~gH3&}&Tp@o;e{P@uF!03DvxgSWrUm49LH+*j zXBSGNv`ts1+VLv?gh|{d z!MKOnBVr+|4XFZ7)qV4yKr~y#FHBF!yEn^htcMkwZx8Y9ZTd;Kl93IXV?&N7+XO>+ z8J?PuY{g*SC|MpJ3MA{#NbV#10&(~9o{om%O<3@edRm(>oje=*_LSTl0isk0G#8dy zKi!=Qk({PLDQoodLn;-$HTF+xyP}JJ2%pv9otJSyWTXRmE{^ECjHUq4Tm46_@hj*1 zI(E~@WfAIijv&CDYyS)(U%&|M=D2Jl87q3$+DOc`0HQ2sfbv$p1DVR@ut8& z{Vzo|iF(L~<1*^2=4FdBPtNHkJrzP_D};`4?G@s9|38w4T{aGd4XuK$xDyRooBG!=QuHpJxv-XZx*~NUlia=#q>OQP7WR zG1Ilmw9*Y_3>wn~lo$PB+VGynBu$(zku6MYi};GuusV>=+!$NB?DKLDLH zV8#l@eflYP=US=%Kj?2^=P7>V@rrz>-}tpHZx!xG8NYBMEyartneSYjmx&uKsTU8Y z`@)^*=B-je{`==vjl>4g#fB%AJ8=++?M3J17B1Kr^hs|*Heow78N&oyl%$XT*AFE7 zS;1KOp-weudipBbtYzPAr;^NPbl;8mY zM}nt4>48;cG>u-r)}|cfwaLWcscVd-eZc#K zxpJ-@0u&RZ7&hNuh!f>@-~BJJ5ERRW*pGx46g&VM6{os_L0>&qj3Cxzm;9^K`4(@n!)AeVvEbafC%4kv??t z?g6gyCd!J&Jq$yqsUE8sD;Rf~x6PAfe=6#Mo8h6xhc~9Ma@HN_On<+_dIDDL6LnDk z5Y2IEB^wan06=O%@2J8557WQ2dL25Gi)_CbT9Z~(XC@`F#t(^<9*UWlDj3-x9~1Ps zSFEqU{enC@j>|u(e!W{P{&$E&l2)2qS8KXvB64vGCZ!HZn0C@U2q6h;FjLP}@Qi=T$fW471JiTBMFm_;2h>da z*617Tq(AzRsgKo0V4wM4JEJOJHNfEES#>ts`a0##7V$8iJi05Sqp zUDNy47kIH0vY-c=_f~vl1p>?2fjhtzu*ck&Z_rpwdy`FuW)3zAEC#NBYu#pj!l%Q5 z`T_>A?try~9&W40hOsT31lil|EZI!~KUg?i|6LN#a$yE_6Sq2WWEmb4nF+*rkMzu~ zbB7#m%IW=`J^!Y;jFZ@INGS3o?HD#89%a|b@A1z6KQtirtSIlZ70M1_F}*DmOEuQi zytlZtjy-~jyZ)z9e5oR(u8nbUAf+Sy+u{AP7Q;Yj%DX;a2k4K)LYlvXi29A7g2tDd zJO|qRn}G*)sg|aMPnXi0*bG0koFlmTu8r8jKk%z7X(0ZH#cwks**Fk1p8Bt{twKoxqOM?bKQ;?$>di773 zCYZdm=vOpnWBFHsKlzg9gv+tK4r3ZfUqymj_^NZ^lUNY;6vI4URNB8iNi;{tkrC{2 zXf1aMb8dNO_wWCDw1x0c+TI0-A@VPdJm|Mf`ya8{ptfdYAZI{g>)<`yc0TVAg=U() z`>|zZ73pL7EMYc{HBMPoYAJ{bb2d*iYp8K9w!&OJl%P@y1uxl;Wr85s0=tPZ3iV$1 zXEL+>u7wAH&JVD%1Qb>w7@&GF9$|8X&gqwfxI}Q5vt|vdikzl7zj17kJNjsslAEvq zQ(#fF?V#i2^D_;x*g;e-Z#VGZMReu<{p><8Sk&)|$b2I`7e2te#_)LiawBmS ziFY-Dl<-+R3r5t8-LnHpEi4)Xm<-@;!;qqsy-oqEkwkeP!eg-^h9xVZ(UIBdS5J{XH>{w z;UyF@;0snKedK6R!|ti~+WI@l~lSA-R#W^xP@n8$r;RXt$l-nKvU zRs$1n!1C^($(4h7gE1)sdKqjD5^QoSVd7X6C%-E};lO|2(#_SgN{tbCLc@>D{o#~& z+%+jTh8^|w94cI?5+li+GdAj}3TN*e?;{hZRM>DtCf26vioWUkGs=7Z%;U%w#J0FP z1M)L|x;F+Dtz2dEK*{%9+9lo-C}L2s8Iw6d8!V#mFT!Zq2p|xi2GnkZD6s?l5aJ!d21SPxnKGB7405K6%TAxcu!S5j(0P*8!td?#o{=IJ8*C* zY=MkfMp>8B;;>8_`E!H$a@MUL2fx0-iP7H43mc;^3$twX$l38&O7Wi#7t~$p+V(URQGq(^K%6S(F~Fn2&$9Kg%|SSorgcl=%%ssw9>P zvj~&Qf->MPA)6y6UYCprSLlPhT1yy*a8JUHiHj*^@Kq*89{)W#ti>L&;GoZAZa))! zn&z4Tdw4-s&4aMeDke<%@G9?nILF%M<2-k%`RYj!aD*Rl)}z@bs^bb~i#UaU1jTWz zXSMsbd&QY8O}o+=L@SUfbAh?d6`7DLL^eM@F{+=ND4q1zw#rtA+1}}HN;m5me-Er6 z16Cy?N?_rIIh0e*RX6Cc38717bjd}aodS9`g^l5z7ky6UAX90%q&pl)QVPCG=xzs2 zU&07S5$)oTial1kM#R0CA5PPmTz7T8Q@@BJw}t5c)MDQt_vj`Ig(=%dYw08w1P|%^ z@9}&FBjtm_GaAo*ybg|s!`S-%9S!Q3sgSQhcO>ra$V|SMZ*`CHt#T4G|C-#6OAlGZ zs5;B}WnbQ5^4MC+>a>vR7kgojY|O09JTLLEQqoGP{7H*-Zm_H64j&`eWo9MGWWw{! zfap6I(jr{Se-$Wa$RcGn>t4fq)beeyl zAg4989I|{SG7cQG5Te*tenP>W__wJOW+h`+G(Ar^pe7=UiyO<^suXF1#*8c0!k%Uz zXX#!1Nnp`?3}6ZgVU4;<6jJ@bF95YWPPg~p*ntihjDAPP2O0G|asWUhh6X_oBLM%Y zoyTrAp>Ie~fXztSU0LE?MI|x$%Zsf1GMjdFto!PD#P_13r%$S}Qwc0pz7tAmv(W$) z9p`f?8v|5^6(73Av6J0P141dI&zYvhvN5^6DaRz@M&E)5snrzb(QfSxeo1#|WC7zj zhNTa-xvy9F(EHBB7x}!sga~T$wmliTupiK?tx zXJ%g78W*nqKDxYoMx(D1(q?U}-YycgB;AC|6hZzdQ51Yz`!88Em6|KX`xBVV@E5-Ew`P3-Te+iC$fx~Wy|+o^Z|$JVePjVY zfbmU|LY|{Y&}q$@Hd}7P@Q&^m z+9-4|B6eqi@!Y$147$J{JYv>fLlIO*W)~T-gZcH4_Q$90z;-CYuP>+l`x7CcL{HY! zLF72Rg{&Er$c@Zbh;pK;e4$DY^kdW@1CcA-JWq_Vin^e(Lov(?q~4WPXiyqUgMsI- zzESdm4gEa7s#}(;HDEq!=(uYK!?A#3@h@CcW33g?HbjfJ0$jaqwgCW=<2!Up(&jPE zcjB6)fDr++1m-=x#fq59%`B6;Y#sq--}Wm)1Ab99sPJ2x_G{>J(pD$$UplOk$ugL$ z)yPvwK6USIE8nNy&}06?4fl;`r69t3kpBL>HtSblFIo|6a~vIyzC@EPjbFIR1q2up!ys7Apq+jsCr}aOQvI$`>%TB2vYaRxWq+ zd~NQy?c?%#cHfuZ=Y7??LLTUSkNsM8^^|vUVF$=wXqh`F|Cq=CJZ*W|p_{n5HTzls z2Hd}tW~|J&=#kg`hNa(_FJ(gP_DSGWx}a+FEqjD%E3l`MAb6kH6!TfK)DPXl$&%RhB*EO2tvy0>WwcP{knwkxuvpOOyyP7-DIn(GUHl0^8E~n* z1k7=5Sp*s|q3p7rfJnXYVWRSUpttDaL(}>8ns9b%XZ{dff=~a>1b@uL)S5B<@F3)+ z7^ta3Y=9>ipMg2Dr23}&la01#_hCc>iUEK1-Mu}YbafVVBnCE@6e(3Sjl&*x`BX6B znxR)(Eh}_@5ne#O*-}R_A9O=;ZZ{Y_^A(dJeeglj3xd2wR8ys0cJ@p$ zXgvs5J%!UZbI)3>U5`Hs6D7{|95j|)tq$qr+7fBE%7H~qw&Wj%tb()$%S7gJ?LOsV zc3-7b-^X}Dr4ctXSjuW`zotKGWheGOXf|3wedooi)#4V*X6?w1$xf4TTQA7MYk*VY zFDsvlX_3OYb1Rrkh96gopGRTij1by)N7oZP)B61@5n4Q_z)bEQUMhbc28s+&3o&z&G@5PXH03NyYXHu1{ef z#VmhsTUvv>gnRHx(CQ0@;g5D2RQjQHw==CYsNOBn#I7~BF#PzwC)x-`>KJ^3uaZ&Q zKRr5v+5!Ez2cJEY+`h}0`W~fq1bx^g;sr&ib}X36k;HoG;pL_?morj1W7(i9l&Xth z5;hm`ociI81h;VSIyh`9b;Vq?Dl9I17xHXJ3LBmNU^sCNXfYqCRr~^dLv9|&@$mQX zw+cD(DV56Ub`<;rNTOot7<8FOBsV- zBX4W+^M=;L6AXTvb>~IJ=>N?mt>t~HQF94^rD^>;?u~K0zShI}a+m8?KDuWjG)&-h zj~3Ep7SI91ZMk=vp(vgYo8%kj-Tr*G4f~e9Y z(azsFADC*M8scPD{NN1=aKAX%Bz^=Bl->N&hM)@Mn_!M@9as3Q_Z^=dt=_6epQq-P*8S2i&r)5J?X)hZM#FqQf7o8Rd zz>5py+IkcCLa6bpUOts&AYfH7djXOb=nF{Hfp;E2uttaKn1}8Vd&{E!uiG2s#fl*i*@4&3g4JT}`!M{ERtRQ7I0M5WXnDYgtLEftFn zy?3_27`T;9s5DYMTfa`N#@Y@_9yxL;`r(XE=JdU{Mc3)8wkkE&hJMra)$pqFxTNSh z|B_;D4<05sxFGA=M@#k3ssTH=B1_Kvx(6aTq;Jt?H{>`5BrATPa=o$^^jSBBqV{K7 znLoqWuHC8V)r3|BSo0E9bx}$T6G&sEBbVC5{)SRMBkU~f3=om=4EB~B8LZZF*s(sS`c~|Wopo|F=9(Wp830T<|lGy-w*}&Db0qcqo zD;$CXrh?L809tA3`*sFiR=9HJheIOS&*YeKrYYgx#{;391gUj>Kt-GfBT@2M$4xe0 z^I`8+YeozohOx^j*@AG*jBY01H#v^GLTQFfBr3zyOu`~Z`6#P|Pw_6G+l{64s}UcL zP0`2vx_~_h1Bqa!vQ0bb*FQQ0z4QVqhQ~nB=wf`uWeqpeT*kq>W(4|A*NQ2#m6Li6 z-nSSUEbR_5WA!Q8bf>wrZSs2ZHjsd;Z9grHmi+KQlUy7SKB<^iKBUDcXKs>pqU|=Z z2a!Lu2Od$@pFp-eGVbQ9dX-T38W6durRj=s*zTO7NcCE{~V|B8ICkaIN2`0_ikOf*G$W zd#j98%5OX9?<-37zwh>ZIpe?cfvd>%a{lBbRw4h0W&Xxb?@VYk!{8U$-p8PMZ9#6g z*{%wZ%?X%VlIs^`SMPLJ*)~1K>#)cs{HzDC>?Q5v+CO8pXG=z+IfUNQ8$aM zwHnLgO;Di@6#s2UFThp)WRk*nP*xFWiPSohnlg4erSW-1$W59|MkC&(v?H= zGedP8JRP?CzxGW}_1Z#t!U8*zX$x%WwISg_dQwzTjN)S#t~uZl@uyhcpo-i5Ug6}l zre-DFli&vlm_`6Knlc! zaxS|^=9?C$0it~`cWnMgbp^k8&V#E->HI9bC{LMu3;Or`oJiiuAHf8Pp4QIl-=pup zxN!vJ`$`q++n6Q!5bR1mYvDq_GSuwQ{6xpjhgX^J{j}Wb(vOM{LKE+FVwgHDWl#=@mTaYoaw93WWs-dDINY&*%G&bYF{4Xs?mq67jEyci@q{Mr1f5v6df`m%O<5 z#;_GQMby$_`Hc7UMA-H2Df{~e#@7Xw%Iii)8hm@$z46(PvB*_Q8zj1>ru>q$m35Qo zxX@^<=R||dbZEs%UJs$@8g9m9RK5G-rDinMwm}bdsEr8K+g=@JCCL``CM2j=t4k$M zGb$R7-$*;8Umqx~_o+uU@4sJpXMSN3gdmWAbGL2s=0E<+Q73G4bsb*NDOxJ4|;I8-m0?k~P5WND8>PEL8k9~6=?)3$ZjfdPrAw6V?k)iV>F$#5 z?yhCOectcy^?Q!FX3iRvuR#vKlEkg>3%)7o^>*J8m6O_&n*4g{;P0|rvfpRtzNsKv z;bGiHP~g~^oDH|ks5%w$!P9LKmg ztS18A7ZAN1>-2}**R7hWkme|Ww9`QhC@ndd@#*LRdU*z;##6Hiq}l5W z^s072ZR8g$jY-?&zWR}s% z-PsAX3KIm~_eQrNpFzpLJpF~h7M-Z3dDN9hn7yO;QbcsK7cxtA@TgxF$4K8qWlf+tc-c1VyZ=^n=V;pnA zumqa!j3W5SnP_sADG-?h@ZkG$0iVGD2VAH?h9-oYo;N>Bi2w0cCPc_sWPfj$i-idG zJ{){R1K{`x4zb-4ue00OUgc9ts{?vkzSz^(1uh8UBdl=pV<1}UE#O4gI{DqnLLWXH zs0g@G5IKcD$K7~{U_KS^N*uxe67M~EVc!}*2;{I%B9$-u#7=nFygbpjOm+XuVwP`| z{79Et5r2{uP@w`xoUR$OB0QL@YewGBmCx%LH{+ojHU?ZqROT+dR(Zr z;*TF3OY#`p2+BX1m?czyne;P?7SB`XAPJ#yNhxaJ$h8I@e)}DU8pV_d%i>n2tGYKS zY%wl57xB6KQ$QYnuA3t%T{qXjmFM`uz71^7_u(yz>vxHH{=EY?&e;qt`ijjfvssIX z0F1Vlck7gIC7`F87O!Pa5Qk#nD@OGz6yTwOZ(Ui1-L3ErxW;KUt8)K?E0Vh#i>c)1XYT_t{r|B%H^&$V7I zfxA|NW^JlP&56%i@!L9>ZnB}|S1Cs=Zy%b3*A4@mb$b6O5ck0%oO|HCMX*0K6q#KJ z6qouCm-Vcov+>G70>JV_jTK&Cnoy#+B0pnjfCHdPy&mc{f##5z(BG4_tnpSDk1!dK zEi)DTzC_*oz(M0YNU?-a%Q+J;9I9d9ZM7L8lk^yQ$N5}(jG1N_BE1t^)nkAN5m4zS zjJH$!DX{ZdbyVcuf4&sH1S1cwQ|L9IonU^K4Y}D2&z%on`2_T^oZzGF=6jz9C?A3{ z91(6%reLsx4g5y0GC&U9&1&wMvIa&|ZiP?M!I-}AT_J&p%K|V5q-YlTZM7BrAcbLY zCoa;avZ$QXsqP(c7X9jb;e<}QPp3=a2voR1pOLz#&!AWz0|!x?gvOt22NePQbd0LT zRJRDdQ#A83^D!*>JXo@NZ3It97Hiq46Q+7ezxFkqJO#|(9a!WXWyUUbG9_xVJ_VSUZAEE+1Ur)gz{2s z{$T7iZC@^XL!4(rqB3a9T_^U92*51}|0S&`oDpqQoM5DV?Z@kvuNIN#ItsYe1}Xm# z;)%}(Mq@&=H)+(!m26lEz7p4ZgK>+7KCyoKfwzF1G6*1458$lJUSUNP(O4?7x=vO^TxoycZqo2prEBgP>=7zZ{5V!R|KG+yt&HnhD?KQB*F; zEYML!jei$MrQ;S-LAK#hePurN5m*I>^JXjFl7}=Rl0XKc(d=n+Q?$t35<>OcPn1Ux zIc^x0nO*prscBNJ+$D_cP!>WC030+`VGZ&wW)bi}^y`9)Hsi+T63}p^(U$JGUrz{N zD1LvfPdwH+y`}ur=XO#*LCa(qowDJ(EUUV_KUn{i zruhjH>WIplhyI{!tRGz;H(>BY5hD-Q{F4vHW8bjpu$ee-1)=e|I)dp)QS*irS&l>S zYDwIfn=u?o2$sSZG5c%?Df!=`Z*qh@Lm9;CU_57XndtEn z%Tdg;91fIkUto4f*;J7X}-drGu@B`K6#tY6N{F#^eHDjl{w=XYHNB^XXLBU05Qm z=owH)|2Qa>sJ#YRW=J6rrp}Evg+x`C(cs2S6QHK;$xP}A4!JDTmUs?vmR+-r23QY? zO1@8h=gN9j&gK~J-&jtSe0k{i}~CZa_ld3?h19d zt@luD<(9FtEO83>&bfT5-fufDEraz>^Lp_KgcC;DkH;PBnSzoE3niXY z6&sGX<XEVTF~Gq%|0c+`{%wR>giGTu}#%! z_BIWPfhnEb?DUqJ6m563o1)dxxV>3QpXo z@C;U-a9^!uMwMJ7m6o$@@sFE4F*T4vcK%Adzz9>#0LI$jX&t`si0|5^gWG>T%9@lW#;}EghX+gxN0dD;F-d|SkLglAV zVqVpHtsXyPmWVu>&pHP*UsH3M>YOYu(Y+4j8)D-0<4QApy7%W$nq{|%9rwN=V>t{= z_W9^5ny8GxISKu*8%(T$h!c<9^D1|er|Gjd) zF0*}I!#N?JIFSCeUlEOnURp4=T7#mCvz!W-Q{_x`R6E`@EhSu|W9Ju{TV)%-_pxpv z2A8FR7{HSuoEsii5bP3!mtU9T1MAdFk8op1fjIkZ5-*;01Sjb;!NsuiNwD)3ErkPK zaE-pL(BemxGJwh4#}wnOxqmbXv~WuBLbTH+6up{~B@-HFwyz+Bt9wKwOD)>UXax_c zy)Z%v6k%veu#lp#6mz>SQXq?(2^;u z*N1F(AC6J3Y+>!MtntOsuV%bJ6)zSHBZFzvHCCYceA?%2t>^3t0>n>{<(4qk8*6BIEfDx%Q6h_p$E0d zQ2v%t2_lWkR&#%#x+ha~q;fikA!1gd>Hr`Vci|P`wjTXsHw8n!qjCkrN>RSmrYS6X% zlYzvy>686os8sYvkpS-fukRVNCBocMf7g5M8(W)_vGG)L+kdim5-!uRqzbTHlbwD) z)1V-&uICfMKbIkz`Y41UJqPvZC{4>NHi7_qeu2|urOzWV zmO<5MS#@Uf@je{hIc37NW%`SF;bR8bn_QpTHy0n=eh{}$U#dr_U59+=No+kV*V5dz z!-DS@rYtY)zGWleM^GQQ1c2B`(J+>qvFKv~ z!1V+M$lkvdX@QzWUoH;&kM%LD+iBWSi0@oR8hBf(CmSEZ6;2N5$)r<2AK!l~X*tra z`HVwF{fNMMqcfZs^NY)D}lU20du>w zF7BSyS2~&tdevDZNJUyrdHbu9Q!CFGoc?|)z!Osmu&OTgXUU9R@_<#sfm&7$f`vyO z`Momvgm(3Z(}=1*{Pd6Y-y0~vo2G&ja7+b)Ho6$V^c3mWc{wLV7HaqmZO62A#j+%%UvFGTfWl2O(&etmH%Hu&{42e@~(mkwcOE z5G%u5&X%sc{-tuVvQvubqkV!7=o6vGFtm5Y-ko5l0E6R$ znGp!T)*F+$FfJgaWao#@4=wCvp46*?)BUtL9O_EQFSPxZPd<4WjQ@_R%mWBCr%6GH z0wQ+D<`R~EG@p8ium#U*LGk&=2%kwI&AuD&CIc%!B+0`33b1)`$MVWYAo0viP0NF; zy4ro~`*V2YJj)pdrrdy{P>p<06kjKy1yxTC z`Y+X_^v3}^#cjr6SSHAD%lYtLkUkCy5xGbpiyqb|m@~nNvp^drc-69N33S?>L0H|K zaw~@+o)2Z+v)W0L>iW)E+mmka_m~>4#ob*5{0x)OPXX`4o&#Y=oh1(_8>w+Gyy7oW z89b1~^`xWZ!0}V>4@U1#H!_0V;jYauZ#yg#xRvCRsrh~E_g9^KXA}#sTYS}-7GJ(G z@MJa0{`yeZPQ2XDUq_l|rFuW*2?G9W8_TU6*7%Z-Lb+9$1Jst3UQ^YzHiO;M=$`AJ zN9BB9EpN`TkBhDLXCf6AEXSRV<<&bk7aTDNkfh#xpu&3<6EBGRXPMi`XHO#Vm0A^D zroIPlZw1Rs_RWPqrXF%Ik78w$O44R`p1LROh&OeKYE7|}W3Boa+1~TE-vPAM54x*d zjPkY)`N9MfSW!YyB?Sl}>&zeS_~Emf7&c5u!KoniZfW_XxalyQX{m8G+D4@|+{^r~ zAvv+;SCwz(@p#^8i@Q8rN}M3xT05qgJh@&O(B$8soms!8f%)#~8ALW0@JvhRA%bR~ z)bBY`RKi7p9oplrcu_ErHjTsX8bvI!ZkjN`8(GB_t2BEqwh`t3^tOs*jVL`qC=ZI= z1L^$vAm#{*5HrfHHdPJyv}KFrDJK}6e5gJNy$c1uFhc^-QqFeyBmG*!-7+s|)P%SJ&5JJ!W*pN0d_vN7XhB#kn-hxU@%X?4`x~E8h`yq&I4s_oYszUp! z5|-S$`+0#K4$;$9$VPUj^3&gc<*H*MpXFyt54?5axtpCV>wDwgsNE6tL;DM&cxZ0r zT7yp(biZI@Uu+9abz;9_>IwbEyocMU_FaH|A={Pfxb8C!E{~-=Rsw%ZpJtD0Q*9?Z zJlK`AD(Z10a%sBvYB-Qq>~zASCZz?12o6L)xHVy=Ep>JAakTb?uR{WRC6Q-|*#5~8 zCM+r(u;o(3tMaF_Cfoy~2VuExddzZKRDGMXyrVR|_TPMQ)xR0CFcZ+&)UaUiqx~El zRm>|plPnmu_be?(UjrQ&H}go=dm`z(IQc>S#p)=!w(SAfl)XV4_`LAkwifqW%s@%p zIL<}1PZ4)DFN}m$z#>AM$R&yeF3hD<|59>QQF0twPAUHqI?;aN z=LJ#5y7;vQK>r$F2|9oo`yiA}VrIg}TOIrDLU-9%uj0uX%g*>S)redSL6=OSUuHaW03P9$lk&W zWXLW0Y$o>d{x_5n2U-me>B%e|sl$n_6;|R#=dnXsLs_+LbW>24m$LAk^V+lrTFS&3 zXbOZ*$BhXezxu_5&r08Pe0D9_`I3H3m#(I2XVVPgwEeFn(nCa!vghFkhcpZmcY6I@ zkNnNkN_yiqqRG_g^Z&{==DSUXhZFobqt>3lODK4F|7(C*&y zE08B$OR|mrZFy-T`-K30u$cg^8UpC_@0O9eWsXAZ>A=u#6Vqg1!vjbysIHTUxis<~ zd-k5o(ybf6FnRCp_E@U3fhQM=y#0LM?r0Dkczpi?k3A1`t-`WSp6bOC4g!5S1~~7n zN>EE|!Gi$jR4xmT#=oD)*v9bw`*aiaG6zM?0o0Frh$R&M=Is0oJb=1Z-q09i299Y2 zc4?Bc!K_Z`$v5UGZ3IPWSesr;c#Zk(CM+)cM++kv@@}xiFv%}Mltd*_6Gp3&Z}5pe zBw&99e4Xd5DrC+Q7{S#BSr2rp_V;Eq`Jc=#_!t7JVlv3ynpbZbQrW(>ySn;wembm2 z$F#P4(?s*T06|wOaLqAQS5q9L=Qw|IqIza$AXaV^-AiUlA7B=%sh9lWI&YaHl6{fB z0Fxv*I*ml_No18_Z8%6l4M6_Nq+lE91ePFlc4YFbUhl%kw*+(%eF%Mggas13I7FJx zTg~lz)m;9gglx-Fx?PV8aWxC0ok4>jcNUXk3N41{zpgn21$;1P0uL9Mr6&zi{WOwd zCFRk5h~y#|#8C>lHt>RgT|Ah6#ddi}hOOqbYJ}AdQ2SP#Bu5d`4Vy65&YqwqsJaaM zeM9cOhHD%q)}M4LOgnIoqNXD>4(A1prgvzcbM4gu17?!t zVIMkk4q}!tuMtU`ly}R7a;xHj&?k~fsK_N`+e62b%NV-4{%o>vWk>=*C!jC;aqVr* z3i$ChA4kV}vPx%Nm4~sD17f+$AL+})3N_Hcx?158DVSn9AC=CPro{ecK1BTU_h|Rt zxF+CQHdD$R8qFl7sV@~&dRKbHNZblH?arNNDcnn8rpg^>;2oCpSe`wqNd)D`Xl77&pQ*`et0$t8Nj-UgYhQY|FC>g-sZj= zTS(ymUGm5YKQGMFMeqZ-5n3g9m!HM?FkGJlxitdCdF9>_&}AO=>3Nb@c5G@zTV7t` z5EitZsSFEb)S&7M^%_OjAmNhc(6X*9y2ksoZxOio>94O8kgMLe<3|9#Yhm!>ubWIt ziCMdt!wF9Sj#7;wIZ*VL@_CV25ZvrwPY8%Iv7D}2f=wCS-5UFaKoHm_-=dE9W&zxn zP03Q_T(PbQVtQv3NfBWRGgIk&CxLWoy2HMmx5;c=hV3|O$Tywu>DL#&A!hFKnSQUA z8v0`rqNT7}Nv7RYwy{{jkB}Yw#_Hp=vRytW(R35KgYvRI&$eciy5ZPHa7bH`2@O5T z+69a=>92x3a^))ATbo8#u9VBitc#U*~ zUqIlzeUPF{?S>NU*t|G{Gb?o}m}T9%QA7zIU+kCLeaeEvT|Kh<2qsGu&9-V|7XK9@L|!_X+p1i3y_6q9ZJ zNsPXhRauz5bAJ`>6V2wQJrNbYKMZ9a=HGDKzw)SHw~<9#_Lx+PyrB7hKEKF8I*0vf?oxOWm{hKvDS_$zX zRRry&y$hPW>)y58snE3~?K)LOkiKSqSO}B2WRIfAaQ4N@O5|uSxOa3x^dKDI`krds-*v%s}H`0Z5PR| zIJtwSzKK&hxw+c|n5R&cM8$gNW7tf(^zGF_r>j5h26-rV~0c!XHelPkch z&GBnJ^@?Ij$%kz*UmY^69=D@(rpGU77^V#%thhM}Fe21w<2h~#XsJJkhDbsicQh}0 zxhIf{2IhICHfQtqD=@)}SA1GTAX8fwn#dDl*L4gn)1txHnHOAGD)r~Hk7JTwH(7St zRJF1eIk}NY@A-Z3+A90hdSPM!qQhI`;%}Dq>x>{fX8%NLm2r=;qQW<7H2{12Lh5fp zA=`1ePV#IPnb7z3-aV*;g{reTkCr_eC$gkT?@%vgZBFfi<>(Mv?v-&Oct0rV(@swB z$QoS3=kYY0;WUH?Y0Y`5F0}`1YW5a?X_gqnR^x5JdZROm_6S!>`TdoWecc$V36tUr z_C_`IB`{D&@$la+f@0s3F?j`J6Y1~Mu@9;~U-zhypEl0~rDG;cw6d3vaeypc=?EHQ zmI#Ly|~uNh(u&PK)=)(&HF(bRJJaLyQzH%#kRPD#aXs+ zv%itJB$tnoz6~q^GnVzMYx5y($u}R+w9%3dwj7>@vdj<~&e`{qIYghekshV zO(0RP2$cZy--qf)zQE#_fSY9Zep^kWVNu<{y0qDpb2x8wKWBSKDiyg~6{dTvSK~hI zkJuaS2`hm)0=ncw(daV zMdZri57%d08t^xQE@>bOuOjlnhTDTTc{+3An2k@|*=sEY3$R4Kk#+}|;fQXaJ+#Zf z`Jb++vGK~qeQh#HC}DkraT!FpZNWoTFQ|iw%d~2gylms`U0JEHKjABq|1VxF(jMBSFq*$vuPg37)as|a9V=XBIwqJ zmjrL6A77FC{qF(g6)DJY;I);L=u_?S+q?-WeDN`aFfZ4&HYJTS*MnS2GWkx=0oI_3 zwc)hyrQU>=KYtKQs&8(EJ!8Ms&uYUYcH*=nz5hX{>U{GnT#8)&jp3*Z#<KORRBd>K#+ab?{U<)L`dzA)4V7_g>S7VkT$&DQ1i(_e=d ze>`$3)8P_Sl!P!BD5;yn&t#(i{_JJTnDgPL@r}&v5shi|!7r*6p9ZOB=WL%QN8}q5 zZ(vXkTpW*VA_9gXaDt9R06zjv`~CR1lj6N$3CzRzOP$j<5QVaW4;Y24A3&R(f*vQP z5Ytgf>t^3M0i*fw&d$2n8>Z`lY%Ng6hu7?HuVNTC=b4rXHg0B7sSXYz=!vBUoF|Oa zy7#>mWuKoYSDJDpgwcES&#~hlZLDjKON1$8$|>{>d>cHQcRYu}b)gxFad?xvVY9+Dt>%fZ_ zQ=5nR$}QZg?=thfqOG8k;nF$F0%>XZ< zQkklm@2bbx!P)9uuL%5HW2N7|BcuuL+w@@s=Ji##IlY+a)tYeza>G#+>B=&iKej-9 zGtK&Nm}d$KaGQFyb-WdT#8u1QpKqiCD6n?(wKb*yDt7MALAbp(`ba^VkETE^q!%cq&0t?Kp805QhN zbz@7gwac-rXp=xA=P0i}iphp+A9qgVx@Vfa#0^u>qH29b7duBZPUQwJ@AdxkQPYb^ z)-GbGevwznG6Jm@h(q+QcKx2?m2|s9P|y*Pv|F2tOVn@f7NFrhet(}`QebM;&Poy=K?FuQ2rb4;38fw)VejEEOs&Y z998b0dm1gd!eWixycN0T{UQiX;3Ts`@6u-nAR~qLsJtGx1fD_7zQ10-$e6pi znN4}Z=oI(xNhar7J4}xcaA#ptldgZz(9#91vX>aQ>D~uNUP-6@cHem;e#>L;fS?}< zXd7?{(SX%v{u`IuNJBops5k|np{b0(^SoD}U;Y)29EMo({3R-!6~i=A^F4GG!Z~Ur z#@ivz*ZKAo{iJ47EfY~O{$HxJbQMUv-MrxW&D|f;Fdwq&QBx`grk=nV;T3de+(1L2 z?_NbN2L)~h`KcO3EEsZ;n39tf^#%3K;SL47>-fuhVQ1ZYr#6`I-bj9dfwaaCCii?D zyOfUu)dBvLj=;;+1mxsNc1nj0+aBk}ix)-?{M()69adADL+DCiA zeft{smeD8xVP*m?J!kW62$d;=oEw~ai9Z`c<7B~&a&+q`3Z#k=;Q0oR3rb<&*hFEU zY5u9yVW3(g1Ck9*+-sBQ+hJ$v3P#eMn#5q_*6(*3=FKlZFpQp83*WO{-DanbLdHg> z*iH~fJ{L>=>Y9V^yxsu~c^2zmHd?=z36LMUQYS9@rBS-_7RP;@rI80$fp&!IuNMZm zOuPK`4cv<0j^^_5JJEx&z&C@+<*QmYfB$wC^8;V*>DNpsz!~3`)&nWJ?jh)bt}8nG z@96eqdb$SIM7*kP-Cn6pzOt_*gE(=ADEqwrdT~86Ui>{JecJhVO*Beu(*VTA zLN9rsMPsM;JI^Y`r(WwAH^xaRHfbq~sjnH$W(-E2Ymmorn$P2%RP{sb@Q2q@(wmPa zVH{hvE1P@UQ^c@DqKbRsBiZ@~obTu`n|8E|*VjoWTzv`BSCJ@xX|8+Ti{(;=B*L;a z5)*-!=Bv~cUO9-oPi1{V)AZ8s3wbiW?a4Q?{87Z-zUfr$p_+6=pClG9&s!j|v=1Z} ze(s(;2I4=gHZ6FL*&LM%rrxT7ENoqha`@DLiY-1<4rP8HjeSk`QDhd-B>_tCtd}I% zvq0;Ch&OQyCD2wMQkcx{sQTq!Hj?-Zh$;Y4sMV2Y!(|UaQ9!_3YT7)fb#oO{yIEA+ znsf#o<>Vv3=28BzrQC9l^QM*K+4oVt)o?hE`>U{jx$eqg)I2jf&JDybi=h$npjiC* zr)768JVvza;xZ~rkGQRpDHD{yF`%aZ3t99h`|3}Gp>U_z2tTg1V@w?ePOXB@tLGf@ zkuUC|$LhTq%g@BiIs5V@{xfC|X9)Jvg zO?bE{XV<*!TMm2J5vihE{6~xO5UQf|E}hA9fO!SF%6>)~_6l0DcieI(bjX~#sdub( z3TLmrl;Z0?LCG7Iln0~p3CTG`4gPkHVrnKgJ!P+8J8oOY`&EVP9K-zuwn%w((97R{ zea#=%^QTeA#0iYGsiOV!z{^08kyT+Tu1+g~zM(9`W>EZr^*thQ!uVOJCH~j>Z5A#m z76R0{gfzWCT>c)jk(YIv`sKhdJ=Fq~a_t|9{3D9yjZE;;AH&)`%^2 ze^Fy!HBxD_#SMcTkf}}i5WCo<8-Azm>CQG)8BBO zxG*5dIoEG|mw-lnxrg^6!Bx|!lXdk%COGaeD6*eABnL7temT!CB-@ec$gi!G@MFL( zK4gu?Qn{pHC*4Phk`+xW=24F;xLsCbk13U3F7U`b#tHLz36NwtS9#rCOD!psm+LJrrv@X9ZVQMd0aQ{5oUq}@Ju&57XT3PI4S5mT z`+Ug71G`24+mR!$T}KHJBX=4l>P_IzW?!X1A^9%sQm}g%-ipesp0F_(u)Qt&y^ViA z+vGW_pr=DbX{GcteR}(kC6L(phH-;ZeD?RJ@*T;-Q+giMqDK7D$AJk%XL4`>x}8l} z_)_Z!Cnt_B1`7D~K#qTuVX%C^{vCrrC}sORVW;jHK4cx9EVCH3OUnWjCyU>Oj~_H@ zl}#Kwmgr4`=cXy73TD*CZ4v>af+`%bSF`hQ96&q#=$*LJ&AEU}_Y*RdFVz`G?9cWx}YYyG%Y5jkSTQ()o1o=4@Amx67Ujq4`6rZutv6L~49rH7y zj~vd-0!Fw1ZOLNmMdE#=yEgJvpTD>Fzeh`=g zAr=}DmvQMUGlkZEd1-V3A>>83{HyKbk`Qc$m2f4|{w9qG|5%8$-8V$htrtb8$eF<$%&3U2E?je^rO+k7}E|Om9QnU$QXYAzn(!X$EzHzOUst~EmR{Dc^IV@?d+E(AI=Q@*vR`UT_K zwV^IEaLVOW{>5n`;p`9-Ko6kVK3&kLV`SngrP>+Xyf#ZL(`^uU+Y2i@*X)&olMFt| z693+aOhdHqbga6BDHC1O14(k*10nq(E&aZa{mrU{CAAg@7Y=eB+)BehT&cEc(K@=k z>hpYg4N>8J)ceh}@Ls<2#rSo<#g??I-}v!gcA3TS(on|#myXkC{P;{D^&8{-zx$^* z&!DUd@I@SrxsV`wx_H|xX`n7wLsMkyWV$z?fah}^2u-< z*T6$-B%ThSrh>q{f;G=`0jp`!G4_u^ob=L8{1uue zeld26JW_}V$sAyJVxfcKLazWhkhLs!8DbUD?Mi*`=~`g=+Nss+R`%~DWP$%iW?T=q z0hp`SEL@KJft6&Q<=d;%4?`PvPz#y3ssAkJE8X?{C?Xj}(6R`Za}-?KXz;Aq|fwJv<`W66oa)PX77hdRX!8cIT}i`24vC3XA2c;#*|qj73_~y1V=u_p0F1 zW*7(Z+PJJGZFfuj;N3vjzV^7>kIF~6_P(ctF|{-Grtm(ib&08IcS5N*>7WPE_R zn?LtM0vjefW0Y1s_J8S9C@P9rTB8108Z{5vT36}+VTO<3^*|mzHp6eA-s>WE@ov47 z0XWA6k;Q_#!r>^)qHD>!aA%-Tf3ApZJMNa)xTlBKSCK_}ll&IMW3+fCkS5WCSw8JG zZB~(_{UoUyFT9sp4Upq;6rZiBKR6a*sunDNpS;G4vSaz0$3mezNp!yyJVIw0+%r2C z^Q`eyLBcUbFu{U1E`f()X-y_smx0>*-IqpKl!ilTiB?ORMwnP~)SAm~BLx4JbpM%> z=6M^V13GMg4(cs_?Yduw2)o^$lK^TJWbi-7=Mgr1>cC+O2oE4k^EhD|OC&yH|D$rz z;wFJI(NTKjpDM+|c)?$t#=1+A7Oz|??d7v_I+I$%7xP2@tWj%mE>9VnW^h=^ZbX2Z zlHj>Mum-oFYu3#)mjKR^P+t08Wz84jPjh><-HH+OvW}qQ(|mM_9Le5Focy(Cd%oP7 z;>VdPPqzag>wK|Y>-_Gy^AvlN!~y(22bv*~qE^JBYxC%+ip+};VR^lb;^(yC?JAED{2uG#t==MD)TOk;8qGu5v=rxiX~(UQ4v&LuRX$LZqs+kIU* zoe#l)7M0tP|6zFSS0SL!P52#UBW?H4W(8V|25CN=(Wza^_-^(5w8K%>WTrGNf-BU= z*VO;}gCbV?c=ycsyy3#bD~&rwfo=?lh~__2N4{3!fFktkWT5r!3Uz!=3y}NeX$pVx z=!Ei}=-)Vt?OI+|3ai(9J4tr^O>HS9(T#~)MP>TNjdk~JQ2dEMq0XC~y{=k654V8z zp_~p<>kdpSwr`zrp^GCmzL_z3(w86q7{;&SdZKHeZ-n+fZo zg*x)nSb-dM1(_0@TnUaQ0S@nvFNanvxUzy&_~nQ=lI#lw#8fGX35FDEx!+X(vIs@s zIMFv;m;xAS^*NYS-`+UBx;W~OED07zuq_N;e(9FI zzXA3p`^vYjtJg4MA#0dxs}Fn~tJ5O}Bd3BLKkJsWkzH|gXh}WdO@3yM!DKxh-K@X& ztn9b|)zQcWDLCh)_f&B26Q0+LrUoz}W)ZJ5N2O0l(QxB2vLA(YElMPR z$MUv0Y1f7`O^*5=ZYrqu6Q_DRu_LcDrR7YJ$)@jEMM4qllFDH1v7B*0LuEu~wA>TA zH?E^f{n!v&?ZT9jMs_-x{fnet{(^F;8Qi?V2WRn+nc3de}8vl0{ zSY%g#JNZRM5!0kbkc%fuPJwU6X}vNC<%_~cJ(;OqE~wY?4;r#uxs=a5!@D(m0W1E< z4R}_IT#!%f3gu#}F-R>9c|v^}S4P@}YQbmZ>CKO0*{mo;u#}p9UFIivKBi$k8&Bxi zv$9qn#+Cbg{2t;HrCnAbTr(d$m1SyklP#QTW*bE2Z>Lu2cc^XX+0RU*l;1RaYv)M^ z)A*iET>i8W5?jDM7+hDeMDkeV0i^TD!1PvFCegkmZ&K|JHH>{4r{OQq*w2DV1K`E) z7>!L#7v8n6O_wj!&aD4^JGLR$&?dyF{t3d()YT^&9AO>HKj+zR+07^#%;EQFD*~Qn z(kpc$W-|M1l#(?Bsa~F9M1Xv?Du>*$=8>yu9LIPJpIlcsk=t-!icKSWb};)%^0l>D z7!ZP@#};7wc}!QpjWK$bRw*ll!SvESWVW(M2RI=OF8ue0QHa zU#C9-K0szC|2p)dMHllTO6-!h;rF4D|C*^W=|%uAEFyw!gMtrKkCZ9vktHJiHBB?r zTKx@9IugT>?@v5R(BSRU*r%@2E4j-`mdGzyd5PA|Shdd(^EGv0v2FxILKFFJ3e>6~ zLIgX};C^`sE5C7e0TUj+rg_oFe(d+_t)bEdQ&vp;R<9#k1P64%qKbnX`}SMGTWu9N zzw+!PuH&Ta5TCA z)5#2ZBay%5sRy*HV198v7DrGE>31&cH^8Y4~`=9H8!U&o30E*2+w8+T-H$@F=S2>Z;^Ia(=dNd&0Z{S-u z&COM#V`Di*X|G9c0ZDi;v0_R%V?P4U7a@+*ZZamS#>iE7VBrdm#zZQGNKv&<+ePTV z_!%wSu02aPntN!16!ZWlrJ5A;nYOFa_;S0Q8h?oXX>?rndTxx&PK^L?KI`=0Jzl2PcZ+w?jS^#5gDmHdHZjO2ad%S z%f@P>%SYk6(4Sh`=%t;$vif_pty@j$lA$=BmIb*d$(*irdRpJjquqaOkW{K73}?%L zCf1D|2*SZqsm7NkfMwl-WoU142^zCWO>uDwrd z!&?vBji}b2dlm}V$QHWP>wLf$oA&qdXQUb+okG|ksROgx!IhXz;npGoz_?RNN+kk~ zGfdE4;pl>r9iFk_gorMy=?FgaEEz?yuC^2tC=_qNM?tW(oGy|#;p+h`IYjHXt|Uif zQ2vjls}5`W|Gw`rx=UJGN~96V(IFt9G}1~+gESi-P zXZvn`qds3B!T%tK6TQasxUg#heJ@}w^{bMWNsgET)1vhMY2v~gmyOk!d!naSnlC?x z=TR3KC|$06xca%L`4N}Q|7YM>fUGF8ZWbR))9i0rdlRK6ukjgCkxV?xI1(N`hDOavU%gVqs>u!XgT8#G^aB6~9RHY2V4M@Kk3*+RJ z+M6*!@`G`|FRwmSEOjQIREo!j0#s($Y97SAUgd8L{M5t=M!J z1Z_x214@P=F;c`@s~ZI6(2kK*_1gYF>MC)W=nOyUonSa+E&u60Bw$|4|KBVc&}NOoRo*pO)p=g9KH zpk(bBkXx_oB;2;jR0gRY`ONE7DPk_@5+q^;@nZY+_EUU9hBM#YHi@})@1X8B=Wmx zzf1p-h+M+|;+&p|g6Byq&;G~SC?)kFYs zF6wtDsx0K-51_m9-rsVEUS3rF{4C>qq=8>{o*}H1c#i6?ju6_>vP1f{J=wcTGQ1?R z@3>+Vk++GdwsrD9CrGN+$oe`KEzsEqq9pcx?^07h(G!>=6^uu=83i$k64RX6{X9=Kh8bsI|5=a^z6GV$+v91mKC7{iX2+t%FItICPcmr>;! zTmG0JACFX6lL&ZC(=-P!+1YuI3dRv0!m&ql*S&9hBoa>;iF4ASc`<8$+5XRf>wE)g z-WhxORUgH{i_7|Hkb6L50Gm>K=aaov9l;+JkNSNI1-Udey_9;H(B!d}cHkC4p?FA}vZDd*RGVbg!&8Xzbx{20T9Wjq;&g7zWbFJ-y@AyX*#1<1?T0t?` z@YB;bsQcjsA}TaiC@|kVMqPE_;l^g0d-xT(5Yvzw6#G6cQ(#PU#t|BJ-l8yUQw_Uj z#XHLm^ID3X-E8og{^9y;N>;PaR8RSqA;FY;*89{&AR~ZnNt><3yjZz7gyoc%OB3RiyB!L zEep-{x3w;)+GSK=+xDXO((S_XgGnah7J^C&I!!Wj@}e5pYiJq|BZ{280+(i1g6ujd z&*LJOhDOIKN+ot}&K^%~%QO$ArQ*^H32R5L=@WjVS?}$|hW*dHA>=-@sULmqS=>aZj7#MxU)Bvn5aIMtn5BA5MAEFb8B5xowwQ^1UmaB=l0Cbw< zLEZW_-Fn{ZU?axmd@yiY0UWoFuw$7 z9Tz&oQ&1Vavf&m)Z?QmcEtM+|CAmQFpeXNx{+5{PPFs%91^nFGUMGU-`+iPaYM_D> z+`WT`QHs6XEldN|w0>Kn;v&xS+L!HuR zqB=5f8&F5($UXBnEBf#-ZyK9_eQ-==JB$HF7#>AhJO^d6l5Lk0N95PDjmG?8=&giX z52lOy%wpSjv4orl#h%Rjap)e`btd{mnnVSKPHaf=$fRy@G7|x`pF7lmV4`I3C_%uG z0(9U6Fi?P+H;G_v7rW4DXoQA$irP`tmwlmlv;hGP`bT=z@a-xG#YLFlF@mZ%(VBm0 zKrn17O*?gE#j#kkHUZlf=AZ6Us1z;Kd5@bJl=o!@ui1g>$@52_BN6ZU*UMLo-lzC- zu*jXD68Cu5dZ<|b41^pwcJ9}tCssd_Gj0MjQkPf<56l;QI;8?S6|miv5`E*U!BwwM zr=y3$G==sK7amR5pI2O-%c6W@Tc)Q%&k=5P7sogaEm$W`r~@X%a?k~&WVy{B%|fQ3 zCx7w(O#jj5Gne$TwE;GriUTP3vvm8P(WVFE9 zcF)+6Ov?l7^+nKP(#Sq*Ttl^}7qYi~(IQ)F>28tC%=VZ>6z^-9x@LV0DRL;_iC!^T z=in6$Q1x&Gl_|(3uO+wzD^2Rxmj=Zhw&W``2v#>XCGz(?X znTFDGH4iykzYl9fOgaY&qu`isuR6`2Fd$qDJ^+wp)eZ?QX%ax{@q0v!+fD0J->hp_ zNyt0I>Q0+87KgGyM|FzKr8jhM{W$P|KIq@{Ls{FkWZRv~{b1%pXAksn8shEWgurRL zZbBWmA)!O8c{3j#uB^0%v|n3wYgV=sz9s`cL~_8g>eifF+6USt$GsB#zG~W?_;7S6 zDqy;<>3VctFMo_5rn-ap*Mi>sdXAasQ^@K7^f(aIZ}Q5kX$Q&(lO?s=eKq*$G&77fBsh?GDLCYX%Ug?( z`vui2>^h?kkRSCF_n%iZP=rzpGA@%g0kgU`9?u!l%}NstQwIJ89MF$N-qd?VFO?N z2_(+a;1Lg-r12t)ayq{j(D+JVeJw6bpgUeHLgc-4UOz@ixm@b(`C&M^;%7+^s7l?g zp=^&Atv)z5RcG18G!&yvJ+2YkGTE?QeRA0t14hZ{yeNiJS^*oiCX^i4U&VBrIG z0!J~K<(mKdlVqOPf15tdU5aP>Sb5!3-|4%43}dIvk~e;zshA^6>f7jDX=trnoQtvp zf86vn@fgTrsQm)2Jp+Ci!nT_ajQQFtovJ6NFcK6xPSg>0_whq81sOBUS*$7)964dh`y z=qw&#SN2LpxbPgkg)ZrSdYhY#lAiRnWU9P>=+#(gyO@%_jk0OK{`yV98v}p&qt0;0$tb5J#40fp;X~j25^v{}d)GDCqPJtXKl$xzt$HQ(-u)L=F3 zUc%NNjCye5y+cv>sm$Oz?U69BJaaLTz zxv{w&GV7uZUFx_H^)x>M%c8U2QLTb|dVkkbXZO9HuCA+13ASmD2ouUGjy+O=hus9q zz8T4Tl_vMnE1DpD>!h!ifOK_3geB)a=CtwDZJ4sQjq) zb(e{OjebkpEFYf$4!q!WLHpQx-W+kt^xg89izB|nQffu;#~dm@-6k?E3aOQXI*>y( zEL!?K@|UolzAYX`z5;J`iNeKV29q{ld_VVqwjUx`%yX<|iV!66v2J|^|s54w=M0WB_<=?ojD#+>-aC82?Fx1EL8 zOW@8xt1Sxpjwc}eI2@nFzc-W1e(S4E=|$#*Jo1iVY5?+P_YO2TEU!RyT^H^3=h0)E ztO#;STHTUCld(^k6Z*|ABA=21mAiviAE4#ToDuR%9`H#zkrqcu5^H!!)i%^YbR?t_!%MZ z;geU_oMxNBhxT6V?*;ahgAH}puKvLo?u5u@x=M4_YWP|W53O9rjuFZVhseS7guz63Q4Y~Xf z{{!bhMr*5T3(zOOJVSsBLxx*#9&mzI?)869UI*>di|yA$Hv3<1E~8LE$O1Gk5uOR!M8xi{X-{o+pE=`e~-N*t-D1n^Cob7Ri9 zo?@hqT6*ICQ9wy&1UZjDx_3~Ivr+RueM$7zT-KkxxkSFn}-|nK*A(iDg`3fd%2AY-80g%=w=FMZc_QbFBr; z;ff`u0>0b2*NTdBhd~4s0-v!f){>53q6u{clb9QN5+Q^uHgDqhlj2AlIpZUfc&w+ENK zpiz#oK&~IugN1W8K zy_C!hx{3%|YdbwCNyA{q1JK(qt}q-tpMV*G$bO5oHG4B2i+1e26L?oNb@=`m@m(L* zQpONgFRrj^HyH^&%eNWc*D%E4G%_5Df+8s(`d?p}$y`9A^`nX2cp<*B!ni4|<*5X? zF_OKuGr!_mK&DVxni&U!=QeighbRxmz2S95XJ5;!`v%+75pv8DOK9-D!A6PvktNjS zNyT$KJ-2es=k~vHEV*BvzBTWQX6}w@9O`-8tD<|M^2wb|e1?p8SE)aIJt7J+sD@dJ z@jmf6^~d?I3>@;TrLpVUEb5Q~KN~oh%jXZ@0sp$k13g}|i_`dGWj1Zw zhB4*;(jz2ak+2uoNg%Mxy2YO0GTpU#ds^sQNA}1=k91?Jjk2Q@dX{}P0uvZOn^I7A z$d>-zP0o6aRbiE$1ViBn>qp5S!mCJ%+*t961httT81IP01h{M_TpvFLJZbU*H(X6D zTHcC&*10ng`h;Zy?&HG|7{)D}cSU=j-=p8B0++U3rh7}2r6tCXEBR^GpH1ldNL*$f zhYG>F<l4?^RLKNhd76i=w+zKHjbj?Ap73VlZZcQfyVCQi z<)&yEaiW#4UnEBXud40eV8b~zSg>s;=tlF}&((5dCzKGzqaV6dB6hsghJqlkhJ%*T zHsGw&)6>ukE#&ULxA};x_36UIQAg*lVo9)EAYN%`Z`!|A9(EP>Fz}>dsVF~oS!u&k ze^J}FFHgM(Wi7<8jPrmxZyMGn(}knVlZ9;Pq`$P%oArqSKU5zL?DlnN3g>z9;pz%f z(sk0dBZRjG#b5MBs)>FtV+(RW0(Df6c}txvkn2U16Se%lI$7yO8LEM*PeqNiSnHMZ z@k&|}AsNSsanQ>`jBh_`<@B3e%?%B?e#S0hO2|PQAzF$bv9T=eO%(NgG*bx@^yFYE zYF^yluiK4NDw7nk8hg3c@Dy06#c+ayxst5509}@voDVMv0D*E|s;4CcPt!0?GwoX- zj9DAd?l*o8asco&qBOWUJ(Po)-zEX{ch9{5$89&x)4L$D&|LiKuVNcgG79kfgy1ci zTMiyq%+@o{1E)}mB(X53N!yFjnUQLE6qzD(3T z#9Pl|tH#+&jkpm6G?3v}^5sOwx)B9jS{ZUXKc}anF(hQywZj)Jp)5ASz9vQF@XuiJ z5FxG?CVej zyOm?g=#iIymlcK9lNJS2>{~kCI69`_Mp`Gkc>X4_-oM1!dUUNOcY)P6 z$lWV%wsLM&DulWJE^(?FTaO$bcbgE2$oFDb%y`LL8`323##Tf%fqwm^At7Dkry~AC z+Nt~X%9lu&{Q)f=+zN6LSREP-q1hTSw}F04AH3$=RaREIIl9O~wDbs|`vYa!Juv0n zBcfzk_`aMgL9@z4=Ju@pCkwUGZX~#IqxBO`0Vd>wKf9-Lu&erK=0ed6oer&3VsZ-E zKOaT)vv{(1qi#q*xI`=o>5panKRxOK<0I;vD_1a6OZ(FFpT%6L0c}U!ScX$e`IFneFNlv z8+y98C`m3BK6Y_}aM~AjhW!B?LrX1LT`;Mse;btZIX_QJOS_!(Q&6@1D4HNAzVWck zxK%7}u-ex3aOd++Vw}!jN3#vfB6afzsX%`t+ zt<1ViBtO*Cs*dE(fuFtl)crIPRSLOi3Yu&~vZlm%if}+MH%{p!vi^7hS#-J>Xx-v4y z=(KbBS%nn(vbU|csO)i^S&shkSZa#aue48H4U<}$Xkn|en67nB0zfGg7@Ewcd&GS4 z<>KN^s`yhu-01gH!Lo|;F?#~Apt4J(PxKemeD`+~J77VMRJ$o^I~T8FFqYWqPBFT; zF_T15aWWXV1f2BB+oRH;tXxU9d)R~kc9%vUH5qvBaRlDRp0GvRGqLIzSF zBH1(MF-C*(HMZwP2(D=3zu&w$WCat@vl>n^$ral3>myufr2*WV{H#6F;3t-+Y-QMX zL&&k+oYd^3%-9KX$+mDwwtrVQf8OtSxK2H{#H@aXaUK9KNQL)T%6I`)}tp~CBGh)7YShs$Nd@bw9B z1gsByf=5tzWy7_&D}^+$1~g6<1UwXhx=vt&4>@;?(mE1u_X**1q#|Iw-X+%x%GJnt zczqA;&Rz2`Av_R6&CdR;liFn%+*#!P)*mi5IzrhdQxhM}qDGKV-CYaopnX9r`tQ&L za)=MRS^SrvlwYQ>lX0J31;r$zak%+qg6li!mP?^c{dCZy@C*}IEbAAz@K;`u=ZX6} zA9?$m)R!jY@14GK28Ub0pT&*fJa8N_1r^(Cy8S_Ek4I3{;q57++>F86#u z$GqESLLX|%hkPow$AA~%cr=Gc2WV&ADb_tbl#NJo@fhLXmCe)F>mHxTKT2fGa=KB< zuZV+K9CYgbMJNhp8lWi1^NENmr%rI*TyNnNPIB}rPH>C&jHM_`$g_zgp=^W-|54@8 zEu-y~V@sau^V6+xTD-fJ(YzzMe>&ZIj$Y zA?CYV;JsIzAKFNhonk9A-U&oo3?@9q(gnG_Lgr4j zB^TQ|8k^c_J8-*s?aAe!jE;t1-H$YoPv)5ItHw>xYAbf|b8Wj|^RV*^zp}EaN3y)u21$Ake9>>2)da!1^fL>lX zA#Ty-15VZgudrZ(Bp3?!q3)WnsXIKHY^&h#p5_i|XOY7TB~=GVcJD}>!0PS?cQ$$1 z-}mL7J)<_wn`0oc6S=OD(eDG>e^SgYv}hcdaaP+gzSF(qJz<+<^DlX~CnWB(5cq|i zKuIZ9iCKutn7nfG!%1o!Z=SY%+sZ_U!v(SGHq$o#_ylv3-lUVaEmG(ZOXTD2@zSK` zzD*v;rCibc3}f?sK+Gq=r@vMJr0&1u^zrhbb?;0e61I)}Gd@^UK{>oqtRBU9RMM_b zhVyL_DYJ;Py9tgGaP!AE zW)XWs4uQ4r2U#-0m%AVnBG;MUL$GL8w&`47pD&HMF{gbZca*y@_}CD;!?oc5rfmW&EKneUs>t` zanac>n#I;!U@;GfoG^hoVU+{Ho<99pq(*IF<;M;(&b|Ehd>^i|2t=b!yq65iWK6*x zRtX8M0$sc+)}^#lvc^KyDRcFgdfSr6YjC}Q72D~b0jxRoRSLNg^rK4PFD|DOYlgUj zi@F#!x{0r&%U5(4$;v(@1b?jX2sDaYd z;G$OyHmwN3j$EkOP3U%BI&M+1onak}u?xih!~DE5`}MiI30}aC{Q?$mok4cW&dO|y zb~N~O%<)UEEx|lYgHS+t(qdW>(`u;&Q;eH@2%NH%7GL;2+C}Xt6Ez!kaQ#Dp-mvf} zwibbFGnh4>mWpL;w1$!EFHyoz#S2Nv_k{DEfJtxrhJ*WA&0l-Cx<8{63ow-POanfa z(dV$j{s)j05KPU;R2tFO15N8_35L@ONyEoIFc;rGmKK;Z;O+Nuawn$)G)Yg`Mc}!+ zz!4n8i-eH0yn}cX!&Y+(pB+g4%BI4uKYXZTh3-4;o85Ww&^J$FQ<|iim0S#Vb?sRx zRZaGrnVK~RdMjnY9NCBrKJAYw;X_`|uK~IOTqW=yP0#1Gke$a1Z%s?h+Jfvy+V;Rw zD&vBH@IHdm8i*4`h&_d(#chl8fBzvYyZcHr6abi1;tPu+1T>rN*7s-clorJfDn=#s zYbA&waOv))8XvPJlmRp8AZ5HAr&f@5MSfKTj29)Fb;yme)9!DtLedl<>`@2bQ(-@v z%g$1JR_&dXLAa=-9QDZ{zUy0viM0~i>~xU!F`ex=uT-(4w(V`a2&bI76q_Awz#a>3 zikd@;%g^0TZqFU5gy^R5ZOPA$TpMut1BN}ssp1pV3>XpLV!SPZ;bgjjLxu_1=HpfT zA=6P!rl!mO;vB4I_9-POn~*%1DKw^Bh;3C%azPw{MA+*VnaPZ4J3EWl2|TpQUTRxL z8uh7K`GJDqXcG;EFv=-RgNR;w0hmp3KlYsg!J2V14R`n#M@F~SIManF(a4-Nst~fnwmoQ3 zWtR6oV%rAn8S@wS8rt#u^n_$M6dUMOJC5n|Fmpg<+WMcB$Eq|-ls`bXAN$|wkEy%o zIwTkV$oSE9ptHF?ejEF#FFDu1a@KOtm21&Wh)LuiFjbF?h4sfyoArf-YNDN49X%iW zws2?Pq)?4t(m-QQlWe6hDdl6tyo2Z*qCB0DjAU^34Z%brfhQO* z0(OMamk#g6Z=^5)#=I+Y>M;v@le+1LgJtgbfOjdXrw{(7h}de@+*x69d?IIx-4&sS z2YFEoIeJ&m2F16LfbbYE=k*6x7+oN*voGCO&PUw5k1%5qpNI49Y_ebBmI6ksn=sxC ztb-jWJ&1(-w|6KKoSGSXzrOnt+45KxrCzzj^q2&VJ7hutsaTFIF>>};dYwlCPWSHt z4JE8EUt24x3X)%^H@GXodO-4fU+NStvhhOw-2&fzz{N_n59wui3&+TyChKV4V8kxY zr+=Use^B!I4qHBDqZO}DeJM6pWaTp{kWf)yG{{O2Q z`zCJyjwI{48gA@grPU%>6CzMEhsni^Wj0UJZQ0<#%iQlm=+E{Xt8m@^^zLbPv-=l=&cTXBhZI9Ot{$4{7xswhj zMyK6|(LIs5G?;>7VmUN?u-|Da$C81T#D!rOtD6l#Y1~g$oIA+up}Bc(E{GBLjwx1h z`|z^uDaMR{fo2ylPb{J0#-^#WBJag}ZV-`or1 z9Kjq3;Xch&b8~8QuQwz)l;HOGxP#7jitvnm!X7o7{mh`xkV8cRLv8XhwIEy@q;1vC=$k_wR`h zU#Sqtuospujpgo>H;R%mg1f0s2dmMO1luT9;a^r7>V}vlrMKHt5mkUoR)$0XU@poY zHm?z^i&^Hj)Xl`Gg;Vhj1z{QJ^w={u7KbYO_2tVmht_kFOuhqS)YEjr24C<@KdJ~- z-8~uuSutZlE)eFoTb$+QrQud0uGRtGHAeJe^v} zn0pY^_qN?-BjsUgSCb4YJXim#+6Tpn%zu`VJVYWYe& zqU5TUAg}(V$PwvixdL|GvJv7iBYU`YhJ_k9s1^-LGv1rLLr*XLHSp||ABO`{zm{Ek z*v!%fmx{6A@KP`+s0Mj(cV{!`_&XgGEk~L3^jpY2Cr?{BEAXfUHhAj>#D||TaiNxv+@~EU z^z`@Fk8u%9G`mBkd#E4&_E1829zH)L80tcTIM(i&&9?+<{dB4p%aHiId%&KmUT;Y|W!GuVnB>?w37JFoI`3qe(r@ z*#WBysqD2YMcn%=PiajX)|Nrb!c+^kKuoe31KO!???m&JzqaloNOOp_B<}D#@OHbxwg%K77JGY z_1sp|iGM>{x{;8jU6jG|Ve9tqY(%9ZLkNAU(acY^H-fsOZ!Vxiu+H=b{wg~!H_duqz|eLKy;Y<}c&2}S_oX;Rx7PAd{@4n5y;*Rz{WJ4>$<%WP@7Jy_J_ zE^!NV%ndHr2TqQ*xZ9}9Stz2UV4SOfzLqp3Qx-K&c15)?9!MYOLPCr{_dwJSb-^N? zG=t;i9^hdCdVOEZ|Lvu(om;=r8Lw?zD1R$T-G3%+pXx92@C?;5+xEsKeI}0Kvf1p& z@%h;S-o~O}Gpr3OI5wiZR>68bKMLowzQM7>lQ0fR*VN#3GFTa*$M$0)vCORwbLmT! zQ0!-=&GdiF4`a}IY?YqS4D7*eGuDP`5-z^(>Ste+4Jz<382U8ovSE*7fk|2%Vg84B z^;8Dz$9S4!T?1&L?&1>vG1gk9ULWKL8xfB)YLXA2+cr#v6m#Vw75Jf9wF7$cqx&Kv zo9^!OgatnZ1!1Tp4pDJd6tUTlEyWD__xUxiZcgA<-8B7-m}^X%R~TXWGK%2ra$*S{ zjOawV(KRfd4h=$5CjpsfaSX2>!r-?ARM7=?hGc3)#F#v5>AHERMtPq&GZWS6iniX% zM;EIyc`|qB`~|$9Uwx&N^F#P-PoEL^5obA9C4uc^QJB&KEs;MHv74`3)FqS9yeog+ zf5R?g%_0fq3vHx%|7Z|HEfl+<+^@xb?SAWnmMXYfX*6^c2>N1kCHo&a&uPJK>m^Ta zCaW+p*jX)%(V(cGguhM;N+*hlkADPyl=MPlS=V>5dITH6H&T?Gvj=sa|0=PG9_Aul~n| zfCnCPaOOze><>9fu!2*2x@i!cs+6z0DX96AYitmqs>ek1q_WLlTDEX2)G@(i*w+V- zB~+`b7mtR5gTp0xx!EwRC{+@MAR3&mbrOQQP70+v@f&81-=R;0jjw{0q{@%wUKfr0 zFeclhjR}5{o;8*Tvh$M4ey+;KV!aZTA!~4F!{(0D-7qyv%0L4;o=P@;Vh^| zHma5zP=2_R;s(%akd;wP(2GQltbfSMGv6<|6gs&?k4nl`8xu?S-57?5!eSwIz3xcY z`Dum%_c$&xK#A5`a8+@Ca} zwJKgdfu)(|v@gFAJxSL3QqC7q4t>}=!)RM$y6J{ow3zz_3X=LjtB^xY``2P(%eN2z z_V>LcZ~Ol~xXO!fh<`;x6yr}& z^H0OnF532?Pq9nw?BS(WE#P(X0GEgYEQ!?1HoJ$APx&M<2lA5RUo-WgZhTorgyI6z zao_ENyf878N5lt6Y5%QCGX?Lq0@!gT(Eh7mDRiDU}bqwO_=p{GI0c+E;%#`47@_ijVm;aJB zZ#4-720;g_;My2iciokf8Zb@|X#$;geW5{b46Ww>W9}1K{@#KBZ@aY1QNzVjmCP}a zhQ@pbx|Dv>AC3T;_-H!5qPoX%Kg0m6XjLhtdVbXxK|H;0HDN$~W+NK#pxoM{8!hh#)4aW+7Bg>dyFH>d4?o0Z5)1>Qo_eeTcxsk`b`{%P_7mCE!Qr~NZX5}RIK^Mqmh5bmJxj(#TMS_Bco z`5#gs+KB`yhfq{9E9?!?X;t^E3JH*K?@jAva9x79*6mIgcE3QO?sD7inUJxlD^q!9(JnEPXQv`czJDsaZlf!+=ss3#`Fwgx7WJb~QV8RvU%NvV$dI>)wAK?uFc6#O zdf4~b-sXqElQ()Jg&{BU6lGl1zOv=2>B`zZl#kPd2Q=xnV{}_c9BN1W7Y|7K1mz>J z!*ox8s*96p2U+}}1macyH%Bk%QNUxeh#4devQvjY$V?i&%qc1khJzu>1M?a{|VL?2bj zVsAb~-cdZinuw4~*CfU79J5I1&Vs;=C(7-qI&s;`lx>{wj?b|1v!$__KB8V}zTC=H zzX%oz1;a~~W#=zBJ-z}NF8+Q0iqU}P_CG-L@xl{&KWY6A)U(FjtdPK!cD&m|BBfFO?rHs|-rRfmlpL{kMoA7CP!FA8Exqp#9y6xZWx`tkUoh~;gD&}c4 zOQI*Y`8~O}@4{zhTE>U-sNJusp|R4XEfDoN(>(CL3N2r7(JuMX>eTzY<9j#Qm3R}S zdMZt84`-#pOisi(!5~H5&bFP;bKC;97>p!$P~K&f$+wyN)hHKK1H^OR-(A1+y4bEB3K|BhPbOM)6FmHgF4j1J*M9z2o!Q3c*p5-oJh zBbCf5`BaOaqd8IX%^DEWTi)%u#23MnQ;_~EJ&aXhVau8mZl{p9&pz{T4M#5uzrdXO zZF?k>$NK5Vx9~{?$*+klD&Ltbi7rcNtN9bG z3TqY(_gQ{6wtB-Ef&3@<-YgyuVU3SC)>=m=dIQHY_YcGjKwK0Kya*GNoR3GdN1uO% zxu*sfqS3$|%}%wqpBb{FL&~lJ8*&6O_m=4xpkFoXw+K=*5ig0yb3$MrLw5emJ z7Pi1ckRJ;IrJ!w|)J(IyR_~8GVRz8O04)P1; zNy(f%5Fq>i^YtP@OBxo=!Edzf5Fl&ha&&8dwGVLEIHUELS!Kqq{E#G5x-2yi)nhaY z$~Sd7@xvmcJnKI3n`D&pdr{G8-LN!6eeA-=U&bFXxtX?l*>y6y8QtkH^1WX`v1EEu z)7QTRd2u+ojJi1VhO`*FJohqo?3Qme&!yqh2Py@BDu{aENOm?_Yjb6VfVkceG_B?j zghJXzaO?LG-JqI`p57=gk*kvSaMO5A&<$Y-<2=ox%q01dwHAtPN?$ zP)8bZhu&dujqS78``8_ZK#U5l<18w&6%OfL{VzU#jGt(S=_M^UK+Io>63{1zdnchY zLWoF8QS*tw(4XuH^&E_m45`?Ka3KVZa=i8l<@?Au9#!hv`vBil_Myl@Bgg> z<9$D&fYzIi?HEQ1>A2hNAF*4Syz^vYO+t&FZVr6M zl4FicIXK7)5`b3Dr%i?|rwCGI-Fei2k`~AN&tMv@0`HhW;|RWIjFxK|j40vlU*>aP zhtYrFO}c=Y|2;W&#=}KtD4RbGqQX^-CbJZgH$Ec8}YmHg%9kU)QQ zEO8s^h}ys)O;kN?EY;HbDrm4~brK636wF`dX7iC_mJJ>J#2@uxRohQrW(Iy1VEXuPY)16Nci7`F3sF-5i4;3pGkcCm;7^X*bISTW zKUwB&uG-(nyN$S(UX)^+#KC3KVv$9>gxnaV&`Jx=NWGqUD>_nV zm5T_CdV9C~tuK3fB;E7X6V%cx!yB!$L+@6K^XNG644t00 zLDIY@0HtEr=_bZYHdPetl{Lqc{7?=nT%Q)g{8la@OZJwU!9S_@uO6OCHah<-+AIL` zsyH7%xz6EnKHTi!bz6{yc?F1(%-H~wpx%3^)bc7B$ z@$pEG=N!)BFdykycmJ?hhG_#~Gz9+IJyIL4aiDWd(6o z8>?0c_72YL3}d3KP(CzLmwwf>v~r1$N!ZMHrW{H_+R>?W0#vZ@5i%T{*G)rEvy=Pg z^$&LjO97q@eqMrv;MQjD%+^5EY}5Wek<%MR7VHk{ZDv>NdiM*c*U=87S(jVA2Rk^H zb{125!LBn&{ZzOMN6Uh@FA_F)_;&UGkE^!~i>iUThR+1u zjYxxl(v5&HG$IHn-3rnvoilW&(jqOT5+WciAt)dX(j}eJHFMs%pYQweyze#t&NaWz z?Ad$mwbx$T=EpA{R!Y(b4_COD6?t7vIma&X9ek9^_abfZ>%@4A|JbRLKCf%j(*CopUW!((?fdvdgO@ z&~l`wEt9>XBCwYN`!_T%h!!R_YliAcd5d-;nBrjv&%SDmy2Tj9gs=~4D!P-CRW^ZS zBnPkmw&np{`1~KYQ4v1hT?2ymrneV-dT z!+v@-1PpXi&!Q|p8>bKLP(RfRiZC}hp z31M841AqIvD>5MRKlsiiLN3pdV6?Ap6eGLe+~TiW9xGj04E~^+nZ$d2pws#qBe(@d z%U$I^0P!wdYQFMwPXX9DH|?stB6v^Z&rsq0WRQfF1=nEu{m1cYGSx{&qb_vP*KcQd zG9MW~mCL6?92h5FM(=KFnFibJ%kvi^O3uhR9!u?5kCE|&UN!SpuuMM7v2tj&&d9-O zIGD_e$JzLor{4c$m90v=lXWlZ!N*}uP7;3TkjN`~;&7_5-Ml9ijIraC!Tb{hg`gVm zRpZdc#*X9E{UL$d3l_(#j>gBNz{L|B;0UwdBAFi~+g9~(A!rN$Hbfz6qrgKL!-oy$ zc6I6sDX;l%h6Xh0$a9V$MR;DHY^2gBpR&$`@ZD!(b>T35HA)+D-*(-9m25PTI6VjF zw}AaC`nTfxrg#_U(U+d3fQ}~o1tF&*p)9IAYq!~eT|^Hb;T)0xlAyZlyvK$XCoefjx!NX&5;gwJIOO%@asYm#=Y zvHrT#F@=T^mt4ObAZ%<}AP6gRw6!Z#S|vf1}b7 z>o}AE@*j5y_r?H&Z4mrZCGtf1!5#@FkPt zc_Q(J2V}<+MTRBw=Ab;g&-w(P-hlIV^#hZaAt1|O9U$EWZYFKWqg7h9_dE0=F&-r3FOf9-rGk!rL=L7T#_K@udgtA89~9v?U(=gjU%(hg!FNZr^N67=`@ok#2`j8H zdM#`66Aap7>7&EA6@rTv$YUCSu3F%NqZxLv&{^R{^#|TkOWft2T*cf{m*-~N*?=mTuWL6gf;2m9XlL4Jd6abad>_QwQkZYOP0hR3! zJUUovjKr=nEcQmNo>e|l-z^IwkaG* zRVa%&{Ar7DkjKfOK+@vS`dY#qc-)6{{?h*AF##~R1~lNKu20OfP?|_1_1E>Eg)5Uh}>1RyTZ5)*@a-QcYk{IF5v0}`E-bVMjO}T zE~In8H)#jmI0~99SdQ+`H$8;vkH~3ESAA6%Z;X{)^x7h)a9W7L$vV*gx{-dV*)QX% zY97r?U7g})AiJe`T{VF0qn+@kba?#mufyFyVaVOxWtD-)cg2Pj+VDra?|6{vm|Kf|0;vq#&MX4;z<@Iut!PO2XJuaL!>F6eIE6yeUZMnPVwy-p zikRj#j6J+Kra`GkJ-x8w2Wq2K+QQ$WlU$)kx?DI7KaC+1H&5m#t3$D%xbtIHkEf3= zbhOU&x-82v1T++Mx*p6rQIq6l`}3%{5e~?0IKgg+_}*{{7o@2`AB6T^B)r`Z9@y6i2Yp+q?AP%B zwpv<`6EFBL&!P2x!Q5I+Xap`pt?)ec$H$LP^AY}0Tk?wEL6MFNY99IEn?U)KFF?q4 z^`+WxuqgOK5PiSJU*0=EW^ro4($d_`1DLGwo5tax|5_nI+$TPXo^?q?6pYjdECW>?gL+H_c2k~tr{cmZsX@5T<`}hStedKX5;yWTg=*N>G z4AHGud@PBvolpupV|vV{=MrW(5v`RZN?wbEUk*1*;IjnRY{SNm`{ujtY|frrN0>&{ z#2D$6Oqr|tUMH`kpc?sOI{JKCft4GbqeJe8HLR-dhIK5J)k`pOfGW+~U-4p@?jA7q zn74y0wD=L&A2@Z1z*hd=DH2Qr8J9oX`ndbL-!9>ylRwl=Oa3W@9OM(Cyx_CVW@^Ha zq+nCwGWU%eC<$E^tZ(*pzBn&UQfBKFN2Mf>6#MNyTfKW*GTu1dJE7NB8H(z%?lt`3 z*M4StU43Pb)RHipo{XG;f(paUBH0QUjwVC}uY-T8fh$$X}DEpPc$|=+*-{6<6S1JL}ab|h->Exm& z2Aie|+Mbya8<*#(r#m4HAMp163U7*|*B#6p&`sw{zY9pgmxJkO{D`QII@`e;Y9Jqz-qCZB-;0;M3j9`t9}Us~ zzPw<*=*TcKj^)ca3*G>zG8Zezj-r#hlHUWz>CTtpFrIj5x5#5t`DvDqkuy`Q<~|bF z`p!GA&bIRtOQ$l=!O>DCuqLDHc8J{<4w35lACd)qP;)F@IuG8H_eWodGWJe z4BUznvD5>xf~M{hA9ov!LG>Za+8*AQKL-RfhYLr9N|?iX+5O{f*xVIxHpkbX-ef6|#_OS93L5Ki+5j<$_m(oBKpbQ)hHe)#%g>W%Z&FD} zV_)FYpr#LG{w%#imLx9JawL*3A+FfMRiO$363Qwzr~>&aSz)HDy(@`I*1`(MBaos9 z_Fbx|L$ru$EM2{HnnH|mQ6InZthuM<`9ooW6P7u~Gh2n0NU+WEh3ra-3jC-J+fo_L zGMT31Sh2z6-uWc|y6#>F*Dqt24S-JA$GD_P$my4YFFLS#2iSqBvkWn>msqFnNJk@b z47;r45IFbsh0En-QN}dR5qFQ)O0#mTrEq06U2~0D3CBp3g=%;_jX>08_uO6QCbMNv z=L;IhgvPz)b7(gOZ;!zzAKtGaKjfL#H><*FTqOHvZp8)yXn4oyG6I|3|m8&T)j z1BcNJp8L9F+{x(yyuMAfeMZ0h?u87(BrI~=zRraqGb69@{(M+Ps>w6@4a=RfJbJ$v za-fA(_`GpONsX9!JRlVO*cV55u_)2!78EZ#);YuRQnD)T4TriC($UBFC%Ik&M}MqE z+(?+u5Npg>fX|gt>a%5m9F=?H0dsaD5d+A6{JM@;-j|u~YR5Z^JG7h?=Kb$oGuwx-JDVyOXZhGo()R3$DVKzcy~wkOc&OE!J`P)XbRMIS7ua%q6{ zd#*0q`!cO&hs5ZqoPP3)as^yl=_ZoO^weLni-;QYdd2YWJr7zf*?YIJ1#=Ydrmd(;qjvU_vMVBm z;YV%`E`xsS4ofm?foplK638Ld z|36IQ+lRaS!w+B+#Te(l9*#@Dq5IM|gQGcRKi^=nVQeu*H39&7XYa)jkE`=tV$2!t-o#Q!}$e$7kh7xF&^OaIwz#Z z2hRo3bO-)&;q$7pi2d~Q*W(f8;76}qrld5~_P>rKALBjjpz;}6-n}b!-IvKvXHs}! zxQ3|*i2Y|qX;fZ+KU-)g$t$!dGwSn2dI2SbgZQDgAqrIxGGB^NgoKqabVNn!`nzGguw|zG%dr_H7h~ zJcTteSPieV7Fa6baS&ewHLOBu5ehl|fM+c5g4wT>lwUHgYF7+e&c&ZDEp9fg;7KF^ z5o*LgQGo{*vojEkD^MNLJ%0T=eoNn8_0y~4iTTjpxQK&ss(-CB9u=l%6I7((c?RkV z2FYw68g+vvU)F*VT z4CBe7;I`mQurqRYbLROCQkb#HukA|PC7x&`KJWJM2l#ro`ep&-4ny*GExFY=q2+PW zxx?CXQ5sm>SZW!qv*|5>25FBK7VNP^zZv!wF~kE)hCzn zs^k=n@io&P{WV$Tom&%OLS%;3#Z`Da3fF+mc7|cPu!GoRnQZ@iVo*g))?K+!Iwo*$g4$G{LRa}n zut0#+sw$4Gy^=q!G?z7wzI^4w+MJ`o-{@X#E%MJwHbXZm0o&zj(Xlb4ll;+VBijyo z95GdSPnk_vi(v(?&Y~z%azPaIY#>!_+HpCYmS}G_lANdKC-)P!p)++KK2*-6HZDe^ z5yT)wVWDJqAZJ7p+3t`u8O`{Na~&65fN#HWc9r7v9WC&DcbCJ*15Y{Im*=E$Gbr+~ z^goa4BgKh6J=i;PbYBrR8GXVAOb86eAkMIAk?<~*SmgEB**dHx(&qsvT0VMaQE6oU=|(zo@W^J(scz$(@EEH8IP8}IzHP)-sb1)KlMa!TWBf>SQ?T7C^NG~ zb9haM%T(@Uuj6o*^Xm~>JDu%^C^ag`V19Iea8xfk{@G--dG-6cbIbLqv=*5H@W~A# z6COPPs_nv)Xvu<^&>3gQe4(jAFlOH5w6-nrmAyX3+1{JxK8HL!P0`z*UQ_-SD7Zt2^T(1edCUuy}kRWf<)>%F&V zB>alu%Y+=^ti#B6mToq7g@~QTFGkc=#r*F$R;Sa&SqFzL6ZArDMG(}Z<0-wjE6p4l z&%RJDb@x5eX$-hD64qWQrO>5cp_M5LAJf#!c3^RxD^C6C@_nIC^oRT2&yjud`xPpe zsQPkBI~i54k5ptBhstouHRspU^xKRgky-krsEkXd(%Tm+&taj~cIe?7XehUAn5yKS z0!1e~u2j{%Kd%Wg&hbBS!)lHo!!#K!!Pv{x*O(a`VDDqhK?YupuYj)|1CUN2ML~iJ z*X(pC1ZV$)LXAtCorxf4>2bl25 z;}Q*e8BH)G`G3&C&olT;E%(?>FSvDmZd?a05rz( zf*Y%36m6gk#Lay6ixwhu%=JDGE<_xF_oZD%lli^(o8p7N2RVnN0}gIDyBfWu z2FcqW4Q=JWxTojKda(0`ppCu2KTN2%^{qTxNWHfCSFOdiN@b`*qe$iScUGv2gjz=b z`)R>98(xu@Wuh9++G@rsX%FyK0KHxw64g%|>cn~}wr5YO*$7<|U+$KB9Q<7D9_e^x zcCxS;f>(%~r$Of%Us_7!*4?jfnJCw93W|r-kTCPm0HXH5pf$9?9#s?ntXr0$bI?&L zv+t7OQ&vSx_IAp>tryST4)Tk`|Gs^1F97muOyx_{)CzlVS?964VPs$F(^vea zsAk>c<@vXlYA?UC{%JWgeag}BYmShw&y?SKsj+UZh;`go`};M-&g5%y+RVM2`f&Mb z=wzr^sE-Y*?g#x}g-RD>&S?n^Qjv%WFJ*=GyNnnqDxGK>WN4CaxI{6LvLaGG8Ip2B z_)wtn@Kd_~YL*MOW{GC+vAn0e8j-$FRP&PTFBo2nGr|b6$R^MECbpZpor zANibhZv-HNqm!+^{|AM}@xWj`<}vfOs_EP6!eT4z`L&+9HLAO+mLpgLh-t3kB zxZ60KV~3W~AdACE^60R)YvVM&{TM?zvTv%@;ZAUVD?cH2pygo-jTrXSb?-Co3Vpot z&xJDS+xk39UEC41GzvqRpUME_365|ez{URt{~712b1TQ-?3Jv4(oJubq3<0JX$k;U z<$Gx1>x2?oM<=5S-ee<0; zWL@{=50Wqgb+#aC18mF$-EzTsEVGeMwYR7M%Dh52&!yiQ3M*g(#}g;VBPD`G`|DI} z8o1L5Q+5}uOOklt?9?N)`{Lu5gIK2NzVG~~G5mg~fC?0DR+5RwyPv%dq3lNtL7q*E zgWN}LuB-v%9QYKm#eQzi)H-@4QCxn~j*O7RqjFmXe_FYTG+Y`Z9&Y6xjR7UD{#E?4 z5lubSkf(T4zGMXGHC;k*bSz7IB!CGKGDw5!%Y;tAdf{slTvpFWmN%(BNLw=$ILDDb z*fv>XmbL9+Wfj67RMwA9xO#Oqe8IR^X%m`VLF(V)c(XTIrP0S>KGmXjC-Bb#{qj2q z;>7HwynG`N2e@^96~_=)Xc%nVy+t0e`$g~Hdxk7-Jc_3@?heVw`GIC7{=lUxPR3>| zK4?JDC9yFcOUm%*-E_F$_k$;8-^wUW+|rCY*@XMM0_6`sX@H+8yKAqSNXNp$^Ck!X zgkF0t`ctVQTxh>=K(~vGwZOa~aqLCvE87y?1Y-P}>SCQQuteCpCC%|1U z$E1_Kx&ybLxGLk7=H!dg$&QLxQPkT%;^ATYsqx(F2}P$-=V&4@m!Rl%)Hd5OVJ-ZA#sJsFj!}IDHQMn&lh^v9lfu1 zM$+>$$=$I=cu52`FS~_$v>qg_@eaNRT;Aqj1~E~ZTNmF>mf z(#7`Lg?4P{Yy~Sez1+4>(T)sT>Jj0=[p%&HFK|Dd3=C>8f?WYvGy@*Y2~&QN$5 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
O#2YwL+2MOe7-^4>G$OFw|z&Q4~!R@T)Hg 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 OdN7Y(CJ{q1Ym)< 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 x1-(wAyJL{QbIym5 - + PreserveNewest diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 30861cd..1776343 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -1,4 +1,5 @@ using System.Numerics; +using System.Reflection.Emit; using System.Text; using Drawie.Backend.Core.ColorsImpl; using Drawie.Backend.Core.ColorsImpl.Paintables; @@ -66,17 +67,6 @@ private void RenderImGui(double dt) protected override void OnInitialize() { - Material mat = new Material("Basic", [BuiltInShaders.BasicVertexShader, BuiltInShaders.UnlitFragmentShader]); - - var surf = GraphicsStore.Global.Create(new VecI(512, 512)); - RenderingContext context = new RenderingContext(GraphicsStore.Global.GraphicsContext); - var ctx = context.Open(); - var fb = context.Edit(surf); - fb.DrawRectangle(0, 0, 512, 512, new ColorPaintable(Colors.Blue)); - fb.Dispose(); - ctx.Dispose(); - - mat.AddTexture(surf); handleMovement = true; window.InputController.PrimaryPointer.Cursor.State = CursorState.Disabled; @@ -89,8 +79,15 @@ protected override void OnInitialize() } }; - camera = new Camera(Vector3.Zero, Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); - Mesh mesh = new Mesh("Assets/teapot.obj"); + camera = new Camera(new Vector3(0, 0, 5), Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); + + //"Shiba" (https://skfb.ly/6WxVW) by zixisun02 is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/). + Scene scene = new Scene("Assets/shiba.fbx", Path.Combine("Assets", "textures")); + + foreach (var sceneMesh in scene.Meshes) + { + sceneMesh.Transform.Rotation = Quaternion.CreateFromAxisAngle(Vector3.UnitX, float.DegreesToRadians(-90)); + } RegisterMouse(window.InputController); @@ -103,28 +100,10 @@ protected override void OnInitialize() window.Render += (targetTexture, deltaTime) => { targetTexture.Clear(); - - targetTexture.DrawMesh(mesh, mat, camera, renderOptions); - - /* - using Font defaultFont = Font.CreateDefault(); - Paintable color = new ColorPaintable(Colors.White); - StringBuilder sb = new StringBuilder(); - sb.AppendLine("Stores: " + GraphicsStore.AllStores.Count); - foreach (var store in GraphicsStore.AllStores) - { - sb.AppendLine("Store: " + store.GetDebugText()); - } - - RichText rt = new RichText(sb.ToString()) { Fill = true, FillPaintable = color }; - - using Paint p = new Paint() { Paintable = color }; - - rt.Paint(targetTexture.Canvas, new VecD(0, 20), defaultFont, p, null);*/ + targetTexture.DrawScene(scene, camera, renderOptions); }; } - private void RegisterMouse(InputController input) { for (int i = 0; i < input.Pointers.Count; i++) diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index 2a08667..46ce7be 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); Drawie2SampleApp app = new Drawie2SampleApp(); diff --git a/src/DrawieSample/DrawieSample.csproj b/src/DrawieSample/DrawieSample.csproj deleted file mode 100644 index 8672b41..0000000 --- a/src/DrawieSample/DrawieSample.csproj +++ /dev/null @@ -1,13 +0,0 @@ - - - - net10.0 - enable - enable - - - - - - - diff --git a/src/DrawieSample/DrawieSampleApp.cs b/src/DrawieSample/DrawieSampleApp.cs deleted file mode 100644 index cceca60..0000000 --- a/src/DrawieSample/DrawieSampleApp.cs +++ /dev/null @@ -1,94 +0,0 @@ -using Drawie.Backend.Core; -using Drawie.Backend.Core.ColorsImpl; -using Drawie.Backend.Core.Shaders; -using Drawie.Backend.Core.Surfaces; -using Drawie.Backend.Core.Surfaces.ImageData; -using Drawie.Backend.Core.Surfaces.PaintImpl; -using Drawie.Numerics; -using Drawie.Windowing; -using DrawiEngine; - -namespace DrawieSample; - -public class DrawieSampleApp : DrawieApp -{ - private IWindow window; - - public override IWindow CreateMainWindow() - { - window = Engine.WindowingPlatform.CreateWindow("Drawie Sample", new VecI(800, 600)); - return window; - } - - protected override void OnInitialize() - { - Paint paint = new Paint() { IsAntiAliased = true }; - - NativeTexture testNativeTexture = new NativeTexture(new VecI(800, 600)); - DrawHorizontalColorStrips(testNativeTexture, paint); - - DrawBlendTestHorizontalStrips(testNativeTexture, paint); - - DrawingSurface srgbSurface = DrawingSurface.Create(new ImageInfo(testNativeTexture.Size.X, testNativeTexture.Size.Y, - ColorType.Rgba8888, AlphaType.Premul, ColorSpace.CreateSrgb()) { GpuBacked = true }); - - srgbSurface.Canvas.DrawSurface(testNativeTexture.DrawingSurface, 0, 0); - - window.Render += (targetTexture, deltaTime) => - { - targetTexture.DrawingSurface.Canvas.Clear(Colors.White); - targetTexture.DrawingSurface.Canvas.DrawSurface(srgbSurface, 0, 0); - DrawReferenceColors(targetTexture, paint); - }; - } - - private void DrawReferenceColors(NativeTexture targetNativeTexture, Paint paint) - { - using Paint referencePaint = new Paint() { IsAntiAliased = true }; - referencePaint.Color = Colors.Black; - targetNativeTexture.DrawingSurface.Canvas.DrawRect(0, 0, 5, 5, referencePaint); - referencePaint.Color = Colors.White; - targetNativeTexture.DrawingSurface.Canvas.DrawRect(5, 0, 5, 5, referencePaint); - referencePaint.Color = Color.FromRgb(255, 0, 0); - targetNativeTexture.DrawingSurface.Canvas.DrawRect(10, 0, 5, 5, referencePaint); - referencePaint.Color = Color.FromRgb(0, 255, 0); - targetNativeTexture.DrawingSurface.Canvas.DrawRect(15, 0, 5, 5, referencePaint); - referencePaint.Color = Color.FromRgb(0, 0, 255); - targetNativeTexture.DrawingSurface.Canvas.DrawRect(20, 0, 5, 5, referencePaint); - } - - private void DrawHorizontalColorStrips(NativeTexture targetNativeTexture, Paint paint) - { - int stripWidth = targetNativeTexture.Size.X / 4; - int stripHeight = targetNativeTexture.Size.Y; - - int spacing = 10; - - Color[] colors = [Color.FromRgb(0, 255, 0), Colors.Yellow, Colors.Cyan, Colors.Magenta]; - - for (int i = 0; i < 4; i++) - { - paint.Color = colors[i]; - targetNativeTexture.DrawingSurface.Canvas.DrawRect(i * stripWidth + spacing, spacing, stripWidth - 2 * spacing, - stripHeight, paint); - } - } - - private void DrawBlendTestHorizontalStrips(NativeTexture targetNativeTexture, Paint paint) - { - int stripWidth = targetNativeTexture.Size.X; - int stripHeight = targetNativeTexture.Size.Y / 3; - - int spacing = 50; - - Color[] colors = [Colors.Red, Colors.Blue, Colors.Green]; - - for (int i = 0; i < 3; i++) - { - paint.Color = colors[i].WithAlpha(128); - paint.Style = PaintStyle.Fill; - targetNativeTexture.DrawingSurface.Canvas.DrawRect(0, i * stripHeight + spacing, stripWidth, - stripHeight - 2 * spacing, paint); - } - } -} From 21acbd1d4fc3f2010cb6185a195e71e8569aba25 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 15 Aug 2026 21:37:18 +0200 Subject: [PATCH 26/55] Some MiniUI improvements --- src/Drawie.Host.Glfw/GlfwHost.cs | 4 +- src/Drawie.Layer.UI.MiniUi/Controls/Button.cs | 22 ++- .../Controls/CollapsableGroup.cs | 115 ++++++++++++++++ src/Drawie.Layer.UI.MiniUi/Controls/Glyph.cs | 62 +++++++++ src/Drawie.Layer.UI.MiniUi/Controls/Label.cs | 45 +++++++ src/Drawie.Layer.UI.MiniUi/Controls/Layout.cs | 47 +++++++ .../Controls/OutlinedRectangle.cs | 49 +++++++ src/Drawie.Layer.UI.MiniUi/Controls/Panel.cs | 126 ++++++++++++++++++ src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs | 4 +- src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs | 28 +++- src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs | 1 - src/Drawie2Sample/Drawie2SampleApp.cs | 33 ++++- src/DrawieSample.Desktop/Program.cs | 2 +- 13 files changed, 518 insertions(+), 20 deletions(-) create mode 100644 src/Drawie.Layer.UI.MiniUi/Controls/CollapsableGroup.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/Controls/Glyph.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/Controls/Label.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/Controls/Layout.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/Controls/OutlinedRectangle.cs create mode 100644 src/Drawie.Layer.UI.MiniUi/Controls/Panel.cs diff --git a/src/Drawie.Host.Glfw/GlfwHost.cs b/src/Drawie.Host.Glfw/GlfwHost.cs index 1e904b1..ff28b18 100644 --- a/src/Drawie.Host.Glfw/GlfwHost.cs +++ b/src/Drawie.Host.Glfw/GlfwHost.cs @@ -81,8 +81,10 @@ public GlfwHost(string name, VecI size, IHostViewRenderApi renderApi) { Title = name, Size = size.ToVector2DInt(), - API = renderApi is IVulkanHostViewRenderApi ? GraphicsAPI.DefaultVulkan : GraphicsAPI.Default + API = renderApi is IVulkanHostViewRenderApi ? GraphicsAPI.DefaultVulkan : GraphicsAPI.Default, + Samples = 4 }); + window.Load += () => Loaded?.Invoke(); RenderApi = renderApi; diff --git a/src/Drawie.Layer.UI.MiniUi/Controls/Button.cs b/src/Drawie.Layer.UI.MiniUi/Controls/Button.cs index c66b584..016ec98 100644 --- a/src/Drawie.Layer.UI.MiniUi/Controls/Button.cs +++ b/src/Drawie.Layer.UI.MiniUi/Controls/Button.cs @@ -16,27 +16,37 @@ public static bool Show(string label) RichText rt = new RichText(label); rt.Fill = true; - using Font font = Font.FromFontFamily(MiniUiStyle.Active.FontFamily); + Font font = MiniUiStyle.Active.Font; VecF bounds = CalculateBounds(rt, font); using Paint btnPaint = new Paint(); RectD btnBounds = new RectD(ctx.CurrentPosition.X, ctx.CurrentPosition.Y, bounds.X, bounds.Y); - btnBounds.Size += new VecD(MiniUiStyle.Active.HorizontalPadding * 2, MiniUiStyle.Active.VerticalPadding * 2); + btnBounds.Size += new VecD(MiniUiStyle.Active.Padding * 2, MiniUiStyle.Active.Padding * 2); bool hitTest = btnBounds.ContainsInclusive(MiniUiContext.Active.PointerPosition); - btnPaint.Paintable = hitTest ? MiniUiStyle.Active.BackgroundLow : MiniUiStyle.Active.BackgroundMid; + btnPaint.Paintable = hitTest ? MiniUiStyle.Active.BackgroundHigh : MiniUiStyle.Active.BackgroundMid; - ctx.Framebuffer.Canvas!.DrawRect(btnBounds, btnPaint); + OutlinedRectangle.Draw(btnBounds, btnPaint.Paintable, hitTest ? MiniUiStyle.Active.BorderHigh : MiniUiStyle.Active.BorderMid); btnPaint.Paintable = MiniUiStyle.Active.Foreground; rt.FillPaintable = MiniUiStyle.Active.Foreground; bool justPressed = !ctx.LastState.PressedPointerButtons[PointerButton.Left] && ctx.InputController.PrimaryPointer.IsButtonPressed(PointerButton.Left); - - rt.Paint(ctx.Framebuffer.Canvas, new VecD(ctx.CurrentPosition.X + MiniUiStyle.Active.HorizontalPadding, ctx.CurrentPosition.Y + bounds.Y + MiniUiStyle.Active.VerticalPadding / 2f), font, btnPaint,null); + + RectD drawBounds = + new RectD( + new VecD(ctx.CurrentPosition.X + MiniUiStyle.Active.Padding, + ctx.CurrentPosition.Y + bounds.Y + MiniUiStyle.Active.Padding / 2f), btnBounds.Size); + + if (ctx.Framebuffer != null) + { + rt.Paint(ctx.Framebuffer?.Canvas, drawBounds.Pos, font, btnPaint, null); + } + + Panel.Advance(btnBounds); return hitTest && justPressed; } diff --git a/src/Drawie.Layer.UI.MiniUi/Controls/CollapsableGroup.cs b/src/Drawie.Layer.UI.MiniUi/Controls/CollapsableGroup.cs new file mode 100644 index 0000000..8d227eb --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/Controls/CollapsableGroup.cs @@ -0,0 +1,115 @@ +using Drawie.Host.Input; +using Drawie.Layer.UI.MiniUi.Exceptions; +using Drawie.Numerics; + +namespace Drawie.Layer.UI.MiniUi.Controls; + +public static class CollapsableGroup +{ + private const string ExpandedGlyph = "M7.47461 10.5L14 3.5L0 3.5L7.47461 10.5Z"; + + private const string CollapsedGlyph = "M10.5 6.52539L3.5 0L3.5 14L10.5 6.52539ZM10.5 6.52539L3.5 0L3.5 14L10.5 6.52539Z"; + + private static readonly Dictionary States = new(); + + private static readonly Stack ActiveGroups = new(); + + private const float GlyphSize = 12; + + private static VecF startPos; + + public static bool Begin(string id, string label) + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + bool expanded = States.GetValueOrDefault(id, true); + + startPos = ctx.CurrentPosition; + + Layout.BeginMeasure(); + Panel.BeginRow(); + + Glyph.Draw(expanded ? ExpandedGlyph : CollapsedGlyph); + Label.Show(label); + + Panel.EndRow(); + + var measured = Layout.EndMeasure(); + var bounds = measured; + bounds.Size += new VecD(MiniUiStyle.Active.Padding * 2); + + ctx.Framebuffer?.DrawRectangle((float)measured.X, (float)measured.Y, (float)bounds.Width, (float)bounds.Height, MiniUiStyle.Active.BackgroundHigh); + + + Panel.BeginRow(); + + ctx.CurrentPosition += new VecF(MiniUiStyle.Active.Padding, MiniUiStyle.Active.Padding); + Glyph.Draw(expanded ? ExpandedGlyph : CollapsedGlyph, GlyphSize); + ctx.CurrentPosition += new VecF(0, MiniUiStyle.Active.Padding / 2f); + + Label.Show(label); + + Panel.EndRow(); + + bool hovered = bounds.ContainsInclusive(ctx.PointerPosition); + + bool justPressed = + !ctx.LastState.PressedPointerButtons[PointerButton.Left] && + ctx.InputController.PrimaryPointer.IsButtonPressed( + PointerButton.Left); + + if (hovered && justPressed) + { + expanded = !expanded; + States[id] = expanded; + } + + if (!expanded) + { + ctx.CurrentPosition = new VecF( + (float)measured.X, + (float)measured.Bottom); + + return false; + } + + ActiveGroups.Push(new GroupState(bounds)); + + ctx.CurrentPosition = new VecF( + (float)bounds.X + GlyphSize / 2f, + (float)bounds.Bottom + MiniUiStyle.Active.Spacing); + + return true; + } + + public static void End() + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + if (ActiveGroups.Count == 0) + throw new InvalidOperationException( + "CollapsableGroup.End() was called without a matching Begin()."); + + GroupState state = ActiveGroups.Pop(); + + double bottom = Math.Max( + state.HeaderBounds.Bottom, + ctx.CurrentPosition.Y); + + ctx.CurrentPosition = new VecF( + (float)state.HeaderBounds.X, + (float)bottom); + + RectD bounds = RectD.FromTwoPoints((VecD)startPos, new VecD(state.HeaderBounds.X, ctx.CurrentPosition.Y)); + + Panel.Advance(bounds); + } + + private readonly record struct GroupState(RectD HeaderBounds); +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/Controls/Glyph.cs b/src/Drawie.Layer.UI.MiniUi/Controls/Glyph.cs new file mode 100644 index 0000000..c7e295d --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/Controls/Glyph.cs @@ -0,0 +1,62 @@ +using Drawie.Backend.Core.Numerics; +using Drawie.Backend.Core.Surfaces.PaintImpl; +using Drawie.Backend.Core.Vector; +using Drawie.Layer.UI.MiniUi.Exceptions; +using Drawie.Numerics; + +namespace Drawie.Layer.UI.MiniUi.Controls; + +public static class Glyph +{ + public static void Draw(string svg, double size = 14) + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + using var path = VectorPath.FromSvgPath(svg); + + RectD bounds = new RectD( + ctx.CurrentPosition.X, + ctx.CurrentPosition.Y, + size, + size); + + RectD pathBounds = path.Bounds; + + if (pathBounds.Width > 0 && pathBounds.Height > 0) + { + double scale = Math.Min( + size / pathBounds.Width, + size / pathBounds.Height); + + double scaledWidth = pathBounds.Width * scale; + double scaledHeight = pathBounds.Height * scale; + + double x = bounds.X + (size - scaledWidth) / 2; + double y = bounds.Y + (size - scaledHeight) / 2; + + var transform = + Matrix3X3.CreateScale((float)scale, (float)scale); + + path.Transform(transform); + + RectD scaledBounds = path.Bounds; + + path.Offset( + new VecD( + x - scaledBounds.X, + y - scaledBounds.Y)); + } + + using Paint paint = new Paint + { + Paintable = MiniUiStyle.Active.Foreground + }; + + ctx.Framebuffer?.Canvas!.DrawPath(path, paint); + + Panel.Advance(bounds); + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/Controls/Label.cs b/src/Drawie.Layer.UI.MiniUi/Controls/Label.cs new file mode 100644 index 0000000..18510cd --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/Controls/Label.cs @@ -0,0 +1,45 @@ +using Drawie.Backend.Core.Surfaces.PaintImpl; +using Drawie.Backend.Core.Text; +using Drawie.Layer.UI.MiniUi.Exceptions; +using Drawie.Numerics; + +namespace Drawie.Layer.UI.MiniUi.Controls; + +public static class Label +{ + public static void Show(string text) + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + RichText rt = new RichText(text) + { + Fill = true, + FillPaintable = MiniUiStyle.Active.Foreground + }; + + Font font = MiniUiStyle.Active.Font; + using Paint paint = new Paint + { + Paintable = MiniUiStyle.Active.Foreground + }; + + VecF size = CalculateBounds(rt, font); + + RectD bounds = new RectD(new VecD(ctx.CurrentPosition.X, ctx.CurrentPosition.Y), (VecD)size); + + if (ctx.Framebuffer != null) + { + rt.Paint(ctx.Framebuffer.Canvas, bounds.Pos + new VecD(0, size.Y), font, paint, null); + } + + Panel.Advance(bounds); + } + + private static VecF CalculateBounds(RichText label, Font? font) + { + return (VecF)label.MeasureBounds(font).Size; + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/Controls/Layout.cs b/src/Drawie.Layer.UI.MiniUi/Controls/Layout.cs new file mode 100644 index 0000000..79f4b7e --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/Controls/Layout.cs @@ -0,0 +1,47 @@ +using Drawie.Layer.UI.MiniUi.Exceptions; +using Drawie.Numerics; +using Drawie.Rendering; + +namespace Drawie.Layer.UI.MiniUi.Controls; + +public static class Layout +{ + private static Stack sessions = new Stack(); + + public static void BeginMeasure() + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + sessions.Push(new MeasurementSession(ctx.CurrentPosition, ctx.Framebuffer)); + ctx.Framebuffer = null; + } + + public static RectD EndMeasure() + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + var session = sessions.Pop(); + RectD rect = RectD.FromTwoPoints((VecD)session.Cursor, (VecD)ctx.CurrentPosition); + ctx.CurrentPosition = session.Cursor; + ctx.Framebuffer = session.SavedFramebuffer; + return rect; + } + + private struct MeasurementSession + { + public VecF Cursor { get; set; } + public TextureFramebuffer SavedFramebuffer { get; set; } + + public MeasurementSession(VecF cursor, TextureFramebuffer savedFramebuffer) + { + Cursor = cursor; + SavedFramebuffer = savedFramebuffer; + } + } +} diff --git a/src/Drawie.Layer.UI.MiniUi/Controls/OutlinedRectangle.cs b/src/Drawie.Layer.UI.MiniUi/Controls/OutlinedRectangle.cs new file mode 100644 index 0000000..5cfec55 --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/Controls/OutlinedRectangle.cs @@ -0,0 +1,49 @@ +using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Backend.Core.Surfaces.PaintImpl; +using Drawie.Layer.UI.MiniUi.Exceptions; +using Drawie.Numerics; + +namespace Drawie.Layer.UI.MiniUi.Controls; + +public static class OutlinedRectangle +{ + public static void Draw(RectD bounds, Paintable fill, Paintable stroke) + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + using var paint = new Paint(); + + paint.Style = PaintStyle.StrokeAndFill; + paint.Paintable = stroke; + + double strokeThickness = MiniUiStyle.Active.StrokeThickness; + double radius = MiniUiStyle.Active.Rounding; + + var strokeBounds = bounds.Inflate(strokeThickness); + + ctx.Framebuffer?.Canvas!.DrawRoundRect( + (float)strokeBounds.X, + (float)strokeBounds.Y, + (float)strokeBounds.Width, + (float)strokeBounds.Height, + (float)(radius + strokeThickness), + (float)(radius + strokeThickness), + paint); + + paint.Style = PaintStyle.Fill; + paint.Paintable = fill; + + ctx.Framebuffer?.Canvas!.DrawRoundRect( + (float)bounds.X, + (float)bounds.Y, + (float)bounds.Width, + (float)bounds.Height, + (float)radius, + (float)radius, + paint); + + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/Controls/Panel.cs b/src/Drawie.Layer.UI.MiniUi/Controls/Panel.cs new file mode 100644 index 0000000..59ff04d --- /dev/null +++ b/src/Drawie.Layer.UI.MiniUi/Controls/Panel.cs @@ -0,0 +1,126 @@ +using Drawie.Backend.Core.ColorsImpl.Paintables; +using Drawie.Layer.UI.MiniUi.Exceptions; +using Drawie.Numerics; + +namespace Drawie.Layer.UI.MiniUi.Controls; + +public static class Panel +{ + private static readonly Stack States = new(); + + public static void BeginColumn() + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + States.Push(new PanelState( + ctx.CurrentPosition, + LayoutDirection.Column)); + } + + public static void EndColumn() + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + if (States.Count == 0) + throw new InvalidOperationException( + "Panel.EndColumn() was called without a matching Panel.BeginColumn()."); + + PanelState state = States.Pop(); + + if (state.Direction != LayoutDirection.Column) + throw new InvalidOperationException( + "Panel.EndColumn() does not match the current panel layout."); + + Advance(state.OwnSize); + } + + public static void BeginRow() + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + States.Push(new PanelState(ctx.CurrentPosition, LayoutDirection.Row)); + } + + public static void EndRow() + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + if (States.Count == 0) + throw new InvalidOperationException( + "Panel.EndRow() was called without a matching Panel.BeginRow()."); + + PanelState state = States.Pop(); + + if (state.Direction != LayoutDirection.Row) + throw new InvalidOperationException( + "Panel.EndRow() does not match the current panel layout."); + + Advance(state.OwnSize); + } + + public static void Advance(RectD bounds) + { + MiniUiContext? ctx = MiniUiContext.Active; + + if (ctx == null) + throw new MiniUiMissingContextException(); + + if (States.Count == 0) + { + ctx.CurrentPosition = new VecF( + ctx.CurrentPosition.X, + (float)bounds.Bottom); + + return; + } + + PanelState state = States.Peek(); + + state.OwnSize = state.OwnSize.Union(bounds); + + switch (state.Direction) + { + case LayoutDirection.Column: + ctx.CurrentPosition = new VecF(state.Position.X, (float)bounds.Bottom + MiniUiStyle.Active.Spacing); + break; + + case LayoutDirection.Row: + ctx.CurrentPosition = new VecF((float)bounds.Right + MiniUiStyle.Active.Spacing, state.Position.Y); + break; + } + } + + private sealed class PanelState + { + public VecF Position { get; } + public LayoutDirection Direction { get; } + + public RectD OwnSize { get; set; } + + public PanelState( + VecF position, + LayoutDirection direction) + { + Position = position; + Direction = direction; + } + } + + private enum LayoutDirection + { + Row, + Column + } +} \ No newline at end of file diff --git a/src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs b/src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs index 3f8acdd..e24965b 100644 --- a/src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs +++ b/src/Drawie.Layer.UI.MiniUi/MiniUiContext.cs @@ -8,8 +8,8 @@ public class MiniUiContext : IDisposable { public static MiniUiContext? Active { get; private set; } - public TextureFramebuffer? Framebuffer { get; private set; } - public VecF CurrentPosition { get; private set; } + public TextureFramebuffer? Framebuffer { get; set; } + public VecF CurrentPosition { get; set; } public VecD PointerPosition {get; private set;} public InputController InputController { get; private set; } diff --git a/src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs b/src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs index c515c75..9808b1f 100644 --- a/src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs +++ b/src/Drawie.Layer.UI.MiniUi/MiniUiStyle.cs @@ -12,15 +12,39 @@ public class MiniUiStyle Foreground = new ColorPaintable(Colors.White), BackgroundLow = new ColorPaintable(Color.FromHex("#202020")), BackgroundMid = new ColorPaintable(Color.FromHex("#252525")), + BackgroundHigh = new ColorPaintable(Color.FromHex("#303030")), + BorderMid = new ColorPaintable(Color.FromHex("#303030")), + BorderHigh = new ColorPaintable(Color.FromHex("#404040")) }; public static MiniUiStyle Active { get; set; } = Default; public Paintable BackgroundLow { get; set; } public Paintable BackgroundMid { get; set; } + public Paintable BackgroundHigh { get; set; } public Paintable Foreground { get; set; } + public Paintable BorderMid { get; set; } + public Paintable BorderHigh { get; set; } public FontFamilyName FontFamily { get; set; } = new FontFamilyName("$Default"); public float FontSize { get; set; } = 12; - public float HorizontalPadding { get; set; } = 4; - public float VerticalPadding { get; set; } = 4; + public float Padding { get; set; } = 4; + public float Spacing { get; set; } = 8; + public float Rounding { get; set; } = 2; + public Font Font => CreateFont(); + public float StrokeThickness { get; set; } = 1.5f; + + private static Font cachedFont; + + private Font CreateFont() + { + if (cachedFont == null || cachedFont.Size != FontSize || cachedFont.Family.Name != FontFamily.Name) + { + cachedFont?.Dispose(); + var font = Font.FromFontFamily(FontFamily); + font.Size = FontSize; + cachedFont = font; + } + + return cachedFont; + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs index 3db6539..1ba9e10 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs @@ -45,7 +45,6 @@ public void Apply(ICommandList list) Api.Disable(EnableCap.DepthTest); } - Api.Disable(EnableCap.CullFace); Api.ClearColor(0, 0, 0, 1); Api.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit); Api.PolygonMode(TriangleFace.FrontAndBack, Description.Rasterizer.RenderMode == RenderMode.Wireframe ? PolygonMode.Line : PolygonMode.Fill); diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 1776343..76741b8 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -18,6 +18,7 @@ using Drawie.Rendering; using DrawiEngine; using ImGuiNET; +using Label = Drawie.Layer.UI.MiniUi.Controls.Label; namespace Drawie2Sample; @@ -48,10 +49,24 @@ public override IHost CreateMainWindow() private void RenderMiniUi(double dt) { - string text = renderOptions.RenderMode == RenderMode.Default ? "Enable wireframe" : "Enable solid fill"; - if (Button.Show(text)) + if (CollapsableGroup.Begin("debug", "Debug")) { - renderOptions.RenderMode = renderOptions.RenderMode == RenderMode.Default ? RenderMode.Wireframe : RenderMode.Default; + Panel.BeginColumn(); + + Panel.BeginRow(); + Label.Show($"FPS: {1f / dt:F1}"); + Panel.EndRow(); + + string text = renderOptions.RenderMode == RenderMode.Default ? "Enable wireframe" : "Enable solid fill"; + if (Button.Show(text)) + { + renderOptions.RenderMode = renderOptions.RenderMode == RenderMode.Default + ? RenderMode.Wireframe + : RenderMode.Default; + } + + Panel.EndColumn(); + CollapsableGroup.End(); } } @@ -62,25 +77,29 @@ private void RenderImGui(double dt) { renderOptions.RenderMode = (RenderMode)activeRenderMode; } + ImGui.EndGroup(); } protected override void OnInitialize() { handleMovement = true; - + window.InputController.PrimaryPointer.Cursor.State = CursorState.Disabled; window.InputController.PrimaryKeyboard.KeyPressed += (keyboard, key, code) => { if (key == Key.Escape) { - window.InputController.PrimaryPointer.Cursor.State = window.InputController.PrimaryPointer.Cursor.State == CursorState.Disabled ? CursorState.Normal : CursorState.Disabled; + window.InputController.PrimaryPointer.Cursor.State = + window.InputController.PrimaryPointer.Cursor.State == CursorState.Disabled + ? CursorState.Normal + : CursorState.Disabled; handleMovement = !handleMovement; } }; - + camera = new Camera(new Vector3(0, 0, 5), Vector3.UnitZ, Vector3.UnitY, (float)window.Size.X / window.Size.Y); - + //"Shiba" (https://skfb.ly/6WxVW) by zixisun02 is licensed under Creative Commons Attribution (http://creativecommons.org/licenses/by/4.0/). Scene scene = new Scene("Assets/shiba.fbx", Path.Combine("Assets", "textures")); diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index 46ce7be..b1141bc 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(true); Drawie2SampleApp app = new Drawie2SampleApp(); From 95d27931c5fc6a17d1361dafd91e8391255121ac Mon Sep 17 00:00:00 2001 From: flabbet Date: Sun, 16 Aug 2026 13:52:13 +0200 Subject: [PATCH 27/55] Technically added msaa support --- .../Helpers/TextureFramebufferExtensions.cs | 6 +- .../Vk/VulkanContent.cs | 3 +- .../Buffers/VulkanImageAttachment.cs | 8 ++- .../Buffers/VulkanTexture.cs | 51 +++++++++----- .../Helpers/FormatExtensions.cs | 15 ++++ .../Builders/GraphicsPipelineBuilder.cs | 13 ++-- .../Stages/Builders/RenderPassBuilder.cs | 70 +++++++++++++++---- .../VulkanCommandList.cs | 17 +++-- .../VulkanGraphicsDevice.cs | 1 - .../VulkanHostViewRenderApi.cs | 5 +- src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs | 6 +- .../Abstraction/Pipeline/RasterizerDesc.cs | 7 ++ .../Abstraction/Textures/TextureDesc.cs | 10 +++ 13 files changed, 161 insertions(+), 51 deletions(-) diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 7063791..ea57a97 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -45,7 +45,8 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, Width = fb.Size.X, Height = fb.Size.Y, Format = TextureFormat.RGBA8_Unorm, - Depth = DepthFormat.Depth24Stencil8 + Depth = DepthFormat.Depth24Stencil8, + Samples = 4 }); } @@ -61,7 +62,8 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, }, Rasterizer = new RasterizerDesc() { - RenderMode = options.RenderMode + RenderMode = options.RenderMode, + Samples = 4 }, ShaderProgram = shader, Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs index 21ec76e..aba481a 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs @@ -1,5 +1,6 @@ using Avalonia; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.Vulkan.Buffers; using Silk.NET.Vulkan; @@ -71,7 +72,7 @@ public void CreateTextureImage(VecI size) { texture = new VulkanTexture(context.Api!, context.LogicalDevice.Device, context.PhysicalDevice, context.Pool.CommandPool, - context.GraphicsQueue, context.GraphicsQueueFamilyIndex, size); + context.GraphicsQueue, context.GraphicsQueueFamilyIndex, new TextureDesc { Width = size.X, Height = size.Y, Depth = DepthFormat.NoDepth, Samples = 1, Format = TextureFormat.RGBA8_Unorm}); } public void Dispose() diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs index d6d5441..293bfea 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs @@ -22,8 +22,9 @@ public sealed unsafe class VulkanImageAttachment : IDisposable public uint Height { get; } public ImageAspectFlags AspectMask { get; } public ImageUsageFlags Usage { get; } - public ImageLayout Layout { get; private set; } = ImageLayout.Undefined; + public SampleCountFlags Samples { get; private set; } + public VulkanImageAttachment( Vk vk, @@ -35,7 +36,7 @@ public VulkanImageAttachment( uint height, Format format, ImageUsageFlags usage, - ImageAspectFlags aspectMask) + ImageAspectFlags aspectMask, SampleCountFlags samples) { this.vk = vk; this.device = device; @@ -48,6 +49,7 @@ public VulkanImageAttachment( Format = format; Usage = usage; AspectMask = aspectMask; + Samples = samples; CreateImage(); AllocateMemory(); @@ -67,7 +69,7 @@ private void CreateImage() Tiling = ImageTiling.Optimal, InitialLayout = ImageLayout.Undefined, Usage = Usage, - Samples = SampleCountFlags.Count1Bit, + Samples = Samples, SharingMode = SharingMode.Exclusive }; diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index 8ed90dd..af7211d 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -32,19 +32,14 @@ public class VulkanTexture : IDisposable, IVkTexture public VulkanImageAttachment ColorAttachment => colorAttachment; public VulkanImageAttachment? DepthAttachment => depthAttachment; + public VulkanImageAttachment? MsaaResolveColorAttachment => msaaResolveAttachment; private VulkanImageAttachment colorAttachment; private VulkanImageAttachment? depthAttachment; + private VulkanImageAttachment? msaaResolveAttachment; private Sampler sampler; - - public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CommandPool commandPool, - Queue graphicsQueue, uint queueFamily, VecI size) : this(vk, logicalDevice, physicalDevice, commandPool, graphicsQueue, queueFamily, new TextureDesc() - { - Format = TextureFormat.RGBA8_Unorm, Depth = DepthFormat.NoDepth, Width = size.X, Height = size.Y, - }) - { - } + public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CommandPool commandPool, Queue graphicsQueue, uint queueFamily, TextureDesc desc) { @@ -56,7 +51,8 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, QueueFamily = queueFamily; ImageFormat = (uint)ToVkFormat(desc.Format); Tiling = (uint)ImageTiling.Optimal; - UsageFlags = (uint)(ImageUsageFlags.SampledBit | ImageUsageFlags.TransferSrcBit | ImageUsageFlags.TransferDstBit | ImageUsageFlags.ColorAttachmentBit); + UsageFlags = (uint)(ImageUsageFlags.SampledBit | ImageUsageFlags.TransferSrcBit | + ImageUsageFlags.TransferDstBit | ImageUsageFlags.ColorAttachmentBit); Width = (uint)desc.Width; Height = (uint)desc.Height; @@ -73,7 +69,7 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, ImageUsageFlags.TransferSrcBit | ImageUsageFlags.TransferDstBit | ImageUsageFlags.ColorAttachmentBit, - ImageAspectFlags.ColorBit); + ImageAspectFlags.ColorBit, FormatExtensions.ToSampleFlags(desc.Samples)); colorAttachment.TransitionLayout( ImageLayout.ColorAttachmentOptimal); @@ -92,13 +88,34 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, (uint)desc.Height, depthFormat, ImageUsageFlags.DepthStencilAttachmentBit, - ImageAspectFlags.DepthBit | ImageAspectFlags.StencilBit); + ImageAspectFlags.DepthBit | ImageAspectFlags.StencilBit, FormatExtensions.ToSampleFlags(desc.Samples)); depthAttachment.TransitionLayout(ImageLayout.DepthStencilAttachmentOptimal); } - + + if (desc.Samples > 1) + { + msaaResolveAttachment = new VulkanImageAttachment( + Vk, + LogicalDevice, + PhysicalDevice, + CommandPool, + GraphicsQueue, + (uint)desc.Width, + (uint)desc.Height, + ToVkFormat(desc.Format), + ImageUsageFlags.SampledBit | + ImageUsageFlags.TransferSrcBit | + ImageUsageFlags.TransferDstBit | + ImageUsageFlags.ColorAttachmentBit, + ImageAspectFlags.ColorBit, SampleCountFlags.Count1Bit); + + msaaResolveAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal); + } + CreateSampler(); } + private Format ToVkFormat(TextureFormat descFormat) { @@ -114,9 +131,9 @@ public void MakeReadOnly() { colorAttachment.TransitionLayout(ImageLayout.ShaderReadOnlyOptimal); } - + public void MakeReadOnly(CommandBuffer cmdBuffer) - { + { colorAttachment.TransitionLayout(ImageLayout.ShaderReadOnlyOptimal, cmdBuffer); } @@ -143,7 +160,7 @@ private unsafe void CreateSampler() AddressModeV = SamplerAddressMode.Repeat, AddressModeW = SamplerAddressMode.Repeat, AnisotropyEnable = false, - MaxAnisotropy = 1, + MaxAnisotropy = 1, BorderColor = BorderColor.IntOpaqueBlack, UnnormalizedCoordinates = false, CompareEnable = false, @@ -153,7 +170,7 @@ private unsafe void CreateSampler() MinLod = 0, MaxLod = 0 }; - + fixed (Sampler* samplerPtr = &sampler) { if (Vk.CreateSampler(LogicalDevice, &samplerCreateInfo, null, samplerPtr) != Result.Success) @@ -191,4 +208,4 @@ public unsafe void Dispose() ColorAttachment.Dispose(); DepthAttachment?.Dispose(); } -} +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/Helpers/FormatExtensions.cs b/src/Drawie.RenderApi.Vulkan/Helpers/FormatExtensions.cs index 37ca96f..00a3eff 100644 --- a/src/Drawie.RenderApi.Vulkan/Helpers/FormatExtensions.cs +++ b/src/Drawie.RenderApi.Vulkan/Helpers/FormatExtensions.cs @@ -17,4 +17,19 @@ public static Format ToVkFormat(this DepthFormat descDepth) throw new ArgumentOutOfRangeException(nameof(descDepth), descDepth, null); } } + + public static SampleCountFlags ToSampleFlags(int samples) + { + return samples switch + { + 1 => SampleCountFlags.Count1Bit, + 2 => SampleCountFlags.Count2Bit, + 4 => SampleCountFlags.Count4Bit, + 8 => SampleCountFlags.Count8Bit, + 16 => SampleCountFlags.Count16Bit, + 32 => SampleCountFlags.Count32Bit, + 64 => SampleCountFlags.Count64Bit, + _ => throw new ArgumentOutOfRangeException(nameof(samples), samples, null) + }; + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs index 00a2840..12ef7bb 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs @@ -1,4 +1,5 @@ using Drawie.RenderApi.Vulkan.Exceptions; +using Drawie.RenderApi.Vulkan.Helpers; using Drawie.RenderApi.Vulkan.Structs; using Silk.NET.Vulkan; @@ -75,7 +76,7 @@ public GraphicsPipelineBuilder WithDepth() return this; } - public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChainImageFormat, + public unsafe GraphicsPipeline Create(Extent2D extent, Format imageFormat, ImageLayout finalLayout, ref DescriptorSetLayout descriptorSetLayout) { @@ -84,7 +85,7 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain throw new GraphicsPipelineBuilderException("No render pass was added to the pipeline."); if(VertexLayoutBuilder == null) throw new GraphicsPipelineBuilderException("No vertex layout was added to the pipeline."); - RenderPass renderPass = RenderPassBuilder.Create(swapChainImageFormat, finalLayout); + RenderPass renderPass = RenderPassBuilder.Create(imageFormat, finalLayout); var stages = stackalloc PipelineShaderStageCreateInfo[Stages.Count]; for (var i = 0; i < Stages.Count; i++) stages[i] = Stages[i].Build(); @@ -114,8 +115,8 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain { X = 0.0f, Y = 0.0f, - Width = swapChainExtent.Width, - Height = swapChainExtent.Height, + Width = extent.Width, + Height = extent.Height, MinDepth = 0.0f, MaxDepth = 1.0f }; @@ -123,7 +124,7 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain Rect2D scissor = new() { Offset = new Offset2D(0, 0), - Extent = swapChainExtent + Extent = extent }; PipelineViewportStateCreateInfo viewportState = new() @@ -163,7 +164,7 @@ public unsafe GraphicsPipeline Create(Extent2D swapChainExtent, Format swapChain { SType = StructureType.PipelineMultisampleStateCreateInfo, SampleShadingEnable = false, - RasterizationSamples = SampleCountFlags.Count1Bit + RasterizationSamples = FormatExtensions.ToSampleFlags(RenderPassBuilder.Samples) }; PipelineColorBlendAttachmentState colorBlendAttachment = new() diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs index 003dd49..6ed647f 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs @@ -1,4 +1,5 @@ using Drawie.RenderApi.Vulkan.Exceptions; +using Drawie.RenderApi.Vulkan.Helpers; using Silk.NET.Vulkan; namespace Drawie.RenderApi.Vulkan.Stages.Builders; @@ -7,9 +8,10 @@ public class RenderPassBuilder : IDisposable { public Vk Vk { get; set; } public Device LogicalDevice { get; set; } - + public bool WithDepthStencil { get; set; } public Format DepthStencilFormat { get; set; } + public int Samples { get; set; } = 1; public RenderPassBuilder(Vk vk, Device logicalDevice) { @@ -23,26 +25,31 @@ public RenderPassBuilder WithDepth(Format depthStencilFormat) DepthStencilFormat = depthStencilFormat; return this; } - + + public RenderPassBuilder WithSamples(int samples) + { + Samples = samples; + return this; + } public unsafe RenderPass Create(Format format, ImageLayout imageLayout) { AttachmentDescription colorAttachment = new() { Format = format, - Samples = SampleCountFlags.Count1Bit, + Samples = FormatExtensions.ToSampleFlags(Samples), LoadOp = AttachmentLoadOp.Clear, StoreOp = AttachmentStoreOp.Store, StencilLoadOp = AttachmentLoadOp.DontCare, StencilStoreOp = AttachmentStoreOp.DontCare, InitialLayout = ImageLayout.Undefined, - FinalLayout = imageLayout + FinalLayout = Samples == 1 ? imageLayout : ImageLayout.ColorAttachmentOptimal }; AttachmentDescription depthAttachment = new() { Format = DepthStencilFormat, - Samples = SampleCountFlags.Count1Bit, + Samples = FormatExtensions.ToSampleFlags(Samples), InitialLayout = ImageLayout.Undefined, FinalLayout = ImageLayout.DepthStencilAttachmentOptimal, LoadOp = AttachmentLoadOp.Clear, @@ -71,30 +78,70 @@ public unsafe RenderPass Create(Format format, ImageLayout imageLayout) PDepthStencilAttachment = WithDepthStencil ? &depthAttachmentRef : null, }; + AttachmentDescription colorResolveAttachment = new() + { + Format = format, + Samples = SampleCountFlags.Count1Bit, + LoadOp = AttachmentLoadOp.DontCare, + StoreOp = AttachmentStoreOp.Store, + StencilLoadOp = AttachmentLoadOp.DontCare, + StencilStoreOp = AttachmentStoreOp.DontCare, + InitialLayout = ImageLayout.Undefined, + FinalLayout = ImageLayout.PresentSrcKhr + }; + + if (Samples > 1) + { + AttachmentReference colorResolveAttachmentRef = new() + { + Attachment = (uint)(WithDepthStencil ? 2 : 1), + Layout = ImageLayout.ColorAttachmentOptimal, + }; + + subpass.PResolveAttachments = &colorResolveAttachmentRef; + } + SubpassDependency dependency = new() { SrcSubpass = Vk.SubpassExternal, DstSubpass = 0, SrcStageMask = PipelineStageFlags.ColorAttachmentOutputBit, - SrcAccessMask = 0, + SrcAccessMask = Samples > 1 + ? AccessFlags.ColorAttachmentWriteBit | AccessFlags.DepthStencilAttachmentWriteBit + : AccessFlags.None, DstStageMask = PipelineStageFlags.ColorAttachmentOutputBit, DstAccessMask = AccessFlags.ColorAttachmentWriteBit }; + uint attachmentCount = 1; + if (WithDepthStencil) attachmentCount++; + if (Samples > 1) attachmentCount++; + AttachmentDescription* attachments = &colorAttachment; - if (WithDepthStencil) + if (attachmentCount > 1) { - var attachmentDescriptions = stackalloc AttachmentDescription[2]; + var attachmentDescriptions = stackalloc AttachmentDescription[(int)attachmentCount]; attachmentDescriptions[0] = colorAttachment; - attachmentDescriptions[1] = depthAttachment; - + int i = 1; + if (WithDepthStencil) + { + attachmentDescriptions[1] = depthAttachment; + i++; + } + + if (Samples > 1) + { + attachmentDescriptions[i] = colorResolveAttachment; + } + attachments = attachmentDescriptions; } + RenderPassCreateInfo renderPassInfo = new() { SType = StructureType.RenderPassCreateInfo, - AttachmentCount = (uint)(WithDepthStencil ? 2 : 1), + AttachmentCount = attachmentCount, PAttachments = attachments, SubpassCount = 1, PSubpasses = &subpass, @@ -108,7 +155,6 @@ public unsafe RenderPass Create(Format format, ImageLayout imageLayout) return renderPass; } - public void Dispose() { } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 8123e38..507064b 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -59,7 +59,7 @@ public override void SetPipeline(IPipeline pipeline) "BeginRenderPass must be called first."); if (pipeline is not VulkanPipeline vkPipeline) throw new ArgumentException("Only VulkanPipeline is supported"); - + pipeline.Apply(this); this.pipeline = vkPipeline; } @@ -94,7 +94,7 @@ public override void BindTexture( var vkTex = context.ManagedTextures[texture.TextureId]; if (vkTex is not VulkanTexture vkTexture) throw new ArgumentException("Only IVkTexture's are valid"); - + vkTexture.MakeReadOnly(commandBuffer); BindTextureDescriptor( @@ -235,6 +235,13 @@ private unsafe void BeginRendering(VulkanRenderTarget target) }; } + if (target.Texture.MsaaResolveColorAttachment != null) + { + colorAttachment.ResolveMode = ResolveModeFlags.AverageBit; + colorAttachment.ResolveImageView = target.Texture.MsaaResolveColorAttachment.View; + colorAttachment.ResolveImageLayout = ImageLayout.ColorAttachmentOptimal; + } + Rect2D renderArea = new() { Offset = new Offset2D(0, 0), @@ -258,7 +265,7 @@ private unsafe void BeginRendering(VulkanRenderTarget target) context.Api!.CmdBeginRendering( commandBuffer, in renderingInfo); - } + } private unsafe void BindBuffers(VulkanBufferGroup group) { @@ -328,7 +335,6 @@ private unsafe void BindTextureDescriptor( in set, 0, null); - } private void Blit( @@ -382,9 +388,8 @@ private void Blit( destination.ColorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal, commandBuffer); } - + public void Dispose() { - } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs index 4ec0df2..8e41d0a 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs @@ -129,7 +129,6 @@ public IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) public IRenderTarget CreateRenderTarget(TextureDesc textureDesc) { var texture = (VulkanTexture)CreateTexture(textureDesc); - return new VulkanRenderTarget(texture, new VecI(textureDesc.Width, textureDesc.Height)); } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs index 9048008..a8d9563 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs @@ -200,7 +200,8 @@ private unsafe void CreateDescriptorSetLayout() public void CreateTextureImage() { - texture = new VulkanTexture(context.Api!, context.LogicalDevice.Device, context.PhysicalDevice, commandPool, context.GraphicsQueue, context.GraphicsQueueFamilyIndex, framebufferSize); + texture = new VulkanTexture(context.Api!, context.LogicalDevice.Device, context.PhysicalDevice, commandPool, context.GraphicsQueue, context.GraphicsQueueFamilyIndex, + new TextureDesc { Width = framebufferSize.X, Height = framebufferSize.Y, Samples = 1, Depth = DepthFormat.NoDepth, Format = TextureFormat.RGBA8_Unorm }); context.AddManagedTexture(texture, texture.ImageHandle); texture.MakeReadOnly(); } @@ -556,7 +557,7 @@ private void CreateGraphicsPipeline() .WithVertexLayout(layout => layout.WithVec2().WithVec3().WithVec2()) .WithRenderPass(renderPass => { - /*TODO: Add some meaningful stuff*/ + //renderPass.WithSamples(4); }); graphicsPipeline = builder.Create(swapChainExtent, swapChainImageFormat, ImageLayout.PresentSrcKhr, ref descriptorSetLayout); diff --git a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs index 15d5fd8..ce3309c 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs @@ -67,7 +67,11 @@ private GraphicsPipeline CreatePipeline() Builder.Stages.Add(program.VertexStageBuilder); Builder.Stages.Add(program.FragmentStageBuilder); Builder.DoNotDisposeStages = true; - Builder.WithRenderPass(builder => { builder.WithDepth(Description.Depth.Format.ToVkFormat()); }); + Builder.WithRenderPass(builder => + { + builder.WithDepth(Description.Depth.Format.ToVkFormat()) + .WithSamples(Description.Rasterizer.Samples); + }); Builder.WithDepth(); var descriptorSetLayout = program.DescriptorSetLayout; var pipeline = Builder.Create(new Extent2D((uint)Description.Viewport.Width, (uint)Description.Viewport.Height), diff --git a/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs b/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs index 4689343..f9e4003 100644 --- a/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Pipeline/RasterizerDesc.cs @@ -5,4 +5,11 @@ namespace Drawie.RenderApi.Abstraction.Pipeline; public record struct RasterizerDesc { public RenderMode RenderMode { get; set; } + public int Samples { get; set; } + + public RasterizerDesc() + { + RenderMode = RenderMode.Default; + Samples = 1; + } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs b/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs index 75aed74..0bd9b53 100644 --- a/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs +++ b/src/Drawie.RenderApi/Abstraction/Textures/TextureDesc.cs @@ -7,4 +7,14 @@ public struct TextureDesc public TextureFormat Format { get; set; } public DepthFormat Depth { get; set; } + public int Samples { get; set; } + + public TextureDesc() + { + Width = 0; + Height = 0; + Format = TextureFormat.RGBA8_Unorm; + Depth = DepthFormat.NoDepth; + Samples = 1; + } } \ No newline at end of file From 17437efb553899eb5431b74e1309519ddd2a0f19 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sun, 16 Aug 2026 14:41:57 +0200 Subject: [PATCH 28/55] Added MSAA to opengl --- .../OpenGlDepthBuffer.cs | 24 ++++++++--- src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 4 +- src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs | 7 ++++ .../OpenGlRenderTarget.cs | 25 ++++-------- src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs | 40 +++++++++++++------ .../Buffers/VulkanTexture.cs | 8 ++-- .../VulkanCommandList.cs | 4 +- .../VulkanHostViewRenderApi.cs | 2 +- src/Drawie2Sample/Drawie2SampleApp.cs | 10 ----- src/DrawieSample.Desktop/Program.cs | 2 +- 10 files changed, 71 insertions(+), 55 deletions(-) diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDepthBuffer.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDepthBuffer.cs index b03f1fb..e1312c3 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDepthBuffer.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDepthBuffer.cs @@ -9,27 +9,39 @@ public sealed class OpenGlDepthBuffer : IDisposable public int Width { get; } public int Height { get; } + public int Samples { get; } private GL Api { get; } + public InternalFormat Format { get; set; } - public OpenGlDepthBuffer(GL api, int width, int height, DepthFormat depth) + public OpenGlDepthBuffer(GL api, int width, int height, DepthFormat depth, int samples) { Api = api; Width = width; Height = height; + Samples = samples; RenderbufferId = Api.GenRenderbuffer(); + Format = ToOpenglDepth(depth); Api.BindRenderbuffer( RenderbufferTarget.Renderbuffer, RenderbufferId); + - Api.RenderbufferStorage( - RenderbufferTarget.Renderbuffer, - ToOpenglDepth(depth), - (uint)width, - (uint)height); + if (samples == 1) + { + Api.RenderbufferStorage( + RenderbufferTarget.Renderbuffer, + Format, + (uint)width, + (uint)height); + } + else + { + Api.RenderbufferStorageMultisample(RenderbufferTarget.Renderbuffer, (uint)Samples, Format, (uint)Width, (uint)Height); + } Api.BindRenderbuffer( RenderbufferTarget.Renderbuffer, diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index a83f464..a04a2fc 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -32,7 +32,7 @@ public IBuffer CreateBuffer(BufferUsage usage, TData[]? data) wher public ITexture CreateTexture(TextureDesc desc) { - var texture = new OpenGlTexture(Api, desc.Width, desc.Height); + var texture = new OpenGlTexture(Api, desc.Width, desc.Height, desc.Samples); context.AddManagedTexture(texture); return texture; } @@ -114,7 +114,7 @@ public unsafe IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) public IRenderTarget CreateRenderTarget(TextureDesc textureDesc) { - return new OpenGlRenderTarget(Api, textureDesc.Width, textureDesc.Height, textureDesc.Depth); + return new OpenGlRenderTarget(Api, textureDesc); } public IBufferGroup CreateBufferGroup() diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs index 1ba9e10..374d530 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlPipeline.cs @@ -44,7 +44,14 @@ public void Apply(ICommandList list) { Api.Disable(EnableCap.DepthTest); } + + if (Description.Rasterizer.Samples != 1) + { + Api.Enable(EnableCap.Multisample); + } + Api.Enable(EnableCap.CullFace); + Api.CullFace(TriangleFace.Back); Api.ClearColor(0, 0, 0, 1); Api.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit | ClearBufferMask.StencilBufferBit); Api.PolygonMode(TriangleFace.FrontAndBack, Description.Rasterizer.RenderMode == RenderMode.Wireframe ? PolygonMode.Line : PolygonMode.Fill); diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs index 90a4d9c..44f1dc1 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlRenderTarget.cs @@ -20,22 +20,20 @@ public sealed class OpenGlRenderTarget : IDisposable, IRenderTarget public OpenGlRenderTarget( GL api, - int width, - int height, - DepthFormat depth) + TextureDesc desc) { Api = api; Color = new OpenGlTexture( api, - width, - height); + desc.Width, + desc.Height, desc.Samples); - if (depth != DepthFormat.NoDepth) + if (desc.Depth != DepthFormat.NoDepth) Depth = new OpenGlDepthBuffer( api, - width, - height, depth); + desc.Width, + desc.Height, desc.Depth, desc.Samples); SurfaceId = Api.GenFramebuffer(); @@ -43,10 +41,11 @@ public OpenGlRenderTarget( FramebufferTarget.Framebuffer, (uint)SurfaceId); + var target = desc.Samples == 1 ? TextureTarget.Texture2D : TextureTarget.Texture2DMultisample; Api.FramebufferTexture2D( FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, - TextureTarget.Texture2D, + target, (uint)Color.TextureId, 0); @@ -61,7 +60,6 @@ public OpenGlRenderTarget( var status = Api.CheckFramebufferStatus( FramebufferTarget.Framebuffer); - if (status != GLEnum.FramebufferComplete) { throw new InvalidOperationException( @@ -73,13 +71,6 @@ public OpenGlRenderTarget( 0); } - public void Bind() - { - Api.BindFramebuffer( - FramebufferTarget.Framebuffer, - (uint)SurfaceId); - } - public void Dispose() { Api.DeleteFramebuffer((uint)SurfaceId); diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs index 7a6cb64..7e86708 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlTexture.cs @@ -8,6 +8,7 @@ public class OpenGlTexture : IOpenGlTexture, IDisposable public int Width { get; } public int Height { get; } + public int Samples { get; } private GL Api { get; } @@ -17,30 +18,44 @@ public OpenGlTexture(uint textureId, GL api, int width, int height) Api = api; Width = width; Height = height; + Samples = 1; } - public unsafe OpenGlTexture(GL api, int width, int height) + public unsafe OpenGlTexture(GL api, int width, int height, int samples) { Api = api; Width = width; Height = height; + Samples = samples; TextureId = Api.GenTexture(); Activate(0); Bind(); - Api.TexImage2D( - TextureTarget.Texture2D, - 0, - InternalFormat.Rgba, - (uint)width, - (uint)height, - 0, - PixelFormat.Rgba, - PixelType.UnsignedByte, - null); + if (samples == 1) + { + Api.TexImage2D( + TextureTarget.Texture2D, + 0, + InternalFormat.Rgba, + (uint)width, + (uint)height, + 0, + PixelFormat.Rgba, + PixelType.UnsignedByte, + null); + } + else + { + Api.TexImage2DMultisample( + TextureTarget.Texture2DMultisample, + (uint)samples, + InternalFormat.Rgb, + (uint)width, + (uint)height, true); + } ApplyParameters(); } @@ -95,8 +110,9 @@ private unsafe void LoadTextureFromBytes(Span data, PixelFormat format) public void Bind() { + var target = Samples == 1 ? TextureTarget.Texture2D : TextureTarget.Texture2DMultisample; Api.BindTexture( - TextureTarget.Texture2D, + target, (uint)TextureId); } diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index af7211d..01df06b 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -32,11 +32,11 @@ public class VulkanTexture : IDisposable, IVkTexture public VulkanImageAttachment ColorAttachment => colorAttachment; public VulkanImageAttachment? DepthAttachment => depthAttachment; - public VulkanImageAttachment? MsaaResolveColorAttachment => msaaResolveAttachment; + public VulkanImageAttachment? MsaaResolvedColorAttachment => msaaResolvedColorAttachment; private VulkanImageAttachment colorAttachment; private VulkanImageAttachment? depthAttachment; - private VulkanImageAttachment? msaaResolveAttachment; + private VulkanImageAttachment? msaaResolvedColorAttachment; private Sampler sampler; @@ -95,7 +95,7 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, if (desc.Samples > 1) { - msaaResolveAttachment = new VulkanImageAttachment( + msaaResolvedColorAttachment = new VulkanImageAttachment( Vk, LogicalDevice, PhysicalDevice, @@ -110,7 +110,7 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, ImageUsageFlags.ColorAttachmentBit, ImageAspectFlags.ColorBit, SampleCountFlags.Count1Bit); - msaaResolveAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal); + msaaResolvedColorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal); } CreateSampler(); diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 507064b..900dfbf 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -235,10 +235,10 @@ private unsafe void BeginRendering(VulkanRenderTarget target) }; } - if (target.Texture.MsaaResolveColorAttachment != null) + if (target.Texture.MsaaResolvedColorAttachment != null) { colorAttachment.ResolveMode = ResolveModeFlags.AverageBit; - colorAttachment.ResolveImageView = target.Texture.MsaaResolveColorAttachment.View; + colorAttachment.ResolveImageView = target.Texture.MsaaResolvedColorAttachment.View; colorAttachment.ResolveImageLayout = ImageLayout.ColorAttachmentOptimal; } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs index a8d9563..375619d 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs @@ -557,7 +557,7 @@ private void CreateGraphicsPipeline() .WithVertexLayout(layout => layout.WithVec2().WithVec3().WithVec2()) .WithRenderPass(renderPass => { - //renderPass.WithSamples(4); + renderPass.WithSamples(1); }); graphicsPipeline = builder.Create(swapChainExtent, swapChainImageFormat, ImageLayout.PresentSrcKhr, ref descriptorSetLayout); diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 76741b8..4fce8ed 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -1,21 +1,11 @@ using System.Numerics; -using System.Reflection.Emit; -using System.Text; -using Drawie.Backend.Core.ColorsImpl; -using Drawie.Backend.Core.ColorsImpl.Paintables; -using Drawie.Backend.Core.Surfaces; -using Drawie.Backend.Core.Surfaces.PaintImpl; -using Drawie.Backend.Core.Text; using Drawie.Backend.Vertie.Core; using Drawie.Backend.Vertie.Helpers; -using Drawie.Backend.Vertie.Rendering; using Drawie.Host; using Drawie.Host.Input; -using Drawie.Layer.UI.ImGui; using Drawie.Layer.UI.MiniUi; using Drawie.Layer.UI.MiniUi.Controls; using Drawie.Numerics; -using Drawie.Rendering; using DrawiEngine; using ImGuiNET; using Label = Drawie.Layer.UI.MiniUi.Controls.Label; diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index b1141bc..46ce7be 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(true); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); Drawie2SampleApp app = new Drawie2SampleApp(); From 51ee2423bab1c3dfd70aace50546eed0986c3eb0 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sun, 16 Aug 2026 14:54:50 +0200 Subject: [PATCH 29/55] fixed vulkan validation errors --- .../Stages/Builders/RenderPassBuilder.cs | 39 ++++++++++++++----- .../VulkanShaderProgram.cs | 14 ++++++- src/Drawie2Sample/Drawie2SampleApp.cs | 2 + src/DrawieSample.Desktop/Program.cs | 2 +- 4 files changed, 44 insertions(+), 13 deletions(-) diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs index 6ed647f..2af1c99 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs @@ -101,17 +101,36 @@ public unsafe RenderPass Create(Format format, ImageLayout imageLayout) subpass.PResolveAttachments = &colorResolveAttachmentRef; } - SubpassDependency dependency = new() + SubpassDependency dependency = default; + if (Samples == 1) { - SrcSubpass = Vk.SubpassExternal, - DstSubpass = 0, - SrcStageMask = PipelineStageFlags.ColorAttachmentOutputBit, - SrcAccessMask = Samples > 1 - ? AccessFlags.ColorAttachmentWriteBit | AccessFlags.DepthStencilAttachmentWriteBit - : AccessFlags.None, - DstStageMask = PipelineStageFlags.ColorAttachmentOutputBit, - DstAccessMask = AccessFlags.ColorAttachmentWriteBit - }; + dependency = new() + { + SrcSubpass = Vk.SubpassExternal, + DstSubpass = 0, + SrcStageMask = PipelineStageFlags.ColorAttachmentOutputBit, + SrcAccessMask = AccessFlags.ColorAttachmentWriteBit, + DstStageMask = PipelineStageFlags.ColorAttachmentOutputBit, + DstAccessMask = AccessFlags.ColorAttachmentWriteBit + }; + } + else + { + dependency = new() + { + SrcSubpass = Vk.SubpassExternal, + DstSubpass = 0, + SrcStageMask = PipelineStageFlags.ColorAttachmentOutputBit | PipelineStageFlags.EarlyFragmentTestsBit | PipelineStageFlags.LateFragmentTestsBit, + + SrcAccessMask = + Samples > 1 ? AccessFlags.ColorAttachmentWriteBit | AccessFlags.DepthStencilAttachmentWriteBit + : AccessFlags.ColorAttachmentWriteBit, + + DstStageMask = PipelineStageFlags.ColorAttachmentOutputBit | PipelineStageFlags.EarlyFragmentTestsBit, + + DstAccessMask = AccessFlags.ColorAttachmentWriteBit | AccessFlags.DepthStencilAttachmentWriteBit + }; + } uint attachmentCount = 1; if (WithDepthStencil) attachmentCount++; diff --git a/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs b/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs index cc857ad..23675ca 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs @@ -212,13 +212,23 @@ private unsafe DescriptorPool CreateDescriptorPool() Type = DescriptorType.UniformBuffer, DescriptorCount = 1, }; + + DescriptorPoolSize poolFragSize = new DescriptorPoolSize() + { + Type = DescriptorType.CombinedImageSampler, + DescriptorCount = 1, + }; + + DescriptorPoolSize* poolSizes = stackalloc DescriptorPoolSize[2]; + poolSizes[0] = poolSize; + poolSizes[1] = poolFragSize; DescriptorPoolCreateInfo poolInfo = new() { SType = StructureType.DescriptorPoolCreateInfo, - PoolSizeCount = 1, + PoolSizeCount = 2, + PPoolSizes = poolSizes, MaxSets = 2,// TODO: Check this - PPoolSizes = &poolSize }; Context.Api.CreateDescriptorPool(Context.LogicalDevice.Device, &poolInfo, null, out var descriptorPool).ThrowOnError("Failed to create descriptor pool."); diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 4fce8ed..4357fca 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -1,4 +1,6 @@ using System.Numerics; +using Drawie.Backend.Core.ColorsImpl; +using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Backend.Vertie.Core; using Drawie.Backend.Vertie.Helpers; using Drawie.Host; diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index 46ce7be..b1141bc 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(false); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(true); Drawie2SampleApp app = new Drawie2SampleApp(); From 6081d794213b9ae4df288d0b48414caba94b375b Mon Sep 17 00:00:00 2001 From: flabbet Date: Sun, 16 Aug 2026 15:49:53 +0200 Subject: [PATCH 30/55] Updated packages and such --- .../Helpers/TextureFramebufferExtensions.cs | 4 ++-- .../Vk/VulkanInteropContext.cs | 1 + .../Drawie.RenderApi.Vulkan.csproj | 8 ++++---- .../Stages/Builders/RenderPassBuilder.cs | 10 +++------- src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs | 7 ++++--- src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs | 2 +- 6 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index ea57a97..f4c2a7d 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -46,7 +46,7 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, Height = fb.Size.Y, Format = TextureFormat.RGBA8_Unorm, Depth = DepthFormat.Depth24Stencil8, - Samples = 4 + Samples = 1 }); } @@ -63,7 +63,7 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, Rasterizer = new RasterizerDesc() { RenderMode = options.RenderMode, - Samples = 4 + Samples = 1 }, ShaderProgram = shader, Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs index 98afc2c..1cba3a7 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs @@ -42,6 +42,7 @@ public override void Initialize(IVulkanContextInfo contextInfo) deviceExtensions.Add("VK_KHR_get_physical_device_properties2"); deviceExtensions.Add("VK_KHR_external_memory_capabilities"); deviceExtensions.Add("VK_KHR_external_semaphore_capabilities"); + //TODO if it crashes with vertie, try adding VK_KHR_dynamic_rendering if(EnableValidationLayers) deviceExtensions.Add("VK_EXT_debug_utils"); diff --git a/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj b/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj index 4f5b5f0..f4c1e9a 100644 --- a/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj +++ b/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj @@ -8,10 +8,10 @@ - - - - + + + + diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs index 2af1c99..20c15ba 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs @@ -102,14 +102,14 @@ public unsafe RenderPass Create(Format format, ImageLayout imageLayout) } SubpassDependency dependency = default; - if (Samples == 1) + if (!WithDepthStencil) { dependency = new() { SrcSubpass = Vk.SubpassExternal, DstSubpass = 0, SrcStageMask = PipelineStageFlags.ColorAttachmentOutputBit, - SrcAccessMask = AccessFlags.ColorAttachmentWriteBit, + SrcAccessMask = AccessFlags.None, DstStageMask = PipelineStageFlags.ColorAttachmentOutputBit, DstAccessMask = AccessFlags.ColorAttachmentWriteBit }; @@ -121,13 +121,9 @@ public unsafe RenderPass Create(Format format, ImageLayout imageLayout) SrcSubpass = Vk.SubpassExternal, DstSubpass = 0, SrcStageMask = PipelineStageFlags.ColorAttachmentOutputBit | PipelineStageFlags.EarlyFragmentTestsBit | PipelineStageFlags.LateFragmentTestsBit, - - SrcAccessMask = - Samples > 1 ? AccessFlags.ColorAttachmentWriteBit | AccessFlags.DepthStencilAttachmentWriteBit - : AccessFlags.ColorAttachmentWriteBit, + SrcAccessMask = AccessFlags.ColorAttachmentWriteBit | AccessFlags.DepthStencilAttachmentWriteBit, DstStageMask = PipelineStageFlags.ColorAttachmentOutputBit | PipelineStageFlags.EarlyFragmentTestsBit, - DstAccessMask = AccessFlags.ColorAttachmentWriteBit | AccessFlags.DepthStencilAttachmentWriteBit }; } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 900dfbf..4769e12 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -181,7 +181,7 @@ private void BeginCommandBuffer(CommandBuffer buffer) CommandBufferBeginInfo info = new() { SType = StructureType.CommandBufferBeginInfo, - Flags = CommandBufferUsageFlags.OneTimeSubmitBit + Flags = CommandBufferUsageFlags.OneTimeSubmitBit, }; if (context.Api!.BeginCommandBuffer( @@ -256,7 +256,7 @@ private unsafe void BeginRendering(VulkanRenderTarget target) RenderArea = renderArea, LayerCount = 1, ColorAttachmentCount = 1, - PColorAttachments = &colorAttachment + PColorAttachments = &colorAttachment, }; if (target.Texture.DepthAttachment is not null) @@ -389,7 +389,8 @@ private void Blit( destination.ColorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal, commandBuffer); } - public void Dispose() + public unsafe void Dispose() { + context.Api.DestroyCommandPool(context.LogicalDevice.Device, commandPool, null); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs index 866ec1f..8d2305a 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs @@ -30,10 +30,10 @@ private unsafe void CreateSurface(IVulkanContextInfo vkContext) public override void Initialize(IVulkanContextInfo contextInfo) { Api = Vk.GetApi(); - TryAddValidationLayer("VK_LAYER_KHRONOS_validation"); deviceExtensions.Add(KhrSwapchain.ExtensionName); + deviceExtensions.Add(KhrDynamicRendering.ExtensionName); SetupInstance(contextInfo); SetupDebugMessenger(); From ea5241a23a9af3dc9c6769c53727545ab79662b8 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sun, 16 Aug 2026 19:24:57 +0200 Subject: [PATCH 31/55] rework wip --- .../Helpers/TextureFramebufferExtensions.cs | 49 +++- .../OpenGlCommandList.cs | 23 +- .../Buffers/VulkanImageAttachment.cs | 12 + .../Buffers/VulkanTexture.cs | 15 +- .../Helpers/UniformUtility.cs | 75 +++++ .../Builders/GraphicsPipelineBuilder.cs | 14 +- .../VulkanCommandList.cs | 275 ++++++++++++++---- src/Drawie.RenderApi.Vulkan/VulkanContext.cs | 2 + .../VulkanDescriptorPool.cs | 61 ++++ .../VulkanGraphicsDevice.cs | 2 +- .../VulkanHostViewRenderApi.cs | 2 +- src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs | 11 +- .../VulkanRenderTarget.cs | 51 +++- .../VulkanShaderProgram.cs | 161 +--------- .../CommandRecording/CommandList.cs | 7 +- .../CommandRecording/ICommandList.cs | 6 +- .../Abstraction/Shaders/IShaderProgram.cs | 1 - .../Abstraction/Textures/PreparedTexture.cs | 10 + src/Drawie.sln.DotSettings.user | 2 + src/DrawieSample.Desktop/Program.cs | 2 +- 20 files changed, 535 insertions(+), 246 deletions(-) create mode 100644 src/Drawie.RenderApi.Vulkan/Helpers/UniformUtility.cs create mode 100644 src/Drawie.RenderApi.Vulkan/VulkanDescriptorPool.cs create mode 100644 src/Drawie.RenderApi/Abstraction/Textures/PreparedTexture.cs diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index f4c2a7d..b0d9993 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -22,6 +22,7 @@ public static class TextureFramebufferExtensions private static IRenderTarget? cachedRenderTarget; private static ICommandList? cmdList; + private static Dictionary preparedTextures = new Dictionary(); public static void DrawScene(this TextureFramebuffer fb, Scene scene, Camera camera, RenderOptions options = default) @@ -50,7 +51,8 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, }); } - var shader = GetOrCreateShaderProgram(device, scene); + preparedTextures.Clear(); + var program = GetOrCreateShaderProgram(device, scene); var pipeline = device.CreatePipeline(new PipelineDesc() { @@ -65,14 +67,26 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, RenderMode = options.RenderMode, Samples = 1 }, - ShaderProgram = shader, + ShaderProgram = program, Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), }); cmdList ??= device.CreateCommandList(); - cmdList.BeginRenderPass(cachedRenderTarget); + + foreach (var mesh in scene.Meshes) + { + foreach (var texture in mesh.Material.Textures) + { + if (preparedTextures.ContainsKey(texture.TextureId)) continue; + preparedTextures.Add(texture.TextureId, cmdList.PrepareTexture(texture)); + } + } cmdList.SetPipeline(pipeline); + + cmdList.BeginRenderPass(cachedRenderTarget); + cmdList.BindPipeline(); + foreach (var mesh in scene.Meshes) { if (!mesh.BuffersInitialized) @@ -86,9 +100,27 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, material.Use(camera); material.PrepareForObject(mesh.Transform); - shader.UpdateUniforms(material.Properties.Values.ToList()); + List texturesForMaterial = new List(); + List samplers = new List(); + foreach (var materialTexture in material.Textures) + { + if (preparedTextures.TryGetValue(materialTexture.TextureId, out var texture)) + { + texturesForMaterial.Add(texture); + var sampler = cachedSamplers.GetValueOrDefault(materialTexture); + if (sampler == null) + { + sampler = device.CreateSampler(new SamplerDesc()); + cachedSamplers[materialTexture] = sampler; + } + + samplers.Add(sampler); + } + } + + cmdList.UpdateUniforms(material.Properties.Values.ToList(), texturesForMaterial, samplers); - for (var i = 0; i < material.Textures.Count; i++) + /*for (var i = 0; i < material.Textures.Count; i++) { var materialTexture = material.Textures[i]; var sampler = cachedSamplers.GetValueOrDefault(materialTexture); @@ -98,8 +130,8 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, cachedSamplers[materialTexture] = sampler; } - cmdList.BindTexture(materialTexture, sampler); - } + cmdList.BindTexture(preparedTextures[materialTexture.TextureId], sampler); + }*/ cmdList.DrawIndexed(mesh.IndexCount); } @@ -119,7 +151,8 @@ private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsD var program = graphicsDevice.CreateShaderProgram(new ShaderProgramDesc( - scene.Meshes.SelectMany(x => x.Material.Shaders).Select(x => new ShaderDesc(x.EntryName, x.ShaderBytes, x.ShaderType)))); + scene.Meshes.SelectMany(x => x.Material.Shaders) + .Select(x => new ShaderDesc(x.EntryName, x.ShaderBytes, x.ShaderType)))); cachedShaderPrograms.Add(scene, program); return program; diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index 9da8417..6eb1ebe 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -2,6 +2,7 @@ using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Shaders; using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.OpenGL.Extensions; using Silk.NET.OpenGL; @@ -17,6 +18,7 @@ public class OpenGlCommandList(GL api) : CommandList private uint originalFb; private int lastBoundTextureSlot = 0; + private IPipeline boundPipeline; public override void BeginRenderPass(IRenderTarget fb) { @@ -32,7 +34,22 @@ public override void BeginRenderPass(IRenderTarget fb) public override void SetPipeline(IPipeline pipeline) { - RecordInstruction(() => pipeline.Apply(this)); + boundPipeline = pipeline; + } + + public override void BindPipeline() + { + RecordInstruction(() => boundPipeline.Apply(this)); + } + + public override PreparedTexture PrepareTexture(ITexture texture) + { + return new PreparedTexture(texture.TextureId); + } + + public override void UpdateUniforms(List blocks, List textures, List samplers) + { + } public override void SetBuffers(IBufferGroup bufferGroup) @@ -40,7 +57,7 @@ public override void SetBuffers(IBufferGroup bufferGroup) RecordInstruction(() => { Api.BindVertexArray(bufferGroup.Handle); }); } - public override void BindTexture(ITexture texture, ISampler sampler) + public override void BindTexture(PreparedTexture texture, ISampler sampler) { if (sampler is not OpenGlSampler openGlSampler) throw new ArgumentException("Cannot bind non opengl samplers"); // if vk:binding has binding set to 1, we need to update it at Texture1, generally, for binding transformation matrices we want to use @@ -50,7 +67,7 @@ public override void BindTexture(ITexture texture, ISampler sampler) { int textureUnit = lastBoundTextureSlot + 1; Api.ActiveTexture(TextureUnit.Texture0 + textureUnit); - Api.BindTexture(TextureTarget.Texture2D, (uint)texture.TextureId); + Api.BindTexture(TextureTarget.Texture2D, (uint)texture.Handle); Api.BindSampler((uint)textureUnit, openGlSampler.Handle); lastBoundTextureSlot++; }); diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs index 293bfea..bfc07ed 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs @@ -210,6 +210,12 @@ private void TransitionLayout( sourceStage = PipelineStageFlags.FragmentShaderBit; break; + + case ImageLayout.PresentSrcKhr: + barrier.SrcAccessMask = 0; + sourceStage = + PipelineStageFlags.BottomOfPipeBit; + break; default: barrier.SrcAccessMask = AccessFlags.MemoryReadBit; @@ -242,6 +248,12 @@ private void TransitionLayout( destinationStage = PipelineStageFlags.FragmentShaderBit; break; + + case ImageLayout.PresentSrcKhr: + barrier.DstAccessMask = 0; + destinationStage = + PipelineStageFlags.BottomOfPipeBit; + break; default: barrier.DstAccessMask = AccessFlags.MemoryReadBit; diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index 01df06b..72a7711 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -34,12 +34,23 @@ public class VulkanTexture : IDisposable, IVkTexture public VulkanImageAttachment? DepthAttachment => depthAttachment; public VulkanImageAttachment? MsaaResolvedColorAttachment => msaaResolvedColorAttachment; + public uint Attachments + { + get + { + uint count = 1; + if (DepthAttachment != null) count++; + if (MsaaResolvedColorAttachment != null) count++; + return count; + } + } + private VulkanImageAttachment colorAttachment; private VulkanImageAttachment? depthAttachment; private VulkanImageAttachment? msaaResolvedColorAttachment; private Sampler sampler; - + public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CommandPool commandPool, Queue graphicsQueue, uint queueFamily, TextureDesc desc) { @@ -115,7 +126,7 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CreateSampler(); } - + private Format ToVkFormat(TextureFormat descFormat) { diff --git a/src/Drawie.RenderApi.Vulkan/Helpers/UniformUtility.cs b/src/Drawie.RenderApi.Vulkan/Helpers/UniformUtility.cs new file mode 100644 index 0000000..7429a0d --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/Helpers/UniformUtility.cs @@ -0,0 +1,75 @@ +using System.Numerics; +using System.Runtime.InteropServices; +using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Vulkan.Buffers; +using Silk.NET.Vulkan; + +namespace Drawie.RenderApi.Vulkan.Helpers; + +public static class UniformUtility +{ + public static void SerializeToBuffer(UniformBlock block, UniformBuffer buffer) + { + var data = new byte[block.ShaderLayout.Size]; + foreach (var property in block.Properties) + { + var layout = block.ShaderLayout.UniformProperties + .FirstOrDefault(x => x.Name == property.UniformName); + + Write( + data, + layout.Offset, + property.ObjValue); + } + + buffer.SetData(data); + } + + private static void Write( + byte[] destination, + int offset, + object value) + { + switch (value) + { + case float v: + BitConverter.TryWriteBytes( + destination.AsSpan(offset, sizeof(float)), + v); + break; + case int v: + BitConverter.TryWriteBytes( + destination.AsSpan(offset, sizeof(int)), + v); + break; + case uint v: + BitConverter.TryWriteBytes( + destination.AsSpan(offset, sizeof(uint)), + v); + break; + case Vector2 v: + MemoryMarshal.Write( + destination.AsSpan(offset), + in v); + break; + case Vector3 v: + MemoryMarshal.Write( + destination.AsSpan(offset), + in v); + break; + case Vector4 v: + MemoryMarshal.Write( + destination.AsSpan(offset), + in v); + break; + case Matrix4x4 v: + MemoryMarshal.Write( + destination.AsSpan(offset), + in v); + break; + default: + throw new NotSupportedException( + $"Cannot serialize uniform value of type {value.GetType()}."); + } + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs index 12ef7bb..ff1906f 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/GraphicsPipelineBuilder.cs @@ -78,7 +78,7 @@ public GraphicsPipelineBuilder WithDepth() public unsafe GraphicsPipeline Create(Extent2D extent, Format imageFormat, ImageLayout finalLayout, - ref DescriptorSetLayout descriptorSetLayout) + DescriptorSetLayout[] descriptorSetLayouts) { if (Stages.Count == 0) throw new GraphicsPipelineBuilderException("No stages were added to the pipeline."); if (RenderPassBuilder == null) @@ -91,9 +91,15 @@ public unsafe GraphicsPipeline Create(Extent2D extent, Format imageFormat, for (var i = 0; i < Stages.Count; i++) stages[i] = Stages[i].Build(); var (bindingDescription, attributeDescriptions) = VertexLayoutBuilder.Build(); + + DescriptorSetLayout* layouts = stackalloc DescriptorSetLayout[descriptorSetLayouts.Length]; + for (var i = 0; i < descriptorSetLayouts.Length; i++) + { + var descriptorSetLayout = descriptorSetLayouts[i]; + layouts[i] = descriptorSetLayout; + } fixed (VertexInputAttributeDescription* attributeDescriptionsPtr = attributeDescriptions) - fixed (DescriptorSetLayout* descriptorPtr = &descriptorSetLayout) { PipelineVertexInputStateCreateInfo vertexInputInfo = new() { @@ -192,8 +198,8 @@ public unsafe GraphicsPipeline Create(Extent2D extent, Format imageFormat, { SType = StructureType.PipelineLayoutCreateInfo, PushConstantRangeCount = 0, - SetLayoutCount = 1, - PSetLayouts = descriptorPtr + SetLayoutCount = (uint)descriptorSetLayouts.Length, + PSetLayouts = layouts }; if (Vk!.CreatePipelineLayout(LogicalDevice, in pipelineLayoutInfo, null, out var pipelineLayout) != diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 4769e12..2cb36b4 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -2,9 +2,11 @@ using Drawie.RenderApi.Abstraction.CommandRecording; using Drawie.RenderApi.Abstraction.Pipeline; using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Shaders; using Drawie.RenderApi.Abstraction.Textures; using Drawie.RenderApi.Vulkan.Buffers; using Drawie.RenderApi.Vulkan.Exceptions; +using Drawie.RenderApi.Vulkan.Helpers; using Silk.NET.Vulkan; namespace Drawie.RenderApi.Vulkan; @@ -18,6 +20,7 @@ internal sealed class VulkanCommandList : CommandList, IDisposable private CommandBuffer commandBuffer; private bool recording; + private Dictionary uniformBuffers = new Dictionary(); private VulkanRenderTarget? renderTarget; private VulkanPipeline? pipeline; @@ -27,6 +30,8 @@ public VulkanCommandList( { this.context = context; this.commandPool = commandPool; + commandBuffer = AllocateCommandBuffer(); + BeginCommandBuffer(commandBuffer); } public override void BeginRenderPass(IRenderTarget fb) @@ -40,12 +45,9 @@ public override void BeginRenderPass(IRenderTarget fb) "Render target must be a Vulkan render target.", nameof(fb)); - pipeline = null; renderTarget = target; - commandBuffer = AllocateCommandBuffer(); - - BeginCommandBuffer(commandBuffer); + renderTarget.CreateFramebufferFor(pipeline.GraphicsPipeline.VkRenderPass); recording = true; @@ -54,14 +56,9 @@ public override void BeginRenderPass(IRenderTarget fb) public override void SetPipeline(IPipeline pipeline) { - if (!recording) - throw new InvalidOperationException( - "BeginRenderPass must be called first."); - if (pipeline is not VulkanPipeline vkPipeline) throw new ArgumentException("Only VulkanPipeline is supported"); - - pipeline.Apply(this); this.pipeline = vkPipeline; + //vkPipeline.DescriptorPool.Reset(); } public override void SetBuffers(IBufferGroup bufferGroup) @@ -78,8 +75,115 @@ public override void SetBuffers(IBufferGroup bufferGroup) BindBuffers(vkBuffers); } + public override void BindPipeline() + { + if (!recording) + throw new InvalidOperationException( + "BeginRenderPass must be called first."); + + if (pipeline == null) throw new NullReferenceException("Pipeline is was not set"); + + pipeline.Apply(this); + } + + public override PreparedTexture PrepareTexture(ITexture texture) + { + var vkTex = context.ManagedTextures[texture.TextureId]; + + if (vkTex is not VulkanTexture vkTexture) throw new ArgumentException("Only IVkTexture's are valid"); + vkTexture.MakeReadOnly(commandBuffer); + + return new PreparedTexture(texture.TextureId); + } + + public override void UpdateUniforms(List blocks, List textures, + List samplers) + { + foreach (var block in blocks) + { + UniformBuffer? buffer = null; + if (uniformBuffers.TryGetValue(block.Name, out var uniformBuffer)) + { + buffer = uniformBuffer; + } + else + { + buffer = new UniformBuffer(context.Api, context.LogicalDevice.Device, context.PhysicalDevice, + (ulong)block.ShaderLayout.Size); + } + + UniformUtility.SerializeToBuffer(block, buffer); + // TODO first texture is temporary as shader only supports single texture + UpdateUniformDescriptor(buffer, (ulong)block.ShaderLayout.Size, textures.FirstOrDefault(), samplers.FirstOrDefault()); + } + } + + private unsafe void UpdateUniformDescriptor(UniformBuffer buffer, ulong size, PreparedTexture texture, ISampler sampler) + { + var vkTexture = context.ManagedTextures[texture.Handle] as VulkanTexture; + var vkSampler = sampler as VulkanSampler; + // TODO: better id + var set = pipeline.DescriptorPool.GetOrAllocateDescriptorSet(0, buffer.VkBuffer.Handle); + DescriptorBufferInfo bufferInfo = new() + { + Buffer = buffer.VkBuffer, + Offset = 0, + Range = size + }; + + WriteDescriptorSet write = new() + { + SType = StructureType.WriteDescriptorSet, + DstSet = set, + DstBinding = 0, + DstArrayElement = 0, + DescriptorCount = 1, + DescriptorType = DescriptorType.UniformBuffer, + PBufferInfo = &bufferInfo + }; + + var imageInfo = new DescriptorImageInfo + { + Sampler = vkSampler.VkSampler, + ImageView = vkTexture.ColorAttachment.View, + ImageLayout = ImageLayout.ShaderReadOnlyOptimal + }; + + var writeImgSampler = new WriteDescriptorSet + { + SType = StructureType.WriteDescriptorSet, + DstSet = set, + DstBinding = 1, + DstArrayElement = 0, + DescriptorCount = 1, + DescriptorType = DescriptorType.CombinedImageSampler, + PImageInfo = &imageInfo + }; + + WriteDescriptorSet* sets = stackalloc WriteDescriptorSet[2]; + sets[0] = write; + sets[1] = writeImgSampler; + + context.Api.UpdateDescriptorSets( + context.LogicalDevice.Device, + 2, + sets, + 0, + null); + + context.Api!.CmdBindDescriptorSets( + commandBuffer, + PipelineBindPoint.Graphics, + pipeline.GraphicsPipeline.VkPipelineLayout, + 0, + 1, + in set, + 0, + null); + } + public override void BindTexture( - ITexture texture, + PreparedTexture texture, ISampler sampler) { if (!recording) @@ -91,12 +195,10 @@ public override void BindTexture( "Sampler must be a Vulkan sampler.", nameof(sampler)); - var vkTex = context.ManagedTextures[texture.TextureId]; + var vkTex = context.ManagedTextures[texture.Handle]; if (vkTex is not VulkanTexture vkTexture) throw new ArgumentException("Only IVkTexture's are valid"); - vkTexture.MakeReadOnly(commandBuffer); - BindTextureDescriptor( vkTexture, vkSampler); @@ -115,11 +217,12 @@ public override RecordedRenderPass EndRenderPass() { EnsureRecording(); - context.Api!.CmdEndRendering(commandBuffer); + context.Api!.CmdEndRenderPass(commandBuffer); EndCommandBuffer(commandBuffer); recording = false; + pipeline = null; return new VulkanRecordedRenderPass(context, commandBuffer, commandPool); } @@ -136,7 +239,7 @@ public override RecordedRenderPass EndRenderPass( "Destination must be a Vulkan render target.", nameof(blitTo)); - context.Api!.CmdEndRendering(commandBuffer); + context.Api!.CmdEndRenderPass(commandBuffer); Blit(renderTarget!.Texture, destination); @@ -154,6 +257,47 @@ private void EnsureRecording() "No Vulkan render pass is currently being recorded."); } + private unsafe void BindTextureDescriptor( + VulkanTexture texture, + VulkanSampler sampler) + { + var set = pipeline.DescriptorPool.GetOrAllocateDescriptorSet(1, texture.ImageHandle); + var imageInfo = new DescriptorImageInfo + { + Sampler = sampler.VkSampler, + ImageView = texture.ColorAttachment.View, + ImageLayout = ImageLayout.ShaderReadOnlyOptimal + }; + + var write = new WriteDescriptorSet + { + SType = StructureType.WriteDescriptorSet, + DstSet = set, + DstBinding = 1, + DstArrayElement = 0, + DescriptorCount = 1, + DescriptorType = DescriptorType.CombinedImageSampler, + PImageInfo = &imageInfo + }; + + context.Api!.UpdateDescriptorSets( + context.LogicalDevice.Device, + 1, + &write, + 0, + null); + + context.Api!.CmdBindDescriptorSets( + commandBuffer, + PipelineBindPoint.Graphics, + pipeline.GraphicsPipeline.VkPipelineLayout, + 1, + 1, + in set, + 0, + null); + } + private unsafe CommandBuffer AllocateCommandBuffer() { CommandBufferAllocateInfo info = new() @@ -202,8 +346,10 @@ private void EndCommandBuffer(CommandBuffer buffer) private unsafe void BeginRendering(VulkanRenderTarget target) { + target.Texture.ColorAttachment.TransitionLayout(ImageLayout.PresentSrcKhr, commandBuffer); + /* target.Texture.MakeWriteable(commandBuffer); - + RenderingAttachmentInfo colorAttachment = new() { SType = StructureType.RenderingAttachmentInfo, @@ -261,10 +407,54 @@ private unsafe void BeginRendering(VulkanRenderTarget target) if (target.Texture.DepthAttachment is not null) renderingInfo.PDepthAttachment = &depthAttachment; + */ - context.Api!.CmdBeginRendering( - commandBuffer, - in renderingInfo); + + RenderPassBeginInfo renderPassInfo = new() + { + SType = StructureType.RenderPassBeginInfo, + RenderPass = pipeline.GraphicsPipeline.VkRenderPass, + Framebuffer = renderTarget.Framebuffer.Value, + RenderArea = new Rect2D + { + Offset = new Offset2D(0, 0), + Extent = new Extent2D((uint)renderTarget.Size.X, (uint)renderTarget.Size.Y) + } + }; + + ClearValue clearColor = new() + { + Color = new ClearColorValue() { Float32_0 = 0, Float32_1 = 0, Float32_2 = 0, Float32_3 = 1 } + }; + + ClearValue clearDepth = new() + { + DepthStencil = new ClearDepthStencilValue(0, 0) + }; + + ClearValue clearMsaaResolved = new() + { + Color = new ClearColorValue() { Float32_0 = 0, Float32_1 = 0, Float32_2 = 0, Float32_3 = 1 } + }; + + ClearValue* clearValues = stackalloc ClearValue[(int)target.Texture.Attachments]; + clearValues[0] = clearColor; + int i = 0; + if (target.Texture.DepthAttachment != null) + { + clearValues[1] = clearDepth; + i++; + } + + if (target.Texture.MsaaResolvedColorAttachment != null) + { + clearValues[i] = clearMsaaResolved; + } + + renderPassInfo.ClearValueCount = target.Texture.Attachments; + renderPassInfo.PClearValues = clearValues; + + context.Api!.CmdBeginRenderPass(commandBuffer, &renderPassInfo, SubpassContents.Inline); } private unsafe void BindBuffers(VulkanBufferGroup group) @@ -296,47 +486,6 @@ private unsafe void BindBuffers(VulkanBufferGroup group) }); } - private unsafe void BindTextureDescriptor( - VulkanTexture texture, - VulkanSampler sampler) - { - var imageInfo = new DescriptorImageInfo - { - Sampler = sampler.VkSampler, - ImageView = texture.ColorAttachment.View, - ImageLayout = ImageLayout.ShaderReadOnlyOptimal - }; - - var write = new WriteDescriptorSet - { - SType = StructureType.WriteDescriptorSet, - DstSet = pipeline.DescriptorSet, - DstBinding = 1, - DstArrayElement = 0, - DescriptorCount = 1, - DescriptorType = DescriptorType.CombinedImageSampler, - PImageInfo = &imageInfo - }; - - context.Api!.UpdateDescriptorSets( - context.LogicalDevice.Device, - 1, - &write, - 0, - null); - - var set = pipeline.DescriptorSet; - context.Api!.CmdBindDescriptorSets( - commandBuffer, - PipelineBindPoint.Graphics, - pipeline.GraphicsPipeline.VkPipelineLayout, - 0, - 1, - in set, - 0, - null); - } - private void Blit( VulkanTexture source, VulkanTexture destination) @@ -391,6 +540,10 @@ private void Blit( public unsafe void Dispose() { + foreach (var uniformBuffer in uniformBuffers) + { + uniformBuffer.Value.Dispose(); + } context.Api.DestroyCommandPool(context.LogicalDevice.Device, commandPool, null); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs index d4fdbce..c234152 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs @@ -8,6 +8,7 @@ using Silk.NET.Core.Native; using Silk.NET.Vulkan; using Silk.NET.Vulkan.Extensions.EXT; +using Silk.NET.Vulkan.Extensions.KHR; namespace Drawie.RenderApi.Vulkan; @@ -39,6 +40,7 @@ public Instance Instance public IReadOnlyDictionary ManagedTextures => managedTextures; + private Dictionary managedTextures = new Dictionary(); private Instance instance; diff --git a/src/Drawie.RenderApi.Vulkan/VulkanDescriptorPool.cs b/src/Drawie.RenderApi.Vulkan/VulkanDescriptorPool.cs new file mode 100644 index 0000000..72af4c9 --- /dev/null +++ b/src/Drawie.RenderApi.Vulkan/VulkanDescriptorPool.cs @@ -0,0 +1,61 @@ +using Drawie.RenderApi.Vulkan.Exceptions; +using Silk.NET.Vulkan; + +namespace Drawie.RenderApi.Vulkan; + +public class VulkanDescriptorPool +{ + public VulkanContext Context { get; } + public DescriptorPool DescriptorPool { get; } + + public DescriptorSetLayout[] DescriptorSetLayouts { get; } + + private Dictionary sets = new Dictionary(); + + public VulkanDescriptorPool(VulkanContext context, DescriptorPool descriptorPool, + DescriptorSetLayout[] descriptorSetLayouts) + { + Context = context; + DescriptorPool = descriptorPool; + DescriptorSetLayouts = descriptorSetLayouts; + } + + public void Reset() + { + sets.Clear(); + } + + public unsafe DescriptorSet GetOrAllocateDescriptorSet(int layoutIndex, ulong forHandle) + { + if (sets.TryGetValue(forHandle, out var set)) return set; + + DescriptorSetLayout layout = DescriptorSetLayouts[layoutIndex]; + + DescriptorSetAllocateInfo allocInfo = new() + { + SType = StructureType.DescriptorSetAllocateInfo, + DescriptorPool = DescriptorPool, + DescriptorSetCount = 1, + PSetLayouts = &layout + }; + + DescriptorSet descriptorSet; + + var result = Context.Api.AllocateDescriptorSets( + Context.LogicalDevice.Device, + in allocInfo, + &descriptorSet); + + if (result != Result.Success) + throw new VulkanException( + $"Failed to allocate descriptor set: {result}"); + + sets[forHandle] = descriptorSet; + return descriptorSet; + } + + public unsafe void Dispose() + { + Context.Api.DestroyDescriptorPool(Context.LogicalDevice.Device, DescriptorPool, null); + } +} \ No newline at end of file diff --git a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs index 8e41d0a..ba9b6ba 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs @@ -129,7 +129,7 @@ public IShaderProgram CreateShaderProgram(ShaderProgramDesc desc) public IRenderTarget CreateRenderTarget(TextureDesc textureDesc) { var texture = (VulkanTexture)CreateTexture(textureDesc); - return new VulkanRenderTarget(texture, new VecI(textureDesc.Width, textureDesc.Height)); + return new VulkanRenderTarget(context, texture, new VecI(textureDesc.Width, textureDesc.Height)); } public IBufferGroup CreateBufferGroup() diff --git a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs index 375619d..d2db99b 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanHostViewRenderApi.cs @@ -560,7 +560,7 @@ private void CreateGraphicsPipeline() renderPass.WithSamples(1); }); - graphicsPipeline = builder.Create(swapChainExtent, swapChainImageFormat, ImageLayout.PresentSrcKhr, ref descriptorSetLayout); + graphicsPipeline = builder.Create(swapChainExtent, swapChainImageFormat, ImageLayout.PresentSrcKhr, [descriptorSetLayout]); } private unsafe void CreateImageViews() diff --git a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs index ce3309c..340ee65 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs @@ -17,7 +17,7 @@ internal sealed class VulkanPipeline : IPipeline, IDisposable public Pipeline Pipeline { get; } public GraphicsPipeline GraphicsPipeline => graphicsPipeline; - public DescriptorSet DescriptorSet => program.DescriptorSet; + public VulkanDescriptorPool DescriptorPool => program.DescriptorPool; public GraphicsPipelineBuilder Builder { get; } @@ -50,9 +50,10 @@ public unsafe void Apply(ICommandList cmdList) PipelineBindPoint.Graphics, Pipeline); - var descriptorSet = program.DescriptorSet; + /* context.Api.CmdBindDescriptorSets(commandList.CommandBuffer, PipelineBindPoint.Graphics, - GraphicsPipeline.VkPipelineLayout, 0, 1, &descriptorSet, 0, null); + GraphicsPipeline.VkPipelineLayout, 0, 1, in descriptorSet, 0, null); + */ } private GraphicsPipeline CreatePipeline() @@ -73,9 +74,9 @@ private GraphicsPipeline CreatePipeline() .WithSamples(Description.Rasterizer.Samples); }); Builder.WithDepth(); - var descriptorSetLayout = program.DescriptorSetLayout; + var pipeline = Builder.Create(new Extent2D((uint)Description.Viewport.Width, (uint)Description.Viewport.Height), - Format.R8G8B8A8Unorm, ImageLayout.PresentSrcKhr, ref descriptorSetLayout); + Format.R8G8B8A8Unorm, ImageLayout.PresentSrcKhr, [program.DescriptorSetLayout]); return pipeline; } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs b/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs index 27a08f4..530bf21 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanRenderTarget.cs @@ -1,14 +1,63 @@ using Drawie.Numerics; using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Vulkan.Extensions; +using Silk.NET.Vulkan; namespace Drawie.RenderApi.Vulkan; -internal sealed class VulkanRenderTarget(Buffers.VulkanTexture texture, VecI size) : IRenderTarget, IDisposable +internal sealed class VulkanRenderTarget(VulkanContext context, Buffers.VulkanTexture texture, VecI size) : IRenderTarget, IDisposable { + public VulkanContext Context { get; } = context; public ulong SurfaceId => Texture.ImageHandle; public VecI Size { get; } = size; public Buffers.VulkanTexture Texture { get; } = texture; + public Framebuffer? Framebuffer { get; private set; } + + private RenderPass? lastCreatedRenderPass; + + public unsafe void CreateFramebufferFor(RenderPass renderPass) + { + if (lastCreatedRenderPass != null && lastCreatedRenderPass.Value.Handle == renderPass.Handle) return; + + DestroyFramebuffer(); + ImageView* attachments = stackalloc ImageView[(int)Texture.Attachments]; + + attachments[0] = Texture.ColorAttachment.View; + int index = 1; + if (Texture.DepthAttachment != null) + { + attachments[index] = Texture.DepthAttachment.View; + index++; + } + + if (Texture.MsaaResolvedColorAttachment != null) + { + attachments[index] = Texture.MsaaResolvedColorAttachment.View; + } + + FramebufferCreateInfo framebufferCreateInfo = new() + { + SType = StructureType.FramebufferCreateInfo, + Width = (uint)Size.X, + Height = (uint)Size.Y, + RenderPass = renderPass, + AttachmentCount = Texture.Attachments, + PAttachments = attachments, + Layers = 1 + }; + + Context.Api.CreateFramebuffer(Context.LogicalDevice.Device, &framebufferCreateInfo, null, out var framebuffer) + .ThrowOnError("Failed to create framebuffer"); + Framebuffer = framebuffer; + } + + private unsafe void DestroyFramebuffer() + { + if(Framebuffer != null) + Context.Api.DestroyFramebuffer(Context.LogicalDevice.Device, Framebuffer.Value, null); + } + public void Dispose() { Texture.Dispose(); diff --git a/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs b/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs index 23675ca..18d95b1 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanShaderProgram.cs @@ -15,16 +15,13 @@ internal sealed class VulkanShaderProgram : IShaderProgram, IDisposable { public VulkanContext Context { get; } public ShaderProgramDesc Description { get; } - public List UniformBlocks { get; private set; } = new(); public GraphicsPipelineStageBuilder VertexStageBuilder { get; } public GraphicsPipelineStageBuilder FragmentStageBuilder { get; } public DescriptorSetLayout DescriptorSetLayout { get; set; } - public DescriptorPool DescriptorPool { get; set; } - public DescriptorSet DescriptorSet { get; set; } + public VulkanDescriptorPool DescriptorPool { get; set; } - private Dictionary uniformBuffers = new Dictionary(); public VulkanShaderProgram(VulkanContext context, ShaderProgramDesc desc) { @@ -56,156 +53,13 @@ public VulkanShaderProgram(VulkanContext context, ShaderProgramDesc desc) DescriptorSetLayout = CreateDescriptorSetLayout(); DescriptorPool = CreateDescriptorPool(); - DescriptorSet = AllocateDescriptorSet(); } public void Use() { } - public void UpdateUniforms(List blocks) - { - UniformBlocks = new List(blocks); - - foreach (var uniformBlock in UniformBlocks) - { - Serialize(uniformBlock); - } - } - - private void Serialize(UniformBlock block) - { - var data = new byte[block.ShaderLayout.Size]; - - UniformBuffer? buffer = null; - if (uniformBuffers.TryGetValue(block.Name, out var uniformBuffer)) - { - buffer = uniformBuffer; - } - else - { - buffer = new UniformBuffer(Context.Api, Context.LogicalDevice.Device, Context.PhysicalDevice, - (ulong)block.ShaderLayout.Size); - } - - foreach (var property in block.Properties) - { - var layout = block.ShaderLayout.UniformProperties - .FirstOrDefault(x => x.Name == property.UniformName); - - Write( - data, - layout.Offset, - property.ObjValue); - } - - buffer.SetData(data); - UpdateUniformDescriptor(buffer, (ulong)block.ShaderLayout.Size); - } - - private unsafe void UpdateUniformDescriptor(UniformBuffer buffer, ulong size) - { - DescriptorBufferInfo bufferInfo = new() - { - Buffer = buffer.VkBuffer, - Offset = 0, - Range = size - }; - - WriteDescriptorSet write = new() - { - SType = StructureType.WriteDescriptorSet, - DstSet = DescriptorSet, - DstBinding = 0, - DstArrayElement = 0, - DescriptorCount = 1, - DescriptorType = DescriptorType.UniformBuffer, - PBufferInfo = &bufferInfo - }; - - Context.Api.UpdateDescriptorSets( - Context.LogicalDevice.Device, - 1, - &write, - 0, - null); - } - - private void Write( - byte[] destination, - int offset, - object value) - { - switch (value) - { - case float v: - BitConverter.TryWriteBytes( - destination.AsSpan(offset, sizeof(float)), - v); - break; - case int v: - BitConverter.TryWriteBytes( - destination.AsSpan(offset, sizeof(int)), - v); - break; - case uint v: - BitConverter.TryWriteBytes( - destination.AsSpan(offset, sizeof(uint)), - v); - break; - case Vector2 v: - MemoryMarshal.Write( - destination.AsSpan(offset), - in v); - break; - case Vector3 v: - MemoryMarshal.Write( - destination.AsSpan(offset), - in v); - break; - case Vector4 v: - MemoryMarshal.Write( - destination.AsSpan(offset), - in v); - break; - case Matrix4x4 v: - MemoryMarshal.Write( - destination.AsSpan(offset), - in v); - break; - default: - throw new NotSupportedException( - $"Cannot serialize uniform value of type {value.GetType()}."); - } - } - - private unsafe DescriptorSet AllocateDescriptorSet() - { - DescriptorSetLayout layout = DescriptorSetLayout; - - DescriptorSetAllocateInfo allocInfo = new() - { - SType = StructureType.DescriptorSetAllocateInfo, - DescriptorPool = DescriptorPool, - DescriptorSetCount = 1, - PSetLayouts = &layout - }; - - DescriptorSet descriptorSet; - - var result = Context.Api.AllocateDescriptorSets( - Context.LogicalDevice.Device, - in allocInfo, - &descriptorSet); - - if (result != Result.Success) - throw new VulkanException( - $"Failed to allocate descriptor set: {result}"); - - return descriptorSet; - } - - private unsafe DescriptorPool CreateDescriptorPool() + private unsafe VulkanDescriptorPool CreateDescriptorPool() { DescriptorPoolSize poolSize = new DescriptorPoolSize() { @@ -228,12 +82,12 @@ private unsafe DescriptorPool CreateDescriptorPool() SType = StructureType.DescriptorPoolCreateInfo, PoolSizeCount = 2, PPoolSizes = poolSizes, - MaxSets = 2,// TODO: Check this + MaxSets = 10 }; Context.Api.CreateDescriptorPool(Context.LogicalDevice.Device, &poolInfo, null, out var descriptorPool).ThrowOnError("Failed to create descriptor pool."); - return descriptorPool; + return new VulkanDescriptorPool(Context, descriptorPool, [DescriptorSetLayout]); } private unsafe DescriptorSetLayout CreateDescriptorSetLayout() @@ -282,12 +136,7 @@ private unsafe DescriptorSetLayout CreateDescriptorSetLayout() public unsafe void Dispose() { - foreach (var uniformBuffer in uniformBuffers) - { - uniformBuffer.Value.Dispose(); - } - Context.Api.DestroyDescriptorSetLayout(Context.LogicalDevice.Device, DescriptorSetLayout, null); - Context.Api.DestroyDescriptorPool(Context.LogicalDevice.Device, DescriptorPool, null); + DescriptorPool.Dispose(); } } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs index 258544e..9c7e8c2 100644 --- a/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/CommandList.cs @@ -1,6 +1,7 @@ using Drawie.RenderApi.Abstraction.Buffers; using Drawie.RenderApi.Abstraction.Pipeline; using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Shaders; using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.RenderApi.Abstraction.CommandRecording; @@ -34,8 +35,12 @@ protected void ClearInstructions() public abstract void BeginRenderPass(IRenderTarget fb); public abstract void SetPipeline(IPipeline pipeline); public abstract void SetBuffers(IBufferGroup bufferGroup); - public abstract void BindTexture(ITexture texture, ISampler sampler); + public abstract void BindTexture(PreparedTexture texture, ISampler sampler); public abstract void DrawIndexed(int indexCount); public abstract RecordedRenderPass EndRenderPass(IRenderTarget blitTo); public abstract RecordedRenderPass EndRenderPass(); + public abstract void BindPipeline(); + public abstract PreparedTexture PrepareTexture(ITexture texture); + public abstract void UpdateUniforms(List blocks, List textures, + List samplers); } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs index aa7207a..8413c87 100644 --- a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs @@ -1,6 +1,7 @@ using Drawie.RenderApi.Abstraction.Buffers; using Drawie.RenderApi.Abstraction.Pipeline; using Drawie.RenderApi.Abstraction.RenderTargets; +using Drawie.RenderApi.Abstraction.Shaders; using Drawie.RenderApi.Abstraction.Textures; namespace Drawie.RenderApi.Abstraction.CommandRecording; @@ -10,8 +11,11 @@ public interface ICommandList void BeginRenderPass(IRenderTarget fb); void SetPipeline(IPipeline pipeline); void SetBuffers(IBufferGroup bufferGroup); - void BindTexture(ITexture texture, ISampler sampler); + void BindTexture(PreparedTexture texture, ISampler sampler); void DrawIndexed(int indexCount); RecordedRenderPass EndRenderPass(IRenderTarget blitTo); RecordedRenderPass EndRenderPass(); + void BindPipeline(); + PreparedTexture PrepareTexture(ITexture texture); + void UpdateUniforms(List blocks, List textures, List samplers); } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs b/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs index 3a59dbe..72f7b2e 100644 --- a/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs +++ b/src/Drawie.RenderApi/Abstraction/Shaders/IShaderProgram.cs @@ -3,5 +3,4 @@ namespace Drawie.RenderApi.Abstraction.Shaders; public interface IShaderProgram { public void Use(); - void UpdateUniforms(List blocks); } \ No newline at end of file diff --git a/src/Drawie.RenderApi/Abstraction/Textures/PreparedTexture.cs b/src/Drawie.RenderApi/Abstraction/Textures/PreparedTexture.cs new file mode 100644 index 0000000..30899d2 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Textures/PreparedTexture.cs @@ -0,0 +1,10 @@ +namespace Drawie.RenderApi.Abstraction.Textures; + +public struct PreparedTexture +{ + public ulong Handle { get; } + public PreparedTexture(ulong handle) + { + Handle = handle; + } +} \ No newline at end of file diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 527f0ce..1f49dd6 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -40,6 +40,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded @@ -57,6 +58,7 @@ ForceIncluded ForceIncluded ForceIncluded + ForceIncluded ForceIncluded ForceIncluded ForceIncluded diff --git a/src/DrawieSample.Desktop/Program.cs b/src/DrawieSample.Desktop/Program.cs index b1141bc..2a08667 100644 --- a/src/DrawieSample.Desktop/Program.cs +++ b/src/DrawieSample.Desktop/Program.cs @@ -2,7 +2,7 @@ using DrawiEngine; using DrawiEngine.Desktop; -DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(true); +DrawingEngine engine = DesktopDrawingEngine.CreateDefaultDesktop(); Drawie2SampleApp app = new Drawie2SampleApp(); From b75228aee2256f0de8a4dd685fe8944733dcfae6 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sun, 16 Aug 2026 20:18:32 +0200 Subject: [PATCH 32/55] works with dynamic rendering now --- src/Drawie.Backend.Vertie/Core/Mesh.cs | 4 +- .../Helpers/TextureFramebufferExtensions.cs | 4 +- .../Rendering/Material.cs | 38 +++--- .../Rendering/MaterialInstance.cs | 50 ++++++++ .../Rendering/PropertyDefinition.cs | 40 ++++++ src/Drawie.Backend.Vertie/Rendering/Shader.cs | 29 ++--- .../Vk/VulkanInteropContext.cs | 2 + .../VulkanCommandList.cs | 120 +++++++++--------- src/Drawie.RenderApi.Vulkan/VulkanContext.cs | 1 + .../VulkanGraphicsDevice.cs | 11 +- .../VulkanWindowContext.cs | 9 ++ .../Abstraction/Shaders/ShaderProperty.cs | 2 +- .../Abstraction/Shaders/UniformBlock.cs | 2 + 13 files changed, 212 insertions(+), 100 deletions(-) create mode 100644 src/Drawie.Backend.Vertie/Rendering/MaterialInstance.cs create mode 100644 src/Drawie.Backend.Vertie/Rendering/PropertyDefinition.cs diff --git a/src/Drawie.Backend.Vertie/Core/Mesh.cs b/src/Drawie.Backend.Vertie/Core/Mesh.cs index d7cae52..9098e10 100644 --- a/src/Drawie.Backend.Vertie/Core/Mesh.cs +++ b/src/Drawie.Backend.Vertie/Core/Mesh.cs @@ -13,7 +13,7 @@ public class Mesh public IReadOnlyList TexCoords => texCoords; public IReadOnlyList Indicies => indicies; public int IndexCount => Indicies.Count; - public Material Material { get; } + public MaterialInstance Material { get; } internal bool BuffersInitialized { get; private set; } = false; public IBufferGroup Buffers { get; private set; } @@ -29,7 +29,7 @@ public Mesh(Vector3[] vertices, uint[] indicies, Vector3[] normals, Vector2[] te this.indicies = indicies; this.normals = normals; this.texCoords = texCoords; - Material = material; + Material = new MaterialInstance(material); } internal void GenerateBuffers(IGraphicsDevice device) diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index b0d9993..1b8a028 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -71,7 +71,7 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), }); - cmdList ??= device.CreateCommandList(); + cmdList = device.CreateCommandList(); foreach (var mesh in scene.Meshes) { @@ -151,7 +151,7 @@ private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsD var program = graphicsDevice.CreateShaderProgram(new ShaderProgramDesc( - scene.Meshes.SelectMany(x => x.Material.Shaders) + scene.Meshes.SelectMany(x => x.Material.Original.Shaders) .Select(x => new ShaderDesc(x.EntryName, x.ShaderBytes, x.ShaderType)))); cachedShaderPrograms.Add(scene, program); diff --git a/src/Drawie.Backend.Vertie/Rendering/Material.cs b/src/Drawie.Backend.Vertie/Rendering/Material.cs index da3be72..b12e301 100644 --- a/src/Drawie.Backend.Vertie/Rendering/Material.cs +++ b/src/Drawie.Backend.Vertie/Rendering/Material.cs @@ -10,7 +10,7 @@ public class Material { public string Name { get; set; } public Shader[] Shaders { get; set; } - public Dictionary Properties { get; set; } = new(); + public Dictionary Properties { get; set; } = new(); public List Textures { get; set; } = new(); private int _textureCount; @@ -21,29 +21,29 @@ public Material(string name, Shader[] shaders) Shaders = shaders; Properties.Add("Transform", - new UniformBlock("Transform") - .AddProperty(new ShaderProperty("uModel", Matrix4x4.Identity)) - .AddProperty(new ShaderProperty("uView", Matrix4x4.Identity)) - .AddProperty(new ShaderProperty("uProjection", Matrix4x4.Identity))); - } - - public void AddTexture(ITexture texture) - { - Textures.Add(texture); - } + new PropertyGroupDefinition("Transform") + .AddProperty("uModel", Matrix4x4.Identity) + .AddProperty("uView", Matrix4x4.Identity) + .AddProperty("uProjection", Matrix4x4.Identity)); - public void Use(Camera camera) - { - Properties["Transform"].SetProperty("uView", camera.ViewMatrix); - Properties["Transform"].SetProperty("uProjection", camera.ProjectionMatrix); + foreach (var propertyGroup in Properties) + { + foreach (var shader in shaders) + { + if (shader.HasUniformBlock(propertyGroup.Key)) + { + propertyGroup.Value.ShaderLayout = shader.GetLayoutFor(propertyGroup.Key); + } + } + } } - public void PrepareForObject(Transform transform) + public void AddTexture(ITexture texture) { - Properties["Transform"].SetProperty("uModel", transform.ViewMatrix); - UpdateShader(); + Textures.Add(texture); } + /* public void UpdateShader() { foreach (var property in Properties) @@ -62,5 +62,5 @@ private void ApplyToShader(UniformBlock prop) shader.SetUniformBlock(prop); } } - } + }*/ } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/MaterialInstance.cs b/src/Drawie.Backend.Vertie/Rendering/MaterialInstance.cs new file mode 100644 index 0000000..ed2b0e7 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Rendering/MaterialInstance.cs @@ -0,0 +1,50 @@ +using Drawie.Backend.Vertie.Core; +using Drawie.RenderApi.Abstraction.Shaders; +using Drawie.RenderApi.Abstraction.Textures; + +namespace Drawie.Backend.Vertie.Rendering; + +public class MaterialInstance +{ + public Material Original { get; } + + public Guid InstanceId { get; } = Guid.NewGuid(); + + public Dictionary Properties { get; set; } + public List Textures { get; } + + public MaterialInstance(Material from) + { + Original = from; + Properties = CreateFromDefinitions(from.Properties); + Textures = new List(Original.Textures); + } + + public void Use(Camera camera) + { + Properties["Transform"].SetProperty("uView", camera.ViewMatrix); + Properties["Transform"].SetProperty("uProjection", camera.ProjectionMatrix); + } + + public void PrepareForObject(Transform transform) + { + Properties["Transform"].SetProperty("uModel", transform.ViewMatrix); + } + + private Dictionary CreateFromDefinitions(Dictionary fromProperties) + { + var dict = new Dictionary(); + foreach (var propertyGroupDefinition in fromProperties) + { + var block = new UniformBlock(propertyGroupDefinition.Key) { ShaderLayout = propertyGroupDefinition.Value.ShaderLayout }; + foreach (var prop in propertyGroupDefinition.Value.Properties) + { + block.AddProperty(new ShaderProperty(prop.Name) { ObjValue = prop.DefaultValue, Type = prop.ValueType }); + } + + dict.Add(propertyGroupDefinition.Key, block); + } + + return dict; + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/PropertyDefinition.cs b/src/Drawie.Backend.Vertie/Rendering/PropertyDefinition.cs new file mode 100644 index 0000000..34c8891 --- /dev/null +++ b/src/Drawie.Backend.Vertie/Rendering/PropertyDefinition.cs @@ -0,0 +1,40 @@ +using System.Numerics; +using System.Reflection.Metadata; +using Drawie.RenderApi.Abstraction.Shaders; + +namespace Drawie.Backend.Vertie.Rendering; + +public class PropertyGroupDefinition +{ + public string Name { get; } + public IReadOnlyList Properties => properties; + public UniformBlockLayout ShaderLayout { get; set; } + + private List properties = new List(); + + public PropertyGroupDefinition(string name) + { + Name = name; + properties = new List(); + } + + public PropertyGroupDefinition AddProperty(string name, T? defaultValue) + { + properties.Add(new PropertyDefinition(name, typeof(T), defaultValue)); + return this; + } +} + +public struct PropertyDefinition +{ + public string Name { get; } + public Type ValueType { get; } + public object? DefaultValue { get; } + + public PropertyDefinition(string name, Type valueType, object? defaultValue) + { + Name = name; + ValueType = valueType; + DefaultValue = defaultValue; + } +} \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Rendering/Shader.cs b/src/Drawie.Backend.Vertie/Rendering/Shader.cs index fbd3df7..302bcbe 100644 --- a/src/Drawie.Backend.Vertie/Rendering/Shader.cs +++ b/src/Drawie.Backend.Vertie/Rendering/Shader.cs @@ -7,38 +7,33 @@ public class Shader(byte[] shaderBytes, ShaderReflection reflection) { public byte[] ShaderBytes { get; } = shaderBytes; - public ShaderType ShaderType { get; } = reflection.EntryPoints.FirstOrDefault()?.Type ?? throw new ArgumentException("Shader type not found in the compiled shader."); - public string EntryName { get; } = reflection.EntryPoints.FirstOrDefault()?.Name ?? throw new ArgumentException("Shader entry point not found in the compiled shader."); + public ShaderType ShaderType { get; } = reflection.EntryPoints.FirstOrDefault()?.Type ?? + throw new ArgumentException( + "Shader type not found in the compiled shader."); - public ShaderReflection Reflection { get; } = reflection; - - public IReadOnlyDictionary Properties => properties; + public string EntryName { get; } = reflection.EntryPoints.FirstOrDefault()?.Name ?? + throw new ArgumentException( + "Shader entry point not found in the compiled shader."); - private Dictionary properties = new Dictionary(); + public ShaderReflection Reflection { get; } = reflection; public bool HasUniformBlock(string name) { return Reflection.Parameters.Any(x => x.Name == name); } - public void SetUniformBlock(UniformBlock block) + public UniformBlockLayout GetLayoutFor(string propertyGroupKey) { - properties[block.Name] = block; - SetBlockLayout(block); - } - - private void SetBlockLayout(UniformBlock block) - { - var elementVarLayout = Reflection.Parameters.FirstOrDefault(x => x.Name == block.Name); + var elementVarLayout = Reflection.Parameters.FirstOrDefault(x => x.Name == propertyGroupKey); if (elementVarLayout?.Var == null) { - throw new ArgumentException($"Uniform block binding '{block.Name}' not found in the compiled shader."); + throw new ArgumentException($"Uniform block binding '{propertyGroupKey}' not found in the compiled shader."); } List propLayouts = GetPropertyLayouts(elementVarLayout.Var); - - block.ShaderLayout = new UniformBlockLayout() + + return new UniformBlockLayout() { Index = elementVarLayout.Index, Size = elementVarLayout.Size, diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs index 1cba3a7..fc1879a 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs @@ -28,6 +28,8 @@ public VulkanInteropContext(ICompositionGpuInterop gpuInterop) this.gpuInterop = gpuInterop; } + public override KhrDynamicRendering? DynamicRendering { get; } = null; // TODO: + public override void Initialize(IVulkanContextInfo contextInfo) { if (gpuInterop is null) diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 2cb36b4..c184884 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -14,13 +14,14 @@ namespace Drawie.RenderApi.Vulkan; internal sealed class VulkanCommandList : CommandList, IDisposable { public CommandBuffer CommandBuffer => commandBuffer; + public Dictionary BufferCache { get; set; } + private readonly VulkanContext context; private readonly CommandPool commandPool; private CommandBuffer commandBuffer; private bool recording; - private Dictionary uniformBuffers = new Dictionary(); private VulkanRenderTarget? renderTarget; private VulkanPipeline? pipeline; @@ -102,7 +103,7 @@ public override void UpdateUniforms(List blocks, List blocks, List PhysicalDevice.Handle; IntPtr IVulkanContext.InstanceHandle => Instance.Handle; IntPtr IVulkanContext.GraphicsQueueHandle => GraphicsQueue.Handle; + public abstract KhrDynamicRendering? DynamicRendering { get; } public IntPtr GetProcedureAddress(string name, IntPtr instance, IntPtr device) { diff --git a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs index ba9b6ba..9c36860 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs @@ -15,12 +15,14 @@ namespace Drawie.RenderApi.Vulkan; -public sealed class VulkanGraphicsDevice : IGraphicsDevice +public sealed class VulkanGraphicsDevice : IGraphicsDevice { private readonly VulkanContext context; private readonly CommandPool commandPool; private VulkanPipeline? pipeline; + private Dictionary bufferCache = new Dictionary(); + private List disposables = new List(); public VulkanGraphicsDevice(VulkanContext context) @@ -102,7 +104,7 @@ public IPipeline CreatePipeline(PipelineDesc desc) public ICommandList CreateCommandList() { - var cmdList = new VulkanCommandList(context, commandPool); + var cmdList = new VulkanCommandList(context, commandPool) { BufferCache = bufferCache }; disposables.Add(cmdList); return cmdList; } @@ -139,6 +141,11 @@ public IBufferGroup CreateBufferGroup() public unsafe void Dispose() { + foreach (var uniformBuffer in bufferCache) + { + uniformBuffer.Value.Dispose(); + } + context.Api!.DestroyCommandPool( context.LogicalDevice.Device, commandPool, diff --git a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs index 8d2305a..2aa0c0a 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs @@ -27,6 +27,9 @@ private unsafe void CreateSurface(IVulkanContextInfo vkContext) surface = new VkNonDispatchableHandle(vkContext.GetSurfaceHandle(Instance.Handle)).ToSurface(); } + public override KhrDynamicRendering? DynamicRendering => khrDynamicRendering; + private KhrDynamicRendering khrDynamicRendering; + public override void Initialize(IVulkanContextInfo contextInfo) { Api = Vk.GetApi(); @@ -36,6 +39,7 @@ public override void Initialize(IVulkanContextInfo contextInfo) deviceExtensions.Add(KhrDynamicRendering.ExtensionName); SetupInstance(contextInfo); + SetupDebugMessenger(); if (contextInfo.HasSurface) @@ -46,6 +50,11 @@ public override void Initialize(IVulkanContextInfo contextInfo) GpuInfo = PickPhysicalDevice(); CreateLogicalDevice(); + + if (Api.TryGetDeviceExtension(Instance, LogicalDevice.Device, out KhrDynamicRendering dynamicRendering)) + { + khrDynamicRendering = dynamicRendering; + } } protected override unsafe void CreateLogicalDevice() diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProperty.cs b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProperty.cs index 929abf8..8279a11 100644 --- a/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProperty.cs +++ b/src/Drawie.RenderApi/Abstraction/Shaders/ShaderProperty.cs @@ -3,7 +3,7 @@ public class ShaderProperty { public string UniformName { get; set; } - public object ObjValue { get; set; } + public object? ObjValue { get; set; } public Type Type { get; set; } public ShaderProperty(string name) diff --git a/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs b/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs index 3d0bf39..53a6e10 100644 --- a/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs +++ b/src/Drawie.RenderApi/Abstraction/Shaders/UniformBlock.cs @@ -9,6 +9,8 @@ public class UniformBlock public List Properties { get; set; } = new List(); public UniformBlockLayout ShaderLayout { get; set; } + public Guid UniformBlockId { get; } = Guid.NewGuid(); + public UniformBlock AddProperty(ShaderProperty property) { Properties.Add(property); From 9aabfd88b4bd6497bfaa666d5155e3fad91ef75e Mon Sep 17 00:00:00 2001 From: flabbet Date: Sun, 16 Aug 2026 20:44:00 +0200 Subject: [PATCH 33/55] classic render pass works --- .../Helpers/TextureFramebufferExtensions.cs | 14 --------- .../Vk/VulkanInteropContext.cs | 2 -- .../Buffers/VulkanImageAttachment.cs | 31 +++++++++++++++++++ .../Stages/Builders/RenderPassBuilder.cs | 3 +- .../VulkanCommandList.cs | 16 +++++----- src/Drawie.RenderApi.Vulkan/VulkanContext.cs | 1 - src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs | 2 +- .../VulkanWindowContext.cs | 9 ------ 8 files changed, 41 insertions(+), 37 deletions(-) diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 1b8a028..0d14ffc 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -119,20 +119,6 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, } cmdList.UpdateUniforms(material.Properties.Values.ToList(), texturesForMaterial, samplers); - - /*for (var i = 0; i < material.Textures.Count; i++) - { - var materialTexture = material.Textures[i]; - var sampler = cachedSamplers.GetValueOrDefault(materialTexture); - if (sampler == null) - { - sampler = device.CreateSampler(new SamplerDesc()); - cachedSamplers[materialTexture] = sampler; - } - - cmdList.BindTexture(preparedTextures[materialTexture.TextureId], sampler); - }*/ - cmdList.DrawIndexed(mesh.IndexCount); } diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs index fc1879a..1cba3a7 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs @@ -28,8 +28,6 @@ public VulkanInteropContext(ICompositionGpuInterop gpuInterop) this.gpuInterop = gpuInterop; } - public override KhrDynamicRendering? DynamicRendering { get; } = null; // TODO: - public override void Initialize(IVulkanContextInfo contextInfo) { if (gpuInterop is null) diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs index bfc07ed..7d0969a 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanImageAttachment.cs @@ -155,6 +155,37 @@ public void TransitionLayout( Layout = newLayout; } + + public void TransitionLayout( + ImageLayout oldLayout, + ImageLayout newLayout, + CommandBuffer? commandBuffer = null) + { + if (commandBuffer.HasValue) + { + TransitionLayout( + commandBuffer.Value, + oldLayout, + newLayout); + + Layout = newLayout; + return; + } + + using var session = new SingleTimeCommandBufferSession( + vk, + commandPool, + device, + graphicsQueue); + + TransitionLayout( + session.CommandBuffer, + oldLayout, + newLayout); + + Layout = newLayout; + } + private void TransitionLayout( CommandBuffer commandBuffer, diff --git a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs index 20c15ba..5a9505d 100644 --- a/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs +++ b/src/Drawie.RenderApi.Vulkan/Stages/Builders/RenderPassBuilder.cs @@ -87,7 +87,7 @@ public unsafe RenderPass Create(Format format, ImageLayout imageLayout) StencilLoadOp = AttachmentLoadOp.DontCare, StencilStoreOp = AttachmentStoreOp.DontCare, InitialLayout = ImageLayout.Undefined, - FinalLayout = ImageLayout.PresentSrcKhr + FinalLayout = imageLayout }; if (Samples > 1) @@ -152,7 +152,6 @@ public unsafe RenderPass Create(Format format, ImageLayout imageLayout) attachments = attachmentDescriptions; } - RenderPassCreateInfo renderPassInfo = new() { SType = StructureType.RenderPassCreateInfo, diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index c184884..49387fd 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -219,8 +219,8 @@ public override RecordedRenderPass EndRenderPass() { EnsureRecording(); - context.DynamicRendering.CmdEndRendering(commandBuffer); - //context.Api!.CmdEndRenderPass(commandBuffer); + //context.DynamicRendering.CmdEndRendering(commandBuffer); + context.Api!.CmdEndRenderPass(commandBuffer); EndCommandBuffer(commandBuffer); @@ -349,13 +349,13 @@ private void EndCommandBuffer(CommandBuffer buffer) private void BeginRendering(VulkanRenderTarget target) { - BeginDynamicRendering(target); - //BeginRenderPass(target); + //BeginDynamicRendering(target); + BeginRenderPass(target); } private unsafe void BeginRenderPass(VulkanRenderTarget target) { - target.Texture.ColorAttachment.TransitionLayout(ImageLayout.PresentSrcKhr, commandBuffer); + target.Texture.MakeWriteable(commandBuffer); RenderPassBeginInfo renderPassInfo = new() { SType = StructureType.RenderPassBeginInfo, @@ -374,7 +374,7 @@ private unsafe void BeginRenderPass(VulkanRenderTarget target) ClearValue clearDepth = new() { - DepthStencil = new ClearDepthStencilValue(0, 0) + DepthStencil = new ClearDepthStencilValue(1, 0) }; ClearValue clearMsaaResolved = new() @@ -402,7 +402,7 @@ private unsafe void BeginRenderPass(VulkanRenderTarget target) context.Api!.CmdBeginRenderPass(commandBuffer, &renderPassInfo, SubpassContents.Inline); } - private unsafe void BeginDynamicRendering(VulkanRenderTarget target) + /*private unsafe void BeginDynamicRendering(VulkanRenderTarget target) { target.Texture.MakeWriteable(commandBuffer); @@ -465,7 +465,7 @@ private unsafe void BeginDynamicRendering(VulkanRenderTarget target) renderingInfo.PDepthAttachment = &depthAttachment; context.DynamicRendering?.CmdBeginRendering(commandBuffer, &renderingInfo); - } + }*/ private unsafe void BindBuffers(VulkanBufferGroup group) { diff --git a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs index 6474aec..c234152 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs @@ -56,7 +56,6 @@ public Instance Instance IntPtr IVulkanContext.PhysicalDeviceHandle => PhysicalDevice.Handle; IntPtr IVulkanContext.InstanceHandle => Instance.Handle; IntPtr IVulkanContext.GraphicsQueueHandle => GraphicsQueue.Handle; - public abstract KhrDynamicRendering? DynamicRendering { get; } public IntPtr GetProcedureAddress(string name, IntPtr instance, IntPtr device) { diff --git a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs index 340ee65..ddde7ac 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanPipeline.cs @@ -76,7 +76,7 @@ private GraphicsPipeline CreatePipeline() Builder.WithDepth(); var pipeline = Builder.Create(new Extent2D((uint)Description.Viewport.Width, (uint)Description.Viewport.Height), - Format.R8G8B8A8Unorm, ImageLayout.PresentSrcKhr, [program.DescriptorSetLayout]); + Format.R8G8B8A8Unorm, ImageLayout.ColorAttachmentOptimal, [program.DescriptorSetLayout]); return pipeline; } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs index 2aa0c0a..a004400 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs @@ -27,16 +27,12 @@ private unsafe void CreateSurface(IVulkanContextInfo vkContext) surface = new VkNonDispatchableHandle(vkContext.GetSurfaceHandle(Instance.Handle)).ToSurface(); } - public override KhrDynamicRendering? DynamicRendering => khrDynamicRendering; - private KhrDynamicRendering khrDynamicRendering; - public override void Initialize(IVulkanContextInfo contextInfo) { Api = Vk.GetApi(); TryAddValidationLayer("VK_LAYER_KHRONOS_validation"); deviceExtensions.Add(KhrSwapchain.ExtensionName); - deviceExtensions.Add(KhrDynamicRendering.ExtensionName); SetupInstance(contextInfo); @@ -50,11 +46,6 @@ public override void Initialize(IVulkanContextInfo contextInfo) GpuInfo = PickPhysicalDevice(); CreateLogicalDevice(); - - if (Api.TryGetDeviceExtension(Instance, LogicalDevice.Device, out KhrDynamicRendering dynamicRendering)) - { - khrDynamicRendering = dynamicRendering; - } } protected override unsafe void CreateLogicalDevice() From a80418965abdd25e5acc4f12d6c9a2a0fe5c35f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Wed, 19 Aug 2026 09:37:42 +0200 Subject: [PATCH 34/55] Updated to avalonia 12 --- src/Directory.Build.props | 4 +++- src/Drawie.Interop.Avalonia.Core/Controls/InteropControl.cs | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 2d46b7c..1156014 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,5 +1,7 @@ - 11.3.12-cibuild0004211-alpha + [12.1.1-cibuild0004425-alpha] + true + true \ No newline at end of file diff --git a/src/Drawie.Interop.Avalonia.Core/Controls/InteropControl.cs b/src/Drawie.Interop.Avalonia.Core/Controls/InteropControl.cs index 7703bf6..708c612 100644 --- a/src/Drawie.Interop.Avalonia.Core/Controls/InteropControl.cs +++ b/src/Drawie.Interop.Avalonia.Core/Controls/InteropControl.cs @@ -124,7 +124,7 @@ public override void Render(DrawingContext context) void UpdateFrame() { updateQueued = false; - var root = this.GetVisualRoot(); + var root = this.VisualRoot; if (root == null) { return; From 01d4faf8e4e694eaf9ca397045815dc509cd1c63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Wed, 19 Aug 2026 16:44:02 +0200 Subject: [PATCH 35/55] net 10 --- src/DrawiEngine/DrawiEngine.csproj | 2 +- src/Drawie.Backend.Core/Drawie.Backend.Core.csproj | 2 +- src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj | 2 +- .../Drawie.Interop.Avalonia.Core.csproj | 2 +- .../Drawie.Interop.Avalonia.OpenGl.csproj | 2 +- .../Drawie.Interop.Avalonia.Vulkan.csproj | 4 ++-- src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj | 2 +- src/Drawie.Numerics/Drawie.Numerics.csproj | 2 +- src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj | 2 +- src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj | 2 +- src/Drawie.RenderApi/Drawie.RenderApi.csproj | 2 +- src/Drawie.Windowing/Drawie.Windowing.csproj | 2 +- 12 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/DrawiEngine/DrawiEngine.csproj b/src/DrawiEngine/DrawiEngine.csproj index b131288..d7395b9 100644 --- a/src/DrawiEngine/DrawiEngine.csproj +++ b/src/DrawiEngine/DrawiEngine.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.Backend.Core/Drawie.Backend.Core.csproj b/src/Drawie.Backend.Core/Drawie.Backend.Core.csproj index be3b2d5..06eecf2 100644 --- a/src/Drawie.Backend.Core/Drawie.Backend.Core.csproj +++ b/src/Drawie.Backend.Core/Drawie.Backend.Core.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj index 113bada..034baf6 100644 --- a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj +++ b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable Drawie.Skia diff --git a/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj b/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj index ae66f4e..cf9bae4 100644 --- a/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj +++ b/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable Drawie.Interop.Avalonia.Core diff --git a/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj b/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj index 358fb47..2e64d8d 100644 --- a/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj +++ b/src/Drawie.Interop.Avalonia.OpenGl/Drawie.Interop.Avalonia.OpenGl.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj index b9367bc..7d45859 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj +++ b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true @@ -18,7 +18,7 @@ - ..\Drawie.AvaloniaInterop\bin\Debug\net8.0\Avalonia.Vulkan.dll + ..\Drawie.AvaloniaInterop\bin\Debug\net10.0\Avalonia.Vulkan.dll diff --git a/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj b/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj index 043e4d4..22e872e 100644 --- a/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj +++ b/src/Drawie.Interop.Avalonia/Drawie.Interop.Avalonia.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.Numerics/Drawie.Numerics.csproj b/src/Drawie.Numerics/Drawie.Numerics.csproj index 4a24632..2c5fb06 100644 --- a/src/Drawie.Numerics/Drawie.Numerics.csproj +++ b/src/Drawie.Numerics/Drawie.Numerics.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj b/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj index 8f1eca8..6013806 100644 --- a/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj +++ b/src/Drawie.RenderApi.OpenGl/Drawie.RenderApi.OpenGl.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj b/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj index 3e989ea..4f5b5f0 100644 --- a/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj +++ b/src/Drawie.RenderApi.Vulkan/Drawie.RenderApi.Vulkan.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable true diff --git a/src/Drawie.RenderApi/Drawie.RenderApi.csproj b/src/Drawie.RenderApi/Drawie.RenderApi.csproj index fffbb83..12925a6 100644 --- a/src/Drawie.RenderApi/Drawie.RenderApi.csproj +++ b/src/Drawie.RenderApi/Drawie.RenderApi.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.Windowing/Drawie.Windowing.csproj b/src/Drawie.Windowing/Drawie.Windowing.csproj index b0dcde8..3891880 100644 --- a/src/Drawie.Windowing/Drawie.Windowing.csproj +++ b/src/Drawie.Windowing/Drawie.Windowing.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable From 8a8ccbdc8b6c41eb5ae3774e90c5437195c8c144 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 20 Aug 2026 11:35:25 +0200 Subject: [PATCH 36/55] Fixed handle management --- src/Drawie.Backend.Core/Surfaces/Pixmap.cs | 7 +- .../Vector/EditableVectorPath.cs | 9 +- src/Drawie.Backend.Core/Vector/SubShape.cs | 5 + .../Vector/VectorPathData.cs | 181 ++++++++++++++++++ .../ConversionExtensions.cs | 9 +- .../Implementations/SKObjectImplementation.cs | 50 ++--- .../SkiaBitmapImplementation.cs | 10 +- .../SkiaBlenderImplementation.cs | 8 +- .../SkiaCanvasImplementation.cs | 10 +- .../SkiaColorFilterImplementation.cs | 28 +-- .../SkiaColorSpaceImplementation.cs | 14 +- .../Implementations/SkiaFontImplementation.cs | 17 +- .../SkiaImageFilterImplementation.cs | 37 ++-- .../SkiaImageImplementation.cs | 37 ++-- .../SkiaImgDataImplementation.cs | 3 +- .../Implementations/SkiaMeshImplementation.cs | 3 +- .../SkiaPaintImplementation.cs | 15 +- .../SkiaPathEffectImplementation.cs | 4 +- .../Implementations/SkiaPathImplementation.cs | 19 +- .../SkiaPictureImplementation.cs | 3 +- .../SkiaPixmapImplementation.cs | 6 +- .../SkiaRecorderImplementation.cs | 9 +- .../SkiaShaderImplementation.cs | 76 ++++---- .../SkiaSurfaceImplementation.cs | 8 +- 24 files changed, 351 insertions(+), 217 deletions(-) create mode 100644 src/Drawie.Backend.Core/Vector/VectorPathData.cs diff --git a/src/Drawie.Backend.Core/Surfaces/Pixmap.cs b/src/Drawie.Backend.Core/Surfaces/Pixmap.cs index ac4ce80..9dcbf69 100644 --- a/src/Drawie.Backend.Core/Surfaces/Pixmap.cs +++ b/src/Drawie.Backend.Core/Surfaces/Pixmap.cs @@ -9,15 +9,10 @@ public class Pixmap : NativeObject { public override object Native => DrawingBackendApi.Current.PixmapImplementation.GetNativePixmap(ObjectPointer); - internal Pixmap(IntPtr objPtr) : base(objPtr) + public Pixmap(IntPtr objPtr) : base(objPtr) { } - public static Pixmap InternalCreateFromExistingPointer(IntPtr objPointer) - { - return new Pixmap(objPointer); - } - public Pixmap(ImageInfo imgInfo, IntPtr dataPtr) : base(dataPtr) { ObjectPointer = DrawingBackendApi.Current.PixmapImplementation.Construct(dataPtr, imgInfo); diff --git a/src/Drawie.Backend.Core/Vector/EditableVectorPath.cs b/src/Drawie.Backend.Core/Vector/EditableVectorPath.cs index 6050ae2..161b876 100644 --- a/src/Drawie.Backend.Core/Vector/EditableVectorPath.cs +++ b/src/Drawie.Backend.Core/Vector/EditableVectorPath.cs @@ -52,6 +52,12 @@ public EditableVectorPath(VectorPath path) } } + public EditableVectorPath(VectorPathData dataPath) + { + Path = dataPath.ToPath(); + UpdatePathFrom(Path); + } + public int IndexOf(SubShape subShape) { return subShapes.IndexOf(subShape); @@ -108,7 +114,7 @@ private void UpdatePathFrom(VectorPath from) { isSubShapeClosed = true; VecF[] verbData = data.points.ToArray(); - if(verbData.Length < 2) + if (verbData.Length < 2) { var newData = new VecF[2]; if (verbData.Length == 1) @@ -119,6 +125,7 @@ private void UpdatePathFrom(VectorPath from) verbData = newData; } + if (currentSubShapePoints[^1].Verb.IsEmptyVerb()) { int lastIndex = currentSubShapePoints.Count - 2; diff --git a/src/Drawie.Backend.Core/Vector/SubShape.cs b/src/Drawie.Backend.Core/Vector/SubShape.cs index 7067303..a8fc791 100644 --- a/src/Drawie.Backend.Core/Vector/SubShape.cs +++ b/src/Drawie.Backend.Core/Vector/SubShape.cs @@ -260,6 +260,11 @@ public VectorPath ToPath(VectorPath? appendTo = null) return newPath; } + public VectorPathData ToPathData(VectorPath? appendTo = null) + { + return new VectorPathData(ToPath(appendTo)); + } + private void AddVerbToPath(Verb verb, VectorPath newPath) { if (verb.IsEmptyVerb()) diff --git a/src/Drawie.Backend.Core/Vector/VectorPathData.cs b/src/Drawie.Backend.Core/Vector/VectorPathData.cs new file mode 100644 index 0000000..4701234 --- /dev/null +++ b/src/Drawie.Backend.Core/Vector/VectorPathData.cs @@ -0,0 +1,181 @@ +using Drawie.Backend.Core.Numerics; +using Drawie.Numerics; + +namespace Drawie.Backend.Core.Vector; + +public struct VectorPathData : IEquatable +{ + public readonly IReadOnlyList<(PathVerb verb, VecF[] points, float conicWeight)> Verbs => verbs; + + private IReadOnlyList<(PathVerb verb, VecF[] points, float conicWeight)> verbs; + + public PathFillType FillType { get; set; } = PathFillType.Winding; + public bool IsEmpty => verbs.Count == 0; + public RectD TightBounds => tightBounds ??= CalculateBounds(); + public RectD Bounds => bounds ??= CalculateBounds(); + public double Length => length ??= CalculateLength(); + + private RectD? tightBounds; + private RectD? bounds; + private double? length; + + public VectorPathData() + { + } + + public VectorPathData(VectorPath path) + { + var list = new List<(PathVerb verb, VecF[] points, float conicWeight)>(); + foreach (var verb in path) + { + list.Add(new ValueTuple(verb.verb, verb.points, verb.conicWeight)); + } + + verbs = list.AsReadOnly(); + } + + public static VectorPathData? FromSvgPath(string valueValue) + { + using var vectorPath = VectorPath.FromSvgPath(valueValue); + if (vectorPath == null) return null; + + return new VectorPathData(vectorPath); + } + + public static VectorPathData FromPoints(VecD[] points, bool forceClose) + { + using var vectorPath = VectorPath.FromPoints(points, forceClose); + return new VectorPathData(vectorPath); + } + + public VectorPathData(IReadOnlyList<(PathVerb verb, VecF[] points, float conicWeight)> pathVerbs) + { + verbs = pathVerbs.ToList(); + } + + internal VectorPathData(List<(PathVerb verb, VecF[] points, float conicWeight)> path, PathFillType fillType) + { + verbs = path; + FillType = fillType; + } + + public readonly VectorPath ToPath() + { + VectorPath path = new VectorPath(); + foreach (var valueTuple in Verbs) + { + switch (valueTuple.verb) + { + case PathVerb.Move: + path.MoveTo(valueTuple.points[0]); + break; + case PathVerb.Line: + path.LineTo(valueTuple.points[0]); + break; + case PathVerb.Quad: + path.QuadTo(valueTuple.points[0], valueTuple.points[1]); + break; + case PathVerb.Conic: + path.ConicTo(valueTuple.points[0], valueTuple.points[1], valueTuple.conicWeight); + break; + case PathVerb.Cubic: + path.CubicTo(valueTuple.points[0], valueTuple.points[1], valueTuple.points[2]); + break; + case PathVerb.Close: + path.Close(); + break; + case PathVerb.Done: + break; + default: + throw new ArgumentOutOfRangeException(); + } + } + + return path; + } + + private RectD CalculateBounds() + { + using var editablePath = ToPath(); + tightBounds = editablePath.TightBounds; + bounds = editablePath.Bounds; + return tightBounds ?? RectD.Empty; + } + + private double CalculateLength() + { + using var editablePath = ToPath(); + return editablePath.Length; + } + + public bool Equals(VectorPathData other) + { + return verbs.SequenceEqual(other.verbs) && Nullable.Equals(tightBounds, other.tightBounds) && + FillType == other.FillType; + } + + public override bool Equals(object? obj) + { + return obj is VectorPathData other && Equals(other); + } + + public override int GetHashCode() + { + return HashCode.Combine(verbs, tightBounds, (int)FillType); + } + + public VectorPathData Op(VectorPathData second, VectorPathOp op) + { + using var firstEditable = ToPath(); + using var secondEditable = second.ToPath(); + + return new VectorPathData(firstEditable.Op(secondEditable, op)); + } + + public Vec4D GetPositionAndTangentAtDistance(float absoluteOffset, bool forceClose) + { + using var path = ToPath(); + return path.GetPositionAndTangentAtDistance(absoluteOffset, forceClose); + } + + public Matrix3X3 GetMatrixAtDistance(float absoluteOffset, bool forceClose, PathMeasureMatrixMode measureMode) + { + using var path = ToPath(); + return path.GetMatrixAtDistance(absoluteOffset, forceClose, measureMode); + } + + public VectorPathData Offset(VecD offset) + { + var offsetVerbs = + new List<(PathVerb verb, VecF[] points, float conicWeight)>(verbs.Count); + + foreach (var (verb, points, conicWeight) in verbs) + { + var offsetPoints = new VecF[points.Length]; + + for (int i = 0; i < points.Length; i++) + { + offsetPoints[i] = new VecF( + (float)(points[i].X + offset.X), + (float)(points[i].Y + offset.Y)); + } + + offsetVerbs.Add((verb, offsetPoints, conicWeight)); + } + + return new VectorPathData(offsetVerbs, FillType); + } + + public VectorPathData Transform(Matrix3X3 transformation) + { + using var path = ToPath(); + path.Transform(transformation); + return new VectorPathData(path); + } + + public string ToSvgPathData() + { + using var vectorPath = ToPath(); + return vectorPath.ToSvgPathData(); + } +} diff --git a/src/Drawie.Backend.Skia/ConversionExtensions.cs b/src/Drawie.Backend.Skia/ConversionExtensions.cs index aa7bd7b..a3b43d1 100644 --- a/src/Drawie.Backend.Skia/ConversionExtensions.cs +++ b/src/Drawie.Backend.Skia/ConversionExtensions.cs @@ -87,9 +87,14 @@ public static ImageInfo ToImageInfo(this SKImageInfo info) ColorSpace? cs = null; if (info.ColorSpace != null) { - cs = new ColorSpace(info.ColorSpace.Handle); var colorSpaceImpl = DrawingBackendApi.Current.ColorSpaceImplementation as SkiaColorSpaceImplementation; - colorSpaceImpl.AddManagedInstance(info.ColorSpace); + IntPtr? existing = colorSpaceImpl.FindManagedInstanceHandle(info.ColorSpace); + if (existing == null) + { + existing = colorSpaceImpl.AddManagedInstance(info.ColorSpace); + } + + cs = new ColorSpace(existing.Value); } return new ImageInfo(info.Width, info.Height, diff --git a/src/Drawie.Backend.Skia/Implementations/SKObjectImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SKObjectImplementation.cs index b563f20..23d2e33 100644 --- a/src/Drawie.Backend.Skia/Implementations/SKObjectImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SKObjectImplementation.cs @@ -1,4 +1,5 @@ using System.Collections.Concurrent; +using System.Diagnostics; using SkiaSharp; namespace Drawie.Skia.Implementations @@ -7,29 +8,35 @@ public abstract class SkObjectImplementation where T : SKObject { public int Count => ManagedInstances.Count; private readonly ConcurrentDictionary ManagedInstances = new ConcurrentDictionary(); + private ulong handleCounter = 1; #if DRAWIE_TRACE protected static Dictionary sources = new(); #endif - internal void AddManagedInstance(T instance) + internal IntPtr AddManagedInstance(T instance) { - if (ManagedInstances.TryAdd(instance.Handle, instance)) + IntPtr handle = GetNextHandle(); + if (ManagedInstances.TryAdd(handle, instance)) { #if DRAWIE_TRACE sources[instance] = Environment.StackTrace; #endif } + else + { + throw new InvalidOperationException( + $"Native handle {instance.Handle} is already registered. " + + $"Existing: {ManagedInstances[instance.Handle]}, " + + $"New: {instance}"); + } + + return handle; } - internal void AddManagedInstance(IntPtr handle, T instance) + protected IntPtr GetNextHandle() { - if (ManagedInstances.TryAdd(handle, instance)) - { -#if DRAWIE_TRACE - sources[instance] = Environment.StackTrace; -#endif - } + return (IntPtr)Interlocked.Increment(ref handleCounter); } public bool TryGetInstance(IntPtr objPtr, out T? instance) @@ -49,20 +56,6 @@ public void UnmanageAndDispose(IntPtr objPtr) } } - public void UnmanageAndDispose(T instance) - { - if (ManagedInstances.TryRemove(instance.Handle, out var managedInstance)) - { - if (managedInstance == null) return; - -#if DRAWIE_TRACE - Untrace(managedInstance); -#endif - } - - instance.Dispose(); - } - public void UpdateManagedInstance(IntPtr objPtr, T instance) { if (ManagedInstances.TryRemove(objPtr, out var managedInstance)) @@ -145,5 +138,16 @@ protected static void Trace(T shader) } #endif + public IntPtr? FindManagedInstanceHandle(T native) + { + foreach (var kvp in ManagedInstances) + { + if (EqualityComparer.Default.Equals(kvp.Value, native)) + { + return kvp.Key; + } + } + return null; + } } } diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaBitmapImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaBitmapImplementation.cs index 1f7af43..9d5ec2f 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaBitmapImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaBitmapImplementation.cs @@ -26,16 +26,14 @@ public void Dispose(IntPtr objectPointer) public Bitmap Decode(ReadOnlySpan buffer) { SKBitmap skBitmap = SKBitmap.Decode(buffer); - AddManagedInstance(skBitmap); - return new Bitmap(skBitmap.Handle); + return new Bitmap(AddManagedInstance(skBitmap)); } public Bitmap FromImage(IntPtr ptr) { SKImage image = ImageImplementation[ptr]; SKBitmap skBitmap = SKBitmap.FromImage(image); - AddManagedInstance(skBitmap); - return new Bitmap(skBitmap.Handle); + return new Bitmap(AddManagedInstance(skBitmap)); } public VecI GetSize(IntPtr objectPointer) @@ -67,8 +65,8 @@ public IntPtr Construct(ImageInfo info) { SKImageInfo imageInfo = info.ToSkImageInfo(); SKBitmap bitmap = new SKBitmap(imageInfo); - AddManagedInstance(bitmap); - return bitmap.Handle; + return AddManagedInstance(bitmap); +; } public bool InstallPixels(IntPtr objectPointer, ImageInfo info, IntPtr pixels) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaBlenderImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaBlenderImplementation.cs index bc1d3df..741b33f 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaBlenderImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaBlenderImplementation.cs @@ -27,9 +27,7 @@ public IntPtr CreateFromString(string blenderCode, out string? errors) return IntPtr.Zero; } - AddManagedInstance(blender); - - return blender.Handle; + return AddManagedInstance(blender); } public IntPtr CreateFromString(string blenderCode, Uniforms uniforms, out string? errors) @@ -43,9 +41,7 @@ public IntPtr CreateFromString(string blenderCode, Uniforms uniforms, out string SKRuntimeEffectUniforms effectUniforms = SkiaShaderImplementation.UniformsToSkUniforms(uniforms, declaration, effect); SKRuntimeEffectChildren effectChildren = SkiaShaderImplementation.UniformsToSkChildren(uniforms, effect, shaderImpl); var blender = effect.ToBlender(effectUniforms, effectChildren); - AddManagedInstance(blender); - - return blender.Handle; + return AddManagedInstance(blender); } public object GetNativeObject(IntPtr objectPointer) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs index 60ff8a6..49b9962 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs @@ -362,14 +362,16 @@ public void DrawVertices(IntPtr objectPointer, Vertices vertices, BlendMode blen if (skSurface != null) { var surfaceImpl = _surfaceImpl; - if (!surfaceImpl.TryGetInstance(skSurface.Handle, out var surface)) + IntPtr? foundHandle = _surfaceImpl.FindManagedInstanceHandle(skSurface); + if (foundHandle == null) { - surfaceImpl.AddManagedInstance(skSurface.Handle, skSurface); - surface = skSurface; + foundHandle = surfaceImpl.AddManagedInstance(skSurface); } - return surface != null ? new DrawingSurface(surface.Handle, canvas) : null; + return new DrawingSurface(foundHandle.Value, canvas); } + + return null; } throw new ObjectDisposedException(nameof(canvas)); diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaColorFilterImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaColorFilterImplementation.cs index 5aba311..993df7a 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaColorFilterImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaColorFilterImplementation.cs @@ -19,17 +19,13 @@ public IntPtr CreateBlendMode(Color color, BlendMode blendMode) public IntPtr CreateColorMatrix(float[] matrix) { var skColorFilter = SKColorFilter.CreateColorMatrix(matrix); - AddManagedInstance(skColorFilter); - - return skColorFilter.Handle; + return AddManagedInstance(skColorFilter); } public IntPtr CreateHighContrast(bool grayscale, ContrastInvertMode invert, float contrast) { var skColorFilter = SKColorFilter.CreateHighContrast(grayscale, (SKHighContrastConfigInvertStyle)invert, contrast); - AddManagedInstance(skColorFilter); - - return skColorFilter.Handle; + return AddManagedInstance(skColorFilter); } public IntPtr CreateCompose(ColorFilter outer, ColorFilter inner) @@ -38,9 +34,7 @@ public IntPtr CreateCompose(ColorFilter outer, ColorFilter inner) var skInner = this[inner.ObjectPointer]; var skColorFilter = SKColorFilter.CreateCompose(skOuter, skInner); - AddManagedInstance(skColorFilter); - - return skColorFilter.Handle; + return AddManagedInstance(skColorFilter); } public void Dispose(ColorFilter colorFilter) @@ -56,33 +50,25 @@ public object GetNativeColorFilter(IntPtr objectPointer) public IntPtr CreateLumaColor() { var skColorFilter = SKColorFilter.CreateLumaColor(); - AddManagedInstance(skColorFilter); - - return skColorFilter.Handle; + return AddManagedInstance(skColorFilter); } public IntPtr CreateLighting(Color mul, Color add) { var skColorFilter = SKColorFilter.CreateLighting(mul.ToSKColor(), add.ToSKColor()); - AddManagedInstance(skColorFilter); - - return skColorFilter.Handle; + return AddManagedInstance(skColorFilter); } public IntPtr CreateSrgbToLinearGamma() { var skColorFilter = SKColorFilter.CreateSrgbToLinearGamma(); - AddManagedInstance(skColorFilter); - - return skColorFilter.Handle; + return AddManagedInstance(skColorFilter); } public IntPtr CreateLinearToSrgbGamma() { var skColorFilter = SKColorFilter.CreateLinearToSrgbGamma(); - AddManagedInstance(skColorFilter); - - return skColorFilter.Handle; + return AddManagedInstance(skColorFilter); } } } diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaColorSpaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaColorSpaceImplementation.cs index a4e3ad7..4d9eb18 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaColorSpaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaColorSpaceImplementation.cs @@ -15,22 +15,20 @@ public class SkiaColorSpaceImplementation : SkObjectImplementation public SkiaColorSpaceImplementation() { - _srgbPointer = SKColorSpace.CreateSrgb().Handle; - _srgbLinearPointer = SKColorSpace.CreateSrgbLinear().Handle; + var srgb = SKColorSpace.CreateSrgb(); + var srgbLinear = SKColorSpace.CreateSrgbLinear(); + _srgbPointer = AddManagedInstance(srgb); + _srgbLinearPointer = AddManagedInstance(srgbLinear); } public ColorSpace CreateSrgb() { - SKColorSpace skColorSpace = SKColorSpace.CreateSrgb(); - AddManagedInstance(skColorSpace); - return new ColorSpace(skColorSpace.Handle); + return new ColorSpace(_srgbPointer); } public ColorSpace CreateSrgbLinear() { - SKColorSpace skColorSpace = SKColorSpace.CreateSrgbLinear(); - AddManagedInstance(skColorSpace); - return new ColorSpace(skColorSpace.Handle); + return new ColorSpace(_srgbLinearPointer); } public void Dispose(IntPtr objectPointer) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaFontImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaFontImplementation.cs index 177f739..23cb659 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaFontImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaFontImplementation.cs @@ -12,8 +12,6 @@ public class SkiaFontImplementation : SkObjectImplementation, IFontImple { private readonly SkiaPathImplementation pathImplementation; - private volatile int fontCounter = 0; - public SkiaFontImplementation(SkiaPathImplementation pathImplementation) { this.pathImplementation = pathImplementation; @@ -30,8 +28,7 @@ public VectorPath GetTextPath(IntPtr objectPointer, string text) if (TryGetInstance(objectPointer, out SKFont? font)) { var path = font.GetTextPath(text); - pathImplementation.AddManagedInstance(path); - return new VectorPath(path.Handle); + return new VectorPath(pathImplementation.AddManagedInstance(path)); } throw new InvalidOperationException("Native font object not found"); @@ -47,8 +44,7 @@ public VectorPath GetTextPath(IntPtr objectPointer, string text) } SKFont font = new(typeface, fontSize, scaleX, skewY); - int handle = Interlocked.Increment(ref fontCounter); - AddManagedInstance(handle, font); + IntPtr handle = AddManagedInstance(font); return new Font(handle, new FontFamilyName(typeface.FamilyName)); } @@ -316,8 +312,7 @@ public bool ContainsGlyph(IntPtr objectPointer, int glyphId) public Font CreateDefault(float fontSize) { SKFont font = new(SKTypeface.Default, fontSize); - int handle = Interlocked.Increment(ref fontCounter); - AddManagedInstance(handle, font); + IntPtr handle = AddManagedInstance(font); return new Font(handle, new FontFamilyName(SKTypeface.Default.FamilyName)); } @@ -330,8 +325,7 @@ public Font CreateDefault(float fontSize) } SKFont font = new(typeface); - int handle = Interlocked.Increment(ref fontCounter); - AddManagedInstance(handle, font); + IntPtr handle = AddManagedInstance(font); return new Font(handle, new FontFamilyName(familyName)); } @@ -345,8 +339,7 @@ public Font CreateDefault(float fontSize) } SKFont font = new(typeface); - int handle = Interlocked.Increment(ref fontCounter); - AddManagedInstance(handle, font); + IntPtr handle = AddManagedInstance(font); return new Font(handle, new FontFamilyName(familyName)); } diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaImageFilterImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaImageFilterImplementation.cs index 2e4b3ea..cd0c66c 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaImageFilterImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaImageFilterImplementation.cs @@ -30,8 +30,7 @@ public class SkiaImageFilterImplementation : SkObjectImplementation this[objPtr]; @@ -83,8 +79,7 @@ public class SkiaImageFilterImplementation : SkObjectImplementation AsSpan(ImgData imgData) public ImgData Create(ReadOnlySpan buffer) { SKData data = SKData.CreateCopy(buffer.ToArray()); - AddManagedInstance(data); - return new ImgData(data.Handle); + return new ImgData(AddManagedInstance(data)); } public object GetNativeImgData(IntPtr objectPointer) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaMeshImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaMeshImplementation.cs index 83d1644..c9910fa 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaMeshImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaMeshImplementation.cs @@ -20,8 +20,7 @@ public IntPtr Create(VertexMode mode, VecF[] points, VecF[] texs, Color[] colors SKColor[] skColors = CastUtility.UnsafeArrayCast(colors); var vertices = SKVertices.CreateCopy((SKVertexMode)mode, skPoints, skTexs, skColors, indices); - AddManagedInstance(vertices); - return vertices.Handle; + return AddManagedInstance(vertices); } public void Dispose(IntPtr verticesPointer) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs index f23de1e..e0edcb6 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs @@ -30,13 +30,14 @@ public SkiaPaintImplementation(SkiaColorFilterImplementation colorFilterImpl, public IntPtr CreatePaint() { SKPaint skPaint = new SKPaint(); - AddManagedInstance(skPaint); + IntPtr address = AddManagedInstance(skPaint); if (skPaint.ColorFilter != null) { - colorFilterImplementation.AddManagedInstance(skPaint.ColorFilter.Handle, skPaint.ColorFilter); + throw new Exception("Color filter needs managed instance. How did we get here?"); + //colorFilterImplementation.AddManagedInstance(skPaint.ColorFilter.Handle, skPaint.ColorFilter); } - return skPaint.Handle; + return address; } public void Dispose(IntPtr paintObjPointer) @@ -47,9 +48,8 @@ public void Dispose(IntPtr paintObjPointer) public Paint Clone(IntPtr paintObjPointer) { SKPaint clone = this[paintObjPointer].Clone(); - AddManagedInstance(clone); - return new Paint(clone.Handle); + return new Paint(AddManagedInstance(clone)); } public Color GetColor(Paint paint) @@ -127,9 +127,10 @@ public void SetStrokeJoin(Paint paint, StrokeJoin value) return null; } - if(!blenderImplementation.TryGetInstance(skPaint.Blender.Handle, out _)) + if(!blenderImplementation.TryGetInstance(paint.Blender.ObjectPointer, out _)) { - blenderImplementation.AddManagedInstance(skPaint.Blender.Handle, skPaint.Blender); + throw new Exception("Blender needs managed instance. How did we get here?"); + //blenderImplementation.AddManagedInstance(skPaint.Blender); } return new Blender(skPaint.Blender.Handle); diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaPathEffectImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaPathEffectImplementation.cs index 177211f..9d76cce 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaPathEffectImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaPathEffectImplementation.cs @@ -8,8 +8,8 @@ public class SkiaPathEffectImplementation : SkObjectImplementation public IntPtr CreateDash(float[] intervals, float phase) { SKPathEffect skPathEffect = SKPathEffect.CreateDash(intervals, phase); - AddManagedInstance(skPathEffect); - return skPathEffect.Handle; + return AddManagedInstance(skPathEffect); +; } public void Dispose(IntPtr pathEffectPointer) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaPathImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaPathImplementation.cs index af9dc41..e3ac9b0 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaPathImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaPathImplementation.cs @@ -74,15 +74,13 @@ public int GetPointCount(VectorPath path) public IntPtr Create() { SKPath path = new SKPath(); - AddManagedInstance(path); - return path.Handle; + return AddManagedInstance(path); } public IntPtr Clone(VectorPath other) { SKPath path = new SKPath(this[other.ObjectPointer]); - AddManagedInstance(path); - return path.Handle; + return AddManagedInstance(path); } public RectD GetTightBounds(VectorPath vectorPath) @@ -186,8 +184,8 @@ public VecF GetLastPoint(VectorPath vectorPath) return null; } - AddManagedInstance(skPath); - return new VectorPath(skPath.Handle); + IntPtr handle = AddManagedInstance(skPath); + return new VectorPath(handle); } public VecF[] GetPoints(IntPtr objectPointer) @@ -316,19 +314,16 @@ public VectorPath Op(VectorPath vectorPath, VectorPath ellipsePath, VectorPathOp if (skPath == null) { var emptyPath = new SKPath(); - AddManagedInstance(emptyPath); - return new VectorPath(emptyPath.Handle); + return new VectorPath(AddManagedInstance(emptyPath)); } - AddManagedInstance(skPath); - return new VectorPath(skPath.Handle); + return new VectorPath(AddManagedInstance(skPath)); } public VectorPath Simplify(VectorPath path) { SKPath skPath = this[path.ObjectPointer].Simplify(); - AddManagedInstance(skPath); - return new VectorPath(skPath.Handle); + return new VectorPath(AddManagedInstance(skPath)); } public void Close(VectorPath vectorPath) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaPictureImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaPictureImplementation.cs index f3ab967..6bb75da 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaPictureImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaPictureImplementation.cs @@ -50,9 +50,8 @@ public RectD GetCullRect(Picture picture) var shader = skPicture.ToShader((SKShaderTileMode)tileModeX, (SKShaderTileMode)tileModeY, (SKFilterMode)filterMode, localMatrix.ToSkMatrix(), tile.ToSkRect()); - _shaderImplementation.AddManagedInstance(shader); - return new Shader(shader.Handle); + return new Shader(_shaderImplementation.AddManagedInstance(shader)); } public void Serialize(Picture picture, Stream stream) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaPixmapImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaPixmapImplementation.cs index d7ce45a..7ec0efa 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaPixmapImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaPixmapImplementation.cs @@ -45,8 +45,7 @@ public Span GetPixelSpan(Pixmap pixmap) public IntPtr Construct(IntPtr dataPtr, ImageInfo imgInfo) { SKPixmap pixmap = new SKPixmap(imgInfo.ToSkImageInfo(), dataPtr); - AddManagedInstance(pixmap); - return pixmap.Handle; + return AddManagedInstance(pixmap); } public int GetWidth(Pixmap pixmap) @@ -71,8 +70,7 @@ public object GetNativePixmap(IntPtr objectPointer) public Pixmap CreateFrom(SKPixmap pixmap) { - AddManagedInstance(pixmap); - return Pixmap.InternalCreateFromExistingPointer(pixmap.Handle); + return new Pixmap(AddManagedInstance(pixmap)); } } } diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaRecorderImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaRecorderImplementation.cs index 3872297..c0e78b9 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaRecorderImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaRecorderImplementation.cs @@ -41,8 +41,7 @@ public Canvas BeginRecording(DrawingRecorder drawingRecorder, RectD bounds) if (canvas != null) { - _canvasImpl.AddManagedInstance(canvas); - return new Canvas(canvas.Handle); + return new Canvas(_canvasImpl.AddManagedInstance(canvas)); } else { @@ -62,8 +61,7 @@ public Picture EndRecordingImmutable(DrawingRecorder recorder) var skPicture = skRecorder?.EndRecording(); if (skPicture != null) { - _pictureImplementation.AddManagedInstance(skPicture); - return new Picture(skPicture.Handle); + return new Picture(_pictureImplementation.AddManagedInstance(skPicture)); } throw new InvalidOperationException("Failed to end recording on SKPictureRecorder."); @@ -75,7 +73,6 @@ public Picture EndRecordingImmutable(DrawingRecorder recorder) public IntPtr CreateRecorder() { var recorder = new SKPictureRecorder(); - AddManagedInstance(recorder); - return recorder.Handle; + return AddManagedInstance(recorder); } } diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaShaderImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaShaderImplementation.cs index 2cf478d..405f0c3 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaShaderImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaShaderImplementation.cs @@ -31,8 +31,7 @@ public void SetBitmapImplementation(SkiaBitmapImplementation bitmapImplementatio public IntPtr CreateShader() { SKShader skShader = SKShader.CreateEmpty(); - AddManagedInstance(skShader); - return skShader.Handle; + return AddManagedInstance(skShader); } public Shader? CreateFromString(string shaderCode, Uniforms uniforms, out string errors) @@ -44,11 +43,11 @@ public IntPtr CreateShader() SKRuntimeEffectUniforms effectUniforms = UniformsToSkUniforms(uniforms, declaration, effect); SKRuntimeEffectChildren effectChildren = UniformsToSkChildren(uniforms, effect); SKShader shader = effect.ToShader(effectUniforms, effectChildren); - AddManagedInstance(shader); - runtimeEffects[shader.Handle] = effect; - declarations[shader.Handle] = declaration; + IntPtr shaderHandle = AddManagedInstance(shader); + runtimeEffects[shaderHandle] = effect; + declarations[shaderHandle] = declaration; - return new Shader(shader.Handle, declaration); + return new Shader(shaderHandle, declaration); } return null; @@ -65,14 +64,14 @@ public IntPtr CreateShader() return null; } - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); var declaration = DeclarationsFromEffect(shaderCode, effect); - declarations[shader.Handle] = declaration; + declarations[shaderHandle] = declaration; #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle, declaration); + return new Shader(shaderHandle, declaration); } return null; @@ -89,8 +88,8 @@ public IntPtr CreateShader() if (shader == null) return null; - AddManagedInstance(shader); - return new Shader(shader.Handle); + IntPtr shaderHandle = AddManagedInstance(shader); + return new Shader(shaderHandle); } public Shader? CreateLinearGradient(VecD p1, VecD p2, Color[] colors, float[] offsets) @@ -104,12 +103,12 @@ public IntPtr CreateShader() if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public Shader? CreateLinearGradient(VecD p1, VecD p2, Color[] colors, float[] offsets, Matrix3X3 localMatrix) @@ -124,12 +123,12 @@ public IntPtr CreateShader() if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public Shader? CreateRadialGradient(VecD center, float radius, Color[] colors, float[] colorPos, @@ -143,13 +142,13 @@ public IntPtr CreateShader() (SKShaderTileMode)tileMode); if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public Shader? CreateRadialGradient(VecD center, float radius, Color[] colors) @@ -161,13 +160,13 @@ public IntPtr CreateShader() if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public Shader? CreateRadialGradient(VecD center, float radius, Color[] colors, float[] colorPos, @@ -183,13 +182,13 @@ public IntPtr CreateShader() if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public Shader? CreateSweepGradient(VecD center, Color[] colors, float[] colorPos, Matrix3X3 localMatrix) @@ -202,13 +201,13 @@ public IntPtr CreateShader() if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public Shader? CreateSweepGradient(VecD center, Color[] colors, float[] colorPos, @@ -224,13 +223,13 @@ public IntPtr CreateShader() if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public Shader? CreatePerlinNoiseTurbulence(float baseFrequencyX, float baseFrequencyY, int numOctaves, @@ -244,12 +243,12 @@ public IntPtr CreateShader() if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public Shader? CreatePerlinFractalNoise(float baseFrequencyX, float baseFrequencyY, int numOctaves, float seed) @@ -265,12 +264,12 @@ public IntPtr CreateShader() if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public object GetNativeShader(IntPtr objectPointer) @@ -295,16 +294,16 @@ public Shader WithUpdatedUniforms(IntPtr objectPointer, Uniforms uniforms) runtimeEffects.Remove(objectPointer); var newShader = effect.ToShader(effectUniforms, effectChildren); - AddManagedInstance(newShader); + IntPtr shaderHandle = AddManagedInstance(newShader); - runtimeEffects[newShader.Handle] = effect; - declarations[newShader.Handle] = oldDeclarations; + runtimeEffects[shaderHandle] = effect; + declarations[shaderHandle] = oldDeclarations; #if DRAWIE_TRACE Trace(newShader); #endif - return new Shader(newShader.Handle, oldDeclarations); + return new Shader(shaderHandle, oldDeclarations); } public Shader SetLocalMatrix(IntPtr objectPointer, Matrix3X3 matrix) @@ -314,7 +313,8 @@ public Shader SetLocalMatrix(IntPtr objectPointer, Matrix3X3 matrix) throw new InvalidOperationException("Shader does not exist"); } - return new Shader(shader.WithLocalMatrix(matrix.ToSkMatrix()).Handle); + IntPtr shaderHandle = AddManagedInstance(shader.WithLocalMatrix(matrix.ToSkMatrix())); + return new Shader(shaderHandle); } public Shader? CreateBitmap(Bitmap bitmap, TileMode tileX, TileMode tileY, Matrix3X3 matrix) @@ -329,12 +329,12 @@ public Shader SetLocalMatrix(IntPtr objectPointer, Matrix3X3 matrix) if (shader == null) return null; - AddManagedInstance(shader); + IntPtr shaderHandle = AddManagedInstance(shader); #if DRAWIE_TRACE Trace(shader); #endif - return new Shader(shader.Handle); + return new Shader(shaderHandle); } public Shader? CreateCreate(Image image, TileMode tileX, TileMode tileY, Matrix3X3 matrix) @@ -350,8 +350,8 @@ public Shader SetLocalMatrix(IntPtr objectPointer, Matrix3X3 matrix) if (shader == null) return null; - AddManagedInstance(shader); - return new Shader(shader.Handle); + IntPtr shaderHandle = AddManagedInstance(shader); + return new Shader(shaderHandle); } public UniformDeclaration[]? GetUniformDeclarations(string shaderCode) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index f2f7165..8ffb25c 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -153,11 +153,11 @@ public object GetNativeSurface(IntPtr objectPointer) Trace(skSurface); #endif - _canvasImplementation.AddManagedInstance(skSurface.Canvas.Handle, skSurface.Canvas); - Canvas canvas = new Canvas(skSurface.Canvas.Handle); + IntPtr canvasHandle = _canvasImplementation.AddManagedInstance(skSurface.Canvas); + Canvas canvas = new Canvas(canvasHandle); - DrawingSurface surface = new DrawingSurface(skSurface.Handle, canvas); - AddManagedInstance(skSurface); + IntPtr surfaceHandle = AddManagedInstance(skSurface); + DrawingSurface surface = new DrawingSurface(surfaceHandle, canvas); return surface; } From c2c7b725bdc54a2b88cb2a0a886eb4b7695c7911 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 20 Aug 2026 13:28:54 +0200 Subject: [PATCH 37/55] Update Directory.Build.props --- src/Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 1156014..1a2d47c 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,6 +1,6 @@ - [12.1.1-cibuild0004425-alpha] + [12.1.1-cibuild0004440-alpha] true true From 2ded78f37cfce2f77837c5073c58ce2f20ee957e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Tue, 25 Aug 2026 10:45:57 +0200 Subject: [PATCH 38/55] Removed unused vector path data --- .../Vector/EditableVectorPath.cs | 6 - src/Drawie.Backend.Core/Vector/SubShape.cs | 5 - .../Vector/VectorPathData.cs | 181 ------------------ 3 files changed, 192 deletions(-) delete mode 100644 src/Drawie.Backend.Core/Vector/VectorPathData.cs diff --git a/src/Drawie.Backend.Core/Vector/EditableVectorPath.cs b/src/Drawie.Backend.Core/Vector/EditableVectorPath.cs index 161b876..b364e1b 100644 --- a/src/Drawie.Backend.Core/Vector/EditableVectorPath.cs +++ b/src/Drawie.Backend.Core/Vector/EditableVectorPath.cs @@ -52,12 +52,6 @@ public EditableVectorPath(VectorPath path) } } - public EditableVectorPath(VectorPathData dataPath) - { - Path = dataPath.ToPath(); - UpdatePathFrom(Path); - } - public int IndexOf(SubShape subShape) { return subShapes.IndexOf(subShape); diff --git a/src/Drawie.Backend.Core/Vector/SubShape.cs b/src/Drawie.Backend.Core/Vector/SubShape.cs index a8fc791..7067303 100644 --- a/src/Drawie.Backend.Core/Vector/SubShape.cs +++ b/src/Drawie.Backend.Core/Vector/SubShape.cs @@ -260,11 +260,6 @@ public VectorPath ToPath(VectorPath? appendTo = null) return newPath; } - public VectorPathData ToPathData(VectorPath? appendTo = null) - { - return new VectorPathData(ToPath(appendTo)); - } - private void AddVerbToPath(Verb verb, VectorPath newPath) { if (verb.IsEmptyVerb()) diff --git a/src/Drawie.Backend.Core/Vector/VectorPathData.cs b/src/Drawie.Backend.Core/Vector/VectorPathData.cs deleted file mode 100644 index 4701234..0000000 --- a/src/Drawie.Backend.Core/Vector/VectorPathData.cs +++ /dev/null @@ -1,181 +0,0 @@ -using Drawie.Backend.Core.Numerics; -using Drawie.Numerics; - -namespace Drawie.Backend.Core.Vector; - -public struct VectorPathData : IEquatable -{ - public readonly IReadOnlyList<(PathVerb verb, VecF[] points, float conicWeight)> Verbs => verbs; - - private IReadOnlyList<(PathVerb verb, VecF[] points, float conicWeight)> verbs; - - public PathFillType FillType { get; set; } = PathFillType.Winding; - public bool IsEmpty => verbs.Count == 0; - public RectD TightBounds => tightBounds ??= CalculateBounds(); - public RectD Bounds => bounds ??= CalculateBounds(); - public double Length => length ??= CalculateLength(); - - private RectD? tightBounds; - private RectD? bounds; - private double? length; - - public VectorPathData() - { - } - - public VectorPathData(VectorPath path) - { - var list = new List<(PathVerb verb, VecF[] points, float conicWeight)>(); - foreach (var verb in path) - { - list.Add(new ValueTuple(verb.verb, verb.points, verb.conicWeight)); - } - - verbs = list.AsReadOnly(); - } - - public static VectorPathData? FromSvgPath(string valueValue) - { - using var vectorPath = VectorPath.FromSvgPath(valueValue); - if (vectorPath == null) return null; - - return new VectorPathData(vectorPath); - } - - public static VectorPathData FromPoints(VecD[] points, bool forceClose) - { - using var vectorPath = VectorPath.FromPoints(points, forceClose); - return new VectorPathData(vectorPath); - } - - public VectorPathData(IReadOnlyList<(PathVerb verb, VecF[] points, float conicWeight)> pathVerbs) - { - verbs = pathVerbs.ToList(); - } - - internal VectorPathData(List<(PathVerb verb, VecF[] points, float conicWeight)> path, PathFillType fillType) - { - verbs = path; - FillType = fillType; - } - - public readonly VectorPath ToPath() - { - VectorPath path = new VectorPath(); - foreach (var valueTuple in Verbs) - { - switch (valueTuple.verb) - { - case PathVerb.Move: - path.MoveTo(valueTuple.points[0]); - break; - case PathVerb.Line: - path.LineTo(valueTuple.points[0]); - break; - case PathVerb.Quad: - path.QuadTo(valueTuple.points[0], valueTuple.points[1]); - break; - case PathVerb.Conic: - path.ConicTo(valueTuple.points[0], valueTuple.points[1], valueTuple.conicWeight); - break; - case PathVerb.Cubic: - path.CubicTo(valueTuple.points[0], valueTuple.points[1], valueTuple.points[2]); - break; - case PathVerb.Close: - path.Close(); - break; - case PathVerb.Done: - break; - default: - throw new ArgumentOutOfRangeException(); - } - } - - return path; - } - - private RectD CalculateBounds() - { - using var editablePath = ToPath(); - tightBounds = editablePath.TightBounds; - bounds = editablePath.Bounds; - return tightBounds ?? RectD.Empty; - } - - private double CalculateLength() - { - using var editablePath = ToPath(); - return editablePath.Length; - } - - public bool Equals(VectorPathData other) - { - return verbs.SequenceEqual(other.verbs) && Nullable.Equals(tightBounds, other.tightBounds) && - FillType == other.FillType; - } - - public override bool Equals(object? obj) - { - return obj is VectorPathData other && Equals(other); - } - - public override int GetHashCode() - { - return HashCode.Combine(verbs, tightBounds, (int)FillType); - } - - public VectorPathData Op(VectorPathData second, VectorPathOp op) - { - using var firstEditable = ToPath(); - using var secondEditable = second.ToPath(); - - return new VectorPathData(firstEditable.Op(secondEditable, op)); - } - - public Vec4D GetPositionAndTangentAtDistance(float absoluteOffset, bool forceClose) - { - using var path = ToPath(); - return path.GetPositionAndTangentAtDistance(absoluteOffset, forceClose); - } - - public Matrix3X3 GetMatrixAtDistance(float absoluteOffset, bool forceClose, PathMeasureMatrixMode measureMode) - { - using var path = ToPath(); - return path.GetMatrixAtDistance(absoluteOffset, forceClose, measureMode); - } - - public VectorPathData Offset(VecD offset) - { - var offsetVerbs = - new List<(PathVerb verb, VecF[] points, float conicWeight)>(verbs.Count); - - foreach (var (verb, points, conicWeight) in verbs) - { - var offsetPoints = new VecF[points.Length]; - - for (int i = 0; i < points.Length; i++) - { - offsetPoints[i] = new VecF( - (float)(points[i].X + offset.X), - (float)(points[i].Y + offset.Y)); - } - - offsetVerbs.Add((verb, offsetPoints, conicWeight)); - } - - return new VectorPathData(offsetVerbs, FillType); - } - - public VectorPathData Transform(Matrix3X3 transformation) - { - using var path = ToPath(); - path.Transform(transformation); - return new VectorPathData(path); - } - - public string ToSvgPathData() - { - using var vectorPath = ToPath(); - return vectorPath.ToSvgPathData(); - } -} From f5a4935f45c3d3c32deab21ff6fc9fc9c256d231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Tue, 25 Aug 2026 11:12:11 +0200 Subject: [PATCH 39/55] Some fixes --- .../ColorsImpl/Paintables/TexturePaintable.cs | 8 +- .../Generation/Expressions/SurfaceSampler.cs | 2 +- .../{NativeTexture.cs => Texture.cs} | 80 +++++++++---------- .../AvaloniaRenderingDispatcher.cs | 5 ++ .../Controls/DrawieControl.cs | 4 +- .../Controls/DrawieTextureControl.cs | 40 +++++----- .../Drawie.Interop.Avalonia.Core.csproj | 2 +- .../OpenGlInteropContext.cs | 6 ++ .../OpenGlRenderApiResources.cs | 2 +- .../OpenGlSwapchain.cs | 4 +- .../Drawie.Interop.Avalonia.Vulkan.csproj | 10 --- .../Vk/VulkanContent.cs | 3 +- .../AppBuilderExtensions.cs | 3 +- src/Drawie.RenderApi/Drawie.RenderApi.csproj | 6 -- src/Drawie.Rendering/RenderingContext.cs | 3 +- src/Drawie.Rendering/Texture.cs | 33 -------- src/Drawie.Rendering/TextureFramebuffer.cs | 14 ++-- 17 files changed, 93 insertions(+), 132 deletions(-) rename src/Drawie.Backend.Core/{NativeTexture.cs => Texture.cs} (82%) delete mode 100644 src/Drawie.Rendering/Texture.cs diff --git a/src/Drawie.Backend.Core/ColorsImpl/Paintables/TexturePaintable.cs b/src/Drawie.Backend.Core/ColorsImpl/Paintables/TexturePaintable.cs index 9cdc347..3f418b0 100644 --- a/src/Drawie.Backend.Core/ColorsImpl/Paintables/TexturePaintable.cs +++ b/src/Drawie.Backend.Core/ColorsImpl/Paintables/TexturePaintable.cs @@ -9,7 +9,7 @@ namespace Drawie.Backend.Core.ColorsImpl.Paintables; public class TexturePaintable : Paintable { - public NativeTexture Image { get; private set; } + public Texture Image { get; private set; } public override bool AnythingVisible => Image is { Size: {X: > 0, Y: > 0 }}; public SamplingOptions SamplingOptions { get; set; } = SamplingOptions.Bilinear; @@ -19,13 +19,13 @@ public class TexturePaintable : Paintable private bool disposeAfterUse; - public TexturePaintable(NativeTexture image) + public TexturePaintable(Texture image) { Image = image; Image.LockDispose(this); } - public TexturePaintable(NativeTexture image, bool disposeAfterUse) + public TexturePaintable(Texture image, bool disposeAfterUse) { Image = image; Image.LockDispose(this); @@ -74,7 +74,7 @@ public override void DisposeShaderElements() public override void ApplyOpacity(double opacity) { - NativeTexture surf = new NativeTexture(Image.Size); + Texture surf = new Texture(Image.Size); using Paint paint = new Paint { Color = Colors.White.WithAlpha((byte)(opacity * 255)), diff --git a/src/Drawie.Backend.Core/Shaders/Generation/Expressions/SurfaceSampler.cs b/src/Drawie.Backend.Core/Shaders/Generation/Expressions/SurfaceSampler.cs index 936fe69..ea716e5 100644 --- a/src/Drawie.Backend.Core/Shaders/Generation/Expressions/SurfaceSampler.cs +++ b/src/Drawie.Backend.Core/Shaders/Generation/Expressions/SurfaceSampler.cs @@ -1,6 +1,6 @@ namespace Drawie.Backend.Core.Shaders.Generation.Expressions; -public class SurfaceSampler : ShaderExpressionVariable +public class SurfaceSampler : ShaderExpressionVariable { public SurfaceSampler(string name, ColorSampleMode sampleMode) : base(name) { diff --git a/src/Drawie.Backend.Core/NativeTexture.cs b/src/Drawie.Backend.Core/Texture.cs similarity index 82% rename from src/Drawie.Backend.Core/NativeTexture.cs rename to src/Drawie.Backend.Core/Texture.cs index 8b5f45d..25da237 100644 --- a/src/Drawie.Backend.Core/NativeTexture.cs +++ b/src/Drawie.Backend.Core/Texture.cs @@ -8,7 +8,7 @@ namespace Drawie.Backend.Core; -public class NativeTexture : IDisposable, ICloneable, IPixelsMap, INativeSurfaceInfo, ITexture +public class Texture : IDisposable, ICloneable, IPixelsMap, INativeSurfaceInfo, ITexture { public VecI Size { get; } public DrawingSurface DrawingSurface { get; private set; } @@ -35,7 +35,7 @@ public class NativeTexture : IDisposable, ICloneable, IPixelsMap, INativeSurface private Paint nearestNeighborReplacingPaint = new() { BlendMode = BlendMode.Src }; - public NativeTexture(VecI size) + public Texture(VecI size) : this(new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, ColorSpace.CreateSrgb()) { GpuBacked = true @@ -48,31 +48,31 @@ private void OnChanged(RectD? changedRect) cpuSynced = false; } - public static NativeTexture ForDisplay(VecI size) + public static Texture ForDisplay(VecI size) { - return new NativeTexture( + return new Texture( new ImageInfo(size.X, size.Y, ColorType.Rgba8888, AlphaType.Premul, ColorSpace.CreateSrgb()) { GpuBacked = true }); } - public static NativeTexture ForProcessing(VecI size) + public static Texture ForProcessing(VecI size) { - return new NativeTexture( + return new Texture( new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, ColorSpace.CreateSrgbLinear()) { GpuBacked = true }); } - public static NativeTexture ForProcessing(VecI size, ColorSpace colorSpace) + public static Texture ForProcessing(VecI size, ColorSpace colorSpace) { - return new NativeTexture( + return new Texture( new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, colorSpace) { GpuBacked = true }); } - public static NativeTexture? ForProcessing(DrawingSurface copySizeAndMatrixFrom, ColorSpace colorSpace) + public static Texture? ForProcessing(DrawingSurface copySizeAndMatrixFrom, ColorSpace colorSpace) { VecI size = new VecI( copySizeAndMatrixFrom.DeviceClipBounds.Size.X + copySizeAndMatrixFrom.DeviceClipBounds.Pos.X, @@ -80,7 +80,7 @@ public static NativeTexture ForProcessing(VecI size, ColorSpace colorSpace) if (size.X <= 0 || size.Y <= 0) return null; - NativeTexture tex = new NativeTexture( + Texture tex = new Texture( new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, colorSpace) { GpuBacked = true }); tex.DrawingSurface.Canvas.SetMatrix(copySizeAndMatrixFrom.Canvas.TotalMatrix); @@ -88,9 +88,9 @@ public static NativeTexture ForProcessing(VecI size, ColorSpace colorSpace) return tex; } - public static NativeTexture ForProcessing(Canvas copySizeAndMatrixFrom, ColorSpace colorSpace) + public static Texture ForProcessing(Canvas copySizeAndMatrixFrom, ColorSpace colorSpace) { - NativeTexture tex = new NativeTexture( + Texture tex = new Texture( new ImageInfo( copySizeAndMatrixFrom.DeviceClipBounds.Size.X + copySizeAndMatrixFrom.DeviceClipBounds.Pos.X, copySizeAndMatrixFrom.DeviceClipBounds.Size.Y + copySizeAndMatrixFrom.DeviceClipBounds.Pos.Y, @@ -100,7 +100,7 @@ public static NativeTexture ForProcessing(Canvas copySizeAndMatrixFrom, ColorSpa return tex; } - public NativeTexture(ImageInfo imageImageInfo) + public Texture(ImageInfo imageImageInfo) { Size = new VecI(imageImageInfo.Width, imageImageInfo.Height); if (!imageImageInfo.GpuBacked) @@ -121,7 +121,7 @@ public NativeTexture(ImageInfo imageImageInfo) throw new Exception("Could not create DrawingSurface for Texture."); } } - + DrawingSurface.Changed += DrawingSurfaceOnChanged; } ); @@ -130,13 +130,13 @@ public NativeTexture(ImageInfo imageImageInfo) Changed += OnChanged; } - public NativeTexture(NativeTexture other) : this(other.Size) + public Texture(Texture other) : this(other.Size) { using var ctx = EnsureContext(); DrawingSurface.Canvas.DrawSurface(other.DrawingSurface, 0, 0); } - internal NativeTexture(DrawingSurface drawingSurface) + internal Texture(DrawingSurface drawingSurface) { DrawingSurface = drawingSurface; Size = drawingSurface.DeviceClipBounds.Size; @@ -145,7 +145,7 @@ internal NativeTexture(DrawingSurface drawingSurface) public object Clone() { - return new NativeTexture(this); + return new Texture(this); } private void DrawingSurfaceOnChanged(RectD? changedRect) @@ -154,7 +154,7 @@ private void DrawingSurfaceOnChanged(RectD? changedRect) } - public static NativeTexture Load(string path) + public static Texture Load(string path) { using var ctx = EnsureContext(); if (!File.Exists(path)) @@ -163,13 +163,13 @@ public static NativeTexture Load(string path) if (image is null) throw new ArgumentException($"The image with path {path} couldn't be loaded"); - NativeTexture nativeTexture = new NativeTexture(image.Size); - nativeTexture.DrawingSurface.Canvas.DrawImage(image, 0, 0); + Texture texture = new Texture(image.Size); + texture.DrawingSurface.Canvas.DrawImage(image, 0, 0); - return nativeTexture; + return texture; } - public static NativeTexture Load(byte[] data) + public static Texture Load(byte[] data) { using var ctx = EnsureContext(); using Image image = Image.FromEncodedData(data); @@ -177,30 +177,30 @@ public static NativeTexture Load(byte[] data) if (image is null || image.Size.ShortestAxis <= 0) throw new ArgumentException("The image couldn't be loaded"); - NativeTexture nativeTexture = new NativeTexture(image.Size); - nativeTexture.DrawingSurface.Canvas.DrawImage(image, 0, 0); + Texture texture = new Texture(image.Size); + texture.DrawingSurface.Canvas.DrawImage(image, 0, 0); - return nativeTexture; + return texture; } - public static NativeTexture? Load(byte[] encoded, ColorType colorType, VecI imageSize) + public static Texture? Load(byte[] encoded, ColorType colorType, VecI imageSize) { using var ctx = EnsureContext(); using var image = Image.FromPixels(new ImageInfo(imageSize.X, imageSize.Y, colorType), encoded); if (image is null) return null; - var surface = new NativeTexture(new VecI(image.Width, image.Height)); + var surface = new Texture(new VecI(image.Width, image.Height)); surface.DrawingSurface.Canvas.DrawImage(image, 0, 0); return surface; } - public NativeTexture CreateResized(VecI newSize, ResizeMethod method) + public Texture CreateResized(VecI newSize, ResizeMethod method) { using var ctx = EnsureContext(); using Image image = DrawingSurface.Snapshot(); - NativeTexture newNativeTexture = new(newSize); + Texture newTexture = new(newSize); using Paint paint = new(); FilterQuality filterQuality = method switch @@ -211,12 +211,12 @@ public NativeTexture CreateResized(VecI newSize, ResizeMethod method) _ => FilterQuality.None }; - newNativeTexture.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); + newTexture.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); - return newNativeTexture; + return newTexture; } - public void CopyTo(NativeTexture destination) + public void CopyTo(Texture destination) { destination.DrawingSurface.Canvas.DrawSurface(DrawingSurface, 0, 0); } @@ -231,21 +231,21 @@ public void DrawBytes(VecI surfaceSize, byte[] pixels, ColorType color, AlphaTyp DrawingSurface.Canvas.DrawImage(image, 0, 0); } - public NativeTexture ResizeNearestNeighbor(VecI newSize) + public Texture ResizeNearestNeighbor(VecI newSize) { using Image image = DrawingSurface.Snapshot(); - NativeTexture newSurface = new(newSize); + Texture newSurface = new(newSize); newSurface.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), nearestNeighborReplacingPaint); return newSurface; } - public NativeTexture Resize(VecI newSize, FilterQuality quality) + public Texture Resize(VecI newSize, FilterQuality quality) { using var ctx = EnsureContext(); using Image image = DrawingSurface.Snapshot(); using Paint paint = new(); - NativeTexture newSurface = new(newSize); + Texture newSurface = new(newSize); newSurface.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); return newSurface; @@ -356,10 +356,10 @@ public void Dispose() nearestNeighborReplacingPaint.Dispose(); } - public static NativeTexture FromExisting(DrawingSurface drawingSurface) + public static Texture FromExisting(DrawingSurface drawingSurface) { - NativeTexture nativeTexture = new(drawingSurface); - return nativeTexture; + Texture texture = new(drawingSurface); + return texture; } private static IDisposable EnsureContext() @@ -414,4 +414,4 @@ public void SaveToDesktop() public ulong SurfaceId => DrawingBackendApi.Current.SurfaceImplementation.GetNativeSurfaceInfo(DrawingSurface.ObjectPointer) ?.SurfaceId ?? throw new Exception("Framebuffer info not available."); -} \ No newline at end of file +} diff --git a/src/Drawie.Interop.Avalonia.Core/AvaloniaRenderingDispatcher.cs b/src/Drawie.Interop.Avalonia.Core/AvaloniaRenderingDispatcher.cs index 24080d0..69df860 100644 --- a/src/Drawie.Interop.Avalonia.Core/AvaloniaRenderingDispatcher.cs +++ b/src/Drawie.Interop.Avalonia.Core/AvaloniaRenderingDispatcher.cs @@ -24,6 +24,11 @@ public class AvaloniaRenderingDispatcher : IRenderingDispatcher }); }; + public void RenderApiReady() + { + + } + public async Task InvokeAsync(Func func) { return await Dispatcher.UIThread.InvokeAsync(() => diff --git a/src/Drawie.Interop.Avalonia.Core/Controls/DrawieControl.cs b/src/Drawie.Interop.Avalonia.Core/Controls/DrawieControl.cs index bcde480..a85dbd3 100644 --- a/src/Drawie.Interop.Avalonia.Core/Controls/DrawieControl.cs +++ b/src/Drawie.Interop.Avalonia.Core/Controls/DrawieControl.cs @@ -12,7 +12,7 @@ public abstract class DrawieControl : InteropControl { private RenderApiResources resources; private DrawingSurface? framebuffer; - private NativeTexture intermediateSurface; + private Texture intermediateSurface; private PixelSize lastSize = PixelSize.Empty; @@ -87,7 +87,7 @@ protected override void RenderFrame(PixelSize size) if (UseIntermediateSurface) { intermediateSurface?.Dispose(); - intermediateSurface = NativeTexture.ForDisplay(sizeVec); + intermediateSurface = Texture.ForDisplay(sizeVec); } lastSize = size; diff --git a/src/Drawie.Interop.Avalonia.Core/Controls/DrawieTextureControl.cs b/src/Drawie.Interop.Avalonia.Core/Controls/DrawieTextureControl.cs index fbd9bfc..e2512b5 100644 --- a/src/Drawie.Interop.Avalonia.Core/Controls/DrawieTextureControl.cs +++ b/src/Drawie.Interop.Avalonia.Core/Controls/DrawieTextureControl.cs @@ -28,9 +28,9 @@ public Stretch Stretch set => SetValue(StretchProperty, value); } - public static readonly StyledProperty TextureProperty = - AvaloniaProperty.Register( - nameof(NativeTexture)); + public static readonly StyledProperty TextureProperty = + AvaloniaProperty.Register( + nameof(Texture)); public static readonly StyledProperty SamplingOptionsProperty = AvaloniaProperty.Register( @@ -42,7 +42,7 @@ public SampleQuality SamplingOptions set => SetValue(SamplingOptionsProperty, value); } - public NativeTexture NativeTexture + public Texture Texture { get => GetValue(TextureProperty); set => SetValue(TextureProperty, value); @@ -54,10 +54,10 @@ static DrawieTextureControl() TextureProperty.Changed.AddClassHandler((x,e) => { x.QueueNextFrame(); - if (e.OldValue is NativeTexture oldTexture && x.RepaintOnChanged) - oldTexture.Changed -= x.NativeTextureChanged; - if (e.NewValue is NativeTexture newTexture && x.RepaintOnChanged) - newTexture.Changed += x.NativeTextureChanged; + if (e.OldValue is Texture oldTexture && x.RepaintOnChanged) + oldTexture.Changed -= x.TextureChanged; + if (e.NewValue is Texture newTexture && x.RepaintOnChanged) + newTexture.Changed += x.TextureChanged; }); SamplingOptionsProperty.Changed.AddClassHandler((x,e) => x.QueueNextFrame()); StretchProperty.Changed.AddClassHandler((x,e) => x.QueueNextFrame()); @@ -66,13 +66,13 @@ static DrawieTextureControl() if (e.NewValue is true) { x.QueueNextFrame(); - if(x.NativeTexture != null) - x.NativeTexture.Changed += x.NativeTextureChanged; + if(x.Texture != null) + x.Texture.Changed += x.TextureChanged; } else { - if(x.NativeTexture != null) - x.NativeTexture.Changed -= x.NativeTextureChanged; + if(x.Texture != null) + x.Texture.Changed -= x.TextureChanged; } }); } @@ -84,7 +84,7 @@ static DrawieTextureControl() /// The desired size of the control. protected override Size MeasureOverride(Size availableSize) { - var source = NativeTexture; + var source = Texture; var result = new Size(); if (source != null) @@ -102,7 +102,7 @@ protected override Size MeasureOverride(Size availableSize) /// protected override Size ArrangeOverride(Size finalSize) { - var source = NativeTexture; + var source = Texture; if (source != null) { @@ -118,14 +118,14 @@ protected override Size ArrangeOverride(Size finalSize) return new Size(); } - private void NativeTextureChanged(RectD? changedRect) + private void TextureChanged(RectD? changedRect) { QueueNextFrame(); } public override void Draw(DrawingSurface surface) { - if (NativeTexture == null || NativeTexture.IsDisposed) + if (Texture == null || Texture.IsDisposed) { return; } @@ -136,11 +136,11 @@ public override void Draw(DrawingSurface surface) ScaleCanvas(surface.Canvas); if (SamplingOptions == SampleQuality.Nearest) { - surface.Canvas.DrawSurface(NativeTexture.DrawingSurface, 0, 0); + surface.Canvas.DrawSurface(Texture.DrawingSurface, 0, 0); } else { - using var snapshot = NativeTexture.DrawingSurface.Snapshot(); + using var snapshot = Texture.DrawingSurface.Snapshot(); surface.Canvas.DrawImage(snapshot, 0, 0, Backend.Core.Surfaces.SamplingOptions.Bilinear); } @@ -149,8 +149,8 @@ public override void Draw(DrawingSurface surface) private void ScaleCanvas(Canvas canvas) { - float x = (float)NativeTexture.Size.X; - float y = (float)NativeTexture.Size.Y; + float x = (float)Texture.Size.X; + float y = (float)Texture.Size.Y; if (Stretch == Stretch.Fill) { diff --git a/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj b/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj index 9175508..9ac5a11 100644 --- a/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj +++ b/src/Drawie.Interop.Avalonia.Core/Drawie.Interop.Avalonia.Core.csproj @@ -8,7 +8,7 @@ - + diff --git a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlInteropContext.cs b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlInteropContext.cs index 3f28125..ed852e5 100644 --- a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlInteropContext.cs +++ b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlInteropContext.cs @@ -10,6 +10,7 @@ namespace Drawie.Interop.Avalonia.OpenGl; public class OpenGlInteropContext : IOpenGlContext, IDrawieInteropContext { public bool IsGlViaAngle { get; } + public static OpenGlInteropContext? Current { get; private set; } public IGlContext Context { get; } @@ -37,6 +38,11 @@ public RenderApiResources CreateResources(CompositionDrawingSurface surface, ICo return new OpenGlRenderApiResources(surface, interop); } + public void AddManagedTexture(IOpenGlTexture texture) + { + // TODO + } + public GpuDiagnostics GetGpuDiagnostics() { Dictionary details = new Dictionary(); diff --git a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlRenderApiResources.cs b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlRenderApiResources.cs index 63add87..37277e4 100644 --- a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlRenderApiResources.cs +++ b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlRenderApiResources.cs @@ -43,7 +43,7 @@ public OpenGlRenderApiResources(CompositionDrawingSurface surface, ICompositionG fbo = Context.GlInterface.GenFramebuffer(); } - fboTexture = new OpenGlTexture((uint)fbo, null); + fboTexture = new OpenGlTexture((uint)fbo, GL.GetApi(s => Context.GlInterface.GetProcAddress(s)), 0, 0); } public override async ValueTask DisposeAsync() diff --git a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlSwapchain.cs b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlSwapchain.cs index 6b2b690..01bba27 100644 --- a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlSwapchain.cs +++ b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlSwapchain.cs @@ -88,7 +88,7 @@ public async ValueTask DisposeAsync() _texture.Dispose(); } - public uint TextureId => (uint)_texture.TextureId; + public ulong TextureId => (ulong)_texture.TextureId; public int InternalFormat => _texture.InternalFormat; public PixelSize Size => new(_texture.Properties.Width, _texture.Properties.Height); public Task? LastPresent => _lastPresent; @@ -142,7 +142,7 @@ public async ValueTask DisposeAsync() _texture.Dispose(); } - public uint TextureId => (uint)_texture.TextureId; + public ulong TextureId => (ulong)_texture.TextureId; public int InternalFormat => _texture.InternalFormat; public PixelSize Size => _texture.Size; public Task? LastPresent { get; private set; } diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj index 1357e41..78d7dd4 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj +++ b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj @@ -15,14 +15,4 @@ - - - - ..\Drawie.AvaloniaInterop\bin\Debug\net10.0\Avalonia.Vulkan.dll - - - - - - diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs index aba481a..4c42d8a 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanContent.cs @@ -63,9 +63,8 @@ public void Render(VulkanImage image) ImageLayout.TransferSrcOptimal, image.InternalHandle, ImageLayout.TransferDstOptimal, 1, srcBlitRegion, Filter.Linear); - commandBuffer.Submit(); - texture.ColorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal, commandBuffer.InternalHandle); + commandBuffer.Submit(); } public void CreateTextureImage(VecI size) diff --git a/src/Drawie.Interop.Avalonia/AppBuilderExtensions.cs b/src/Drawie.Interop.Avalonia/AppBuilderExtensions.cs index d0496ba..ad81f5e 100644 --- a/src/Drawie.Interop.Avalonia/AppBuilderExtensions.cs +++ b/src/Drawie.Interop.Avalonia/AppBuilderExtensions.cs @@ -1,5 +1,4 @@ using Avalonia; -using Avalonia.Controls.ApplicationLifetimes; using Avalonia.OpenGL; using Avalonia.OpenGL.Egl; using Avalonia.Rendering.Composition; @@ -14,7 +13,7 @@ using Drawie.Skia; using DrawiEngine; -namespace Drawie.Interop.VulkanAvalonia; +namespace Drawie.Interop.Avalonia; public static class AppBuilderExtensions { diff --git a/src/Drawie.RenderApi/Drawie.RenderApi.csproj b/src/Drawie.RenderApi/Drawie.RenderApi.csproj index 1349c11..a177957 100644 --- a/src/Drawie.RenderApi/Drawie.RenderApi.csproj +++ b/src/Drawie.RenderApi/Drawie.RenderApi.csproj @@ -6,12 +6,6 @@ enable - - - ..\..\..\..\.nuget\packages\silk.net.core\2.21.0\lib\net6.0\Silk.NET.Core.dll - - - diff --git a/src/Drawie.Rendering/RenderingContext.cs b/src/Drawie.Rendering/RenderingContext.cs index e3c1f64..158a658 100644 --- a/src/Drawie.Rendering/RenderingContext.cs +++ b/src/Drawie.Rendering/RenderingContext.cs @@ -1,3 +1,4 @@ +using Drawie.Backend.Core; using Drawie.Backend.Core.Bridge; using Drawie.RenderApi; @@ -44,4 +45,4 @@ public void Dispose() IsOpen = false; ownedFramebuffers.Clear(); } -} \ No newline at end of file +} diff --git a/src/Drawie.Rendering/Texture.cs b/src/Drawie.Rendering/Texture.cs deleted file mode 100644 index 9d666c5..0000000 --- a/src/Drawie.Rendering/Texture.cs +++ /dev/null @@ -1,33 +0,0 @@ -using Drawie.Backend.Core; -using Drawie.Numerics; -using Drawie.RenderApi.Abstraction.Textures; - -namespace Drawie.Rendering; - -///

-/// Readonly texture, can be modified with a Rendering Context -/// -public class Texture : ITexture, IDisposable -{ - internal NativeTexture NativeTexture { get; } - public int Width { get; } - public int Height { get; } - public VecI Size => new VecI(Width, Height); - public ulong TextureId => NativeTexture.TextureId; - - public Texture(VecI size) : this(new NativeTexture(size)) - { - } - - public Texture(NativeTexture native) - { - NativeTexture = native; - Width = native.Size.X; - Height = native.Size.Y; - } - - public void Dispose() - { - NativeTexture.Dispose(); - } -} \ No newline at end of file diff --git a/src/Drawie.Rendering/TextureFramebuffer.cs b/src/Drawie.Rendering/TextureFramebuffer.cs index 28e039e..39ea99c 100644 --- a/src/Drawie.Rendering/TextureFramebuffer.cs +++ b/src/Drawie.Rendering/TextureFramebuffer.cs @@ -15,13 +15,13 @@ public class TextureFramebuffer : IDisposable, IRenderTarget internal Texture UnderlyingTexture { get; } public bool IsOpen { get; private set; } public VecI Size { get; } - public Canvas? Canvas => IsOpen ? UnderlyingTexture?.NativeTexture?.DrawingSurface?.Canvas : null; + public Canvas? Canvas => IsOpen ? UnderlyingTexture?.DrawingSurface?.Canvas : null; internal TextureFramebuffer(Texture texture) { UnderlyingTexture = texture; - Size = new VecI(texture.Width, texture.Height); + Size = texture.Size; } internal IDisposable Open() @@ -33,13 +33,13 @@ internal IDisposable Open() public void Clear() { ThrowIfNotOpen(); - UnderlyingTexture.NativeTexture.DrawingSurface.Canvas.Clear(); + UnderlyingTexture.DrawingSurface.Canvas.Clear(); } public void Clear(Color color) { ThrowIfNotOpen(); - UnderlyingTexture.NativeTexture.DrawingSurface.Canvas.Clear(color); + UnderlyingTexture.DrawingSurface.Canvas.Clear(color); } public void DrawRectangle(float x, float y, float width, float height, Paintable paintable) @@ -47,7 +47,7 @@ public void DrawRectangle(float x, float y, float width, float height, Paintable ThrowIfNotOpen(); using var paint = new Paint() { Paintable = paintable }; - UnderlyingTexture.NativeTexture.DrawingSurface.Canvas.DrawRect(x, y, width, height, paint); + UnderlyingTexture.DrawingSurface.Canvas.DrawRect(x, y, width, height, paint); } private void ThrowIfNotOpen() @@ -66,5 +66,5 @@ public void Dispose() DrawingBackendApi.Current.Flush(); } - ulong IRenderTarget.SurfaceId => UnderlyingTexture.NativeTexture.SurfaceId; -} \ No newline at end of file + ulong IRenderTarget.SurfaceId => UnderlyingTexture.SurfaceId; +} From 04e5317eaede00d9090070b2d22fe1aef1c780dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Tue, 25 Aug 2026 11:17:27 +0200 Subject: [PATCH 40/55] Update skiasharp to v4 --- src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj | 2 +- src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj index 034baf6..9e38205 100644 --- a/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj +++ b/src/Drawie.Backend.Skia/Drawie.Backend.Skia.csproj @@ -5,7 +5,7 @@ enable enable Drawie.Skia - 3.119.2 + 4.151.1

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

&^3qou$p#at1v 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 EKQ^rfr2qf` diff --git a/src/Drawie2Sample/Assets/silkSpecular.png b/src/Drawie2Sample/Assets/silkSpecular.png deleted file mode 100644 index 6a5a415ee4bd5ce10fa046bdb2522635459232b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12099 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 zE652ℜ(8gf!}YRsQ{zgKQS2cUCqr3 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

diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index 9c07746..1d78d7b 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -259,7 +259,8 @@ public void Flush() public override string ToString() { - return "Skia"; + var version = typeof(SKCanvas).Assembly.GetName().Version; + return "Skia " + version; } public async ValueTask DisposeAsync() From 6b241deeafe131cdd8dbcbda9efb6952b59cba76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Tue, 25 Aug 2026 11:52:02 +0200 Subject: [PATCH 41/55] net10 and skiasharp 4 --- src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj | 2 +- .../Bridge/NativeObjectsImpl/IPaintImplementation.cs | 2 -- src/Drawie.Backend.Core/Surface.cs | 4 +--- src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs | 6 ------ src/Drawie.Backend.Core/Texture.cs | 5 +---- .../Implementations/SkiaCanvasImplementation.cs | 4 +++- .../Implementations/SkiaPaintImplementation.cs | 12 ------------ src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 2 +- .../Drawie.Windowing.Glfw.csproj | 2 +- 9 files changed, 8 insertions(+), 31 deletions(-) diff --git a/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj b/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj index 9bd2407..0bc3df7 100644 --- a/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj +++ b/src/DrawiEngine.Desktop/DrawiEngine.Desktop.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable diff --git a/src/Drawie.Backend.Core/Bridge/NativeObjectsImpl/IPaintImplementation.cs b/src/Drawie.Backend.Core/Bridge/NativeObjectsImpl/IPaintImplementation.cs index 5465156..5f0dd3a 100644 --- a/src/Drawie.Backend.Core/Bridge/NativeObjectsImpl/IPaintImplementation.cs +++ b/src/Drawie.Backend.Core/Bridge/NativeObjectsImpl/IPaintImplementation.cs @@ -15,8 +15,6 @@ public interface IPaintImplementation public void SetColor(Paint paint, Color value); public BlendMode GetBlendMode(Paint paint); public void SetBlendMode(Paint paint, BlendMode value); - public FilterQuality GetFilterQuality(Paint paint); - public void SetFilterQuality(Paint paint, FilterQuality value); public bool GetIsAntiAliased(Paint paint); public void SetIsAntiAliased(Paint paint, bool value); public PaintStyle GetStyle(Paint paint); diff --git a/src/Drawie.Backend.Core/Surface.cs b/src/Drawie.Backend.Core/Surface.cs index ca70337..3170452 100644 --- a/src/Drawie.Backend.Core/Surface.cs +++ b/src/Drawie.Backend.Core/Surface.cs @@ -26,7 +26,7 @@ public class Surface : IDisposable, ICloneable, IPixelsMap private Paint drawingPaint = new Paint() { BlendMode = BlendMode.Src }; private Paint nearestNeighborReplacingPaint = - new() { BlendMode = BlendMode.Src, FilterQuality = FilterQuality.None }; + new() { BlendMode = BlendMode.Src }; public ImageInfo ImageInfo { get; } @@ -136,8 +136,6 @@ public Surface Resize(VecI newSize, ResizeMethod resizeMethod) _ => FilterQuality.None }; - paint.FilterQuality = filterQuality; - newSurface.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); return newSurface; } diff --git a/src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs b/src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs index 41a49db..ec136c9 100644 --- a/src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs +++ b/src/Drawie.Backend.Core/Surfaces/PaintImpl/Paint.cs @@ -47,12 +47,6 @@ public StrokeJoin StrokeJoin set => DrawingBackendApi.Current.PaintImplementation.SetStrokeJoin(this, value); } - public FilterQuality FilterQuality - { - get => DrawingBackendApi.Current.PaintImplementation.GetFilterQuality(this); - set => DrawingBackendApi.Current.PaintImplementation.SetFilterQuality(this, value); - } - public bool IsAntiAliased { get => DrawingBackendApi.Current.PaintImplementation.GetIsAntiAliased(this); diff --git a/src/Drawie.Backend.Core/Texture.cs b/src/Drawie.Backend.Core/Texture.cs index 7ed123f..0e2a31a 100644 --- a/src/Drawie.Backend.Core/Texture.cs +++ b/src/Drawie.Backend.Core/Texture.cs @@ -32,7 +32,7 @@ public class Texture : IDisposable, ICloneable, IPixelsMap private HashSet lockDisposes = new(); private Paint nearestNeighborReplacingPaint = - new() { BlendMode = BlendMode.Src, FilterQuality = FilterQuality.None }; + new() { BlendMode = BlendMode.Src }; public Texture(VecI size) : this(new ImageInfo(size.X, size.Y, ColorType.RgbaF16, AlphaType.Premul, ColorSpace.CreateSrgb()) @@ -209,8 +209,6 @@ public Texture CreateResized(VecI newSize, ResizeMethod method) _ => FilterQuality.None }; - paint.FilterQuality = filterQuality; - newTexture.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); return newTexture; @@ -245,7 +243,6 @@ public Texture Resize(VecI newSize, FilterQuality quality) using var ctx = EnsureContext(); using Image image = DrawingSurface.Snapshot(); using Paint paint = new(); - paint.FilterQuality = quality; Texture newSurface = new(newSize); newSurface.DrawingSurface.Canvas.DrawImage(image, new RectD(0, 0, newSize.X, newSize.Y), paint); diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs index 49b9962..e2958d4 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaCanvasImplementation.cs @@ -23,6 +23,8 @@ public sealed class SkiaCanvasImplementation : SkObjectImplementation, private readonly SkObjectImplementation _fontImpl; private readonly SkObjectImplementation _verticesImpl; + private SKFont defaultFont => new SKFont(SKTypeface.Default, 12); + public SkiaCanvasImplementation(SkObjectImplementation paintImpl, SkObjectImplementation imageImpl, SkObjectImplementation bitmapImpl, SkObjectImplementation pathImpl, SkObjectImplementation fontImpl, @@ -278,7 +280,7 @@ public void DrawBitmap(IntPtr objPtr, Bitmap bitmap, float x, float y, Paint? pa public void DrawText(IntPtr objPtr, string text, float x, float y, Paint paint) { - this[objPtr].DrawText(text, x, y, _paintImpl[paint.ObjectPointer]); + this[objPtr].DrawText(SKTextBlob.Create(text, defaultFont), x, y, _paintImpl[paint.ObjectPointer]); } public void DrawText(IntPtr objPtr, string text, float x, float y, Font font, Paint paint) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs index e0edcb6..655ee9e 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaPaintImplementation.cs @@ -76,18 +76,6 @@ public void SetBlendMode(Paint paint, BlendMode value) skPaint.BlendMode = (SKBlendMode)value; } - public FilterQuality GetFilterQuality(Paint paint) - { - SKPaint skPaint = this[paint.ObjectPointer]; - return (FilterQuality)skPaint.FilterQuality; - } - - public void SetFilterQuality(Paint paint, FilterQuality value) - { - SKPaint skPaint = this[paint.ObjectPointer]; - skPaint.FilterQuality = (SKFilterQuality)value; - } - public bool GetIsAntiAliased(Paint paint) { SKPaint skPaint = this[paint.ObjectPointer]; diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index 1d78d7b..fea5000 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -209,7 +209,7 @@ public DrawingSurface CreateRenderSurface(VecI size, ITexture renderTexture, Sur SharingMode = texture.TargetSharingMode, }; - var surface = SKSurface.Create(GraphicsContext, new GRBackendRenderTarget(size.X, size.Y, 1, imageInfo), + var surface = SKSurface.Create(GraphicsContext, new GRBackendRenderTarget(size.X, size.Y, imageInfo), (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888, new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)); diff --git a/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj b/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj index 3aa63e5..d15a011 100644 --- a/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj +++ b/src/Drawie.Windowing.Glfw/Drawie.Windowing.Glfw.csproj @@ -1,7 +1,7 @@  - net8.0 + net10.0 enable enable Drawie.Silk From abe5b0ff42b3790101cda4cabd547d68541798f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Wed, 26 Aug 2026 11:08:42 +0200 Subject: [PATCH 42/55] Update Directory.Build.props --- src/Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 1a2d47c..25d665d 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,6 +1,6 @@ - [12.1.1-cibuild0004440-alpha] + [12.1.1-cibuild0004448-alpha] true true From f31e4417ee5a81a430e6d3d0622e4a63124012b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 27 Aug 2026 10:47:29 +0200 Subject: [PATCH 43/55] prefer discrete gpu, better vulkan handling --- .../AvaloniaInteropContextInfo.cs | 10 +- .../D3DMemoryHelper.cs | 96 +++++++++ .../Drawie.Interop.Avalonia.Vulkan.csproj | 1 + .../Vk/VulkanCommandBuffer.cs | 30 +-- .../Vk/VulkanImage.cs | 201 ++++++++++++------ .../Vk/VulkanInteropContext.cs | 40 +++- .../Vk/VulkanSemaphorePair.cs | 32 ++- .../Vk/VulkanSwapchain.cs | 98 +++++++-- .../Vk/VulkanTimelineSemaphore.cs | 74 +++++++ src/Drawie.RenderApi.Vulkan/VulkanContext.cs | 30 ++- src/Drawie.RenderApi/GpuInfo.cs | 3 +- 11 files changed, 485 insertions(+), 130 deletions(-) create mode 100644 src/Drawie.Interop.Avalonia.Vulkan/D3DMemoryHelper.cs create mode 100644 src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanTimelineSemaphore.cs diff --git a/src/Drawie.Interop.Avalonia.Vulkan/AvaloniaInteropContextInfo.cs b/src/Drawie.Interop.Avalonia.Vulkan/AvaloniaInteropContextInfo.cs index cac8e1a..db308fc 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/AvaloniaInteropContextInfo.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/AvaloniaInteropContextInfo.cs @@ -1,4 +1,5 @@ -using Avalonia.Vulkan; +using System.Runtime.InteropServices; +using Avalonia.Vulkan; using Drawie.RenderApi; namespace Drawie.Interop.Avalonia.Vulkan; @@ -14,7 +15,10 @@ public string[] GetInstanceExtensions() "VK_KHR_external_semaphore_capabilities", "VK_EXT_debug_utils" }; - + + if(RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + enabledExtensions.Add("VK_KHR_portability_enumeration"); + return enabledExtensions.ToArray(); } @@ -24,4 +28,4 @@ public ulong GetSurfaceHandle(IntPtr instanceHandle) } public bool HasSurface => false; -} \ No newline at end of file +} diff --git a/src/Drawie.Interop.Avalonia.Vulkan/D3DMemoryHelper.cs b/src/Drawie.Interop.Avalonia.Vulkan/D3DMemoryHelper.cs new file mode 100644 index 0000000..ccfa675 --- /dev/null +++ b/src/Drawie.Interop.Avalonia.Vulkan/D3DMemoryHelper.cs @@ -0,0 +1,96 @@ +using Avalonia; +using Silk.NET.Core.Native; +using Silk.NET.Direct3D11; +using Silk.NET.DXGI; +using VulkanFormat = Silk.NET.Vulkan.Format; +using static Silk.NET.Core.Native.SilkMarshal; + +namespace Drawie.Interop.Avalonia.Vulkan; + +public class D3DMemoryHelper +{ + private const int DxgiErrorNotFound = unchecked((int)0x887A0002); + + public static unsafe ComPtr CreateDeviceByLuid(Luid luid) + { + using var dxgi = new DXGI(DXGI.CreateDefaultContext(["DXGI.dll"])); + using var d3d11 = new D3D11(D3D11.CreateDefaultContext(["d3d11.dll"])); + using var factory = dxgi.CreateDXGIFactory1(); + using var adapter = GetAdapterByLuid(factory, luid); + + const int featureLevelCount = 8; + var featureLevels = stackalloc D3DFeatureLevel[featureLevelCount] + { + D3DFeatureLevel.Level121, + D3DFeatureLevel.Level120, + D3DFeatureLevel.Level111, + D3DFeatureLevel.Level110, + D3DFeatureLevel.Level100, + D3DFeatureLevel.Level93, + D3DFeatureLevel.Level92, + D3DFeatureLevel.Level91 + }; + + ComPtr device = default; + ComPtr context = default; + D3DFeatureLevel actualFeatureLevel; + ThrowHResult(d3d11.CreateDevice( + adapter, + D3DDriverType.Unknown, + IntPtr.Zero, + 0u, + featureLevels, + featureLevelCount, + D3D11.SdkVersion, + device.GetAddressOf(), + &actualFeatureLevel, + context.GetAddressOf())); + + return device; + } + + private static unsafe ComPtr GetAdapterByLuid(ComPtr factory, Luid luid) + { + var index = 0u; + ComPtr adapter = default; + + while (factory.EnumAdapters(index, adapter.GetAddressOf()) != DxgiErrorNotFound) + { + AdapterDesc adapterDesc; + if (adapter.GetDesc(&adapterDesc) == 0 & AreLuidsEqual(adapterDesc.AdapterLuid, luid)) + return adapter; + + adapter.Dispose(); + ++index; + } + + throw new ArgumentException("Device with the corresponding LUID not found"); + } + + public static unsafe ComPtr CreateMemoryHandle(ComPtr device, PixelSize size, VulkanFormat format) + { + if (format != VulkanFormat.R8G8B8A8Unorm) + throw new ArgumentException("Not supported format"); + + ComPtr texture = default; + var textureDesc = new Texture2DDesc + { + Format = Format.FormatR8G8B8A8Unorm, + Width = (uint)size.Width, + Height = (uint)size.Height, + ArraySize = 1, + MipLevels = 1, + SampleDesc = new SampleDesc(1, 0), + Usage = Usage.Default, + BindFlags = (uint)(BindFlag.RenderTarget | BindFlag.ShaderResource), + CPUAccessFlags = 0, + MiscFlags = (uint)(ResourceMiscFlag.SharedKeyedmutex | ResourceMiscFlag.SharedNthandle) + }; + ThrowHResult(device.CreateTexture2D(&textureDesc, (SubresourceData*)null, texture.GetAddressOf())); + + return texture; + } + + private static bool AreLuidsEqual(Luid x, Luid y) + => x.Low == y.Low && x.High == y.High; +} diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj index 7d45859..ec01758 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj +++ b/src/Drawie.Interop.Avalonia.Vulkan/Drawie.Interop.Avalonia.Vulkan.csproj @@ -24,5 +24,6 @@ + diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanCommandBuffer.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanCommandBuffer.cs index 658a9b6..98a58fc 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanCommandBuffer.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanCommandBuffer.cs @@ -108,19 +108,19 @@ internal unsafe VulkanCommandBuffer(Silk.NET.Vulkan.Vk api, Device device, Queue var fenceCreateInfo = new FenceCreateInfo() { - SType = StructureType.FenceCreateInfo, - Flags = FenceCreateFlags.SignaledBit + SType = StructureType.FenceCreateInfo, Flags = FenceCreateFlags.SignaledBit }; - api.CreateFence(device, fenceCreateInfo, null, out _fence); + api.CreateFence(device, in fenceCreateInfo, null, out _fence); } public unsafe void Dispose() { - _api.WaitForFences(_device, 1, _fence, true, ulong.MaxValue); + _api.WaitForFences(_device, 1, in _fence, true, ulong.MaxValue); lock (_commandBufferPool._lock) { - _api.FreeCommandBuffers(_device, _commandBufferPool._commandPool, 1, InternalHandle); + var handle = InternalHandle; + _api.FreeCommandBuffers(_device, _commandBufferPool._commandPool, 1, in handle); } _api.DestroyFence(_device, _fence, null); @@ -134,11 +134,10 @@ public void BeginRecording() var beginInfo = new CommandBufferBeginInfo { - SType = StructureType.CommandBufferBeginInfo, - Flags = CommandBufferUsageFlags.OneTimeSubmitBit + SType = StructureType.CommandBufferBeginInfo, Flags = CommandBufferUsageFlags.OneTimeSubmitBit }; - _api.BeginCommandBuffer(InternalHandle, beginInfo); + _api.BeginCommandBuffer(InternalHandle, in beginInfo); } } @@ -169,7 +168,8 @@ public unsafe void Submit( ReadOnlySpan waitDstStageMask = default, ReadOnlySpan signalSemaphores = default, Fence? fence = null, - KeyedMutexSubmitInfo? keyedMutex = null) + KeyedMutexSubmitInfo? keyedMutex = null, + IntPtr pNext = default) { EndRecording(); @@ -191,7 +191,8 @@ public unsafe void Submit( PReleaseKeys = &releaseKey, PAcquireSyncs = &devMem, PReleaseSyncs = &devMem, - PAcquireTimeouts = &timeout + PAcquireTimeouts = &timeout, + PNext = (void*)pNext }; fixed (Semaphore* pWaitSemaphores = waitSemaphores, pSignalSemaphores = signalSemaphores) @@ -201,7 +202,7 @@ public unsafe void Submit( var commandBuffer = InternalHandle; var submitInfo = new SubmitInfo { - PNext = keyedMutex != null ? &mutex : null, + PNext = keyedMutex != null ? &mutex : (void*)pNext, SType = StructureType.SubmitInfo, WaitSemaphoreCount = waitSemaphores != null ? (uint)waitSemaphores.Length : 0, PWaitSemaphores = pWaitSemaphores, @@ -212,13 +213,14 @@ public unsafe void Submit( PSignalSemaphores = pSignalSemaphores, }; - _api.ResetFences(_device, 1, fence.Value); + var fenceValue = fence.Value; + _api.ResetFences(_device, 1, in fenceValue); - _api.QueueSubmit(_queue, 1, submitInfo, fence.Value); + _api.QueueSubmit(_queue, 1, in submitInfo, fenceValue); } } _commandBufferPool.DisposeCommandBuffer(this); } } -} \ No newline at end of file +} diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanImage.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanImage.cs index 2865a6b..d83d5d2 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanImage.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanImage.cs @@ -2,8 +2,13 @@ using Avalonia; using Avalonia.Platform; using Drawie.RenderApi.Vulkan.Extensions; +using Silk.NET.Core.Native; +using Silk.NET.Direct3D11; +using Silk.NET.DXGI; using Silk.NET.Vulkan; +using Silk.NET.Vulkan.Extensions.EXT; using Silk.NET.Vulkan.Extensions.KHR; +using Format = Silk.NET.Vulkan.Format; namespace Drawie.Interop.Avalonia.Vulkan.Vk; @@ -30,12 +35,15 @@ public class VulkanImage : IDisposable public uint UsageFlags => (uint)_imageUsageFlags; public ulong MemoryHandle => _imageMemory.Handle; public DeviceMemory DeviceMemory => _imageMemory; + private ComPtr _d3dTexture2D; public uint MipLevels { get; } public Silk.NET.Vulkan.Vk Api { get; } public PixelSize Size { get; } public ulong MemorySize { get; } public uint CurrentLayout => (uint)_currentLayout; + private bool hasIOSurface; + public unsafe VulkanImage(VulkanInteropContext vk, uint format, PixelSize size, bool exportable, IReadOnlyList supportedHandleTypes) { @@ -66,9 +74,20 @@ public unsafe VulkanImage(VulkanInteropContext vk, uint format, PixelSize size, SType = StructureType.ExternalMemoryImageCreateInfo, HandleTypes = handleType }; + var ioSurfaceCreateInfo = new ExportMetalObjectCreateInfoEXT + { + SType = StructureType.ExportMetalObjectCreateInfoExt, + ExportObjectType = ExportMetalObjectTypeFlagsEXT.IosurfaceBitExt + }; + + hasIOSurface = exportable && RuntimeInformation.IsOSPlatform(OSPlatform.OSX); + var imageCreateInfo = new ImageCreateInfo { - PNext = exportable ? &externalMemoryCreateInfo : null, + PNext = + exportable + ? RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? &ioSurfaceCreateInfo : &externalMemoryCreateInfo + : null, SType = StructureType.ImageCreateInfo, ImageType = ImageType.Type2D, Format = Format, @@ -89,87 +108,108 @@ public unsafe VulkanImage(VulkanInteropContext vk, uint format, PixelSize size, .CreateImage(_device, imageCreateInfo, null, out var image).ThrowOnError("Failed to create image"); InternalHandle = image; - Api.GetImageMemoryRequirements(_device, InternalHandle, - out var memoryRequirements); - - var dedicatedAllocation = new MemoryDedicatedAllocateInfoKHR + if (!exportable || !RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { - SType = StructureType.MemoryDedicatedAllocateInfoKhr, Image = image - }; + Api.GetImageMemoryRequirements(_device, InternalHandle, + out var memoryRequirements); - var fdExport = new ExportMemoryAllocateInfo - { - HandleTypes = handleType, SType = StructureType.ExportMemoryAllocateInfo, PNext = &dedicatedAllocation - }; + var dedicatedAllocation = new MemoryDedicatedAllocateInfoKHR + { + SType = StructureType.MemoryDedicatedAllocateInfoKhr, Image = image + }; - ImportMemoryWin32HandleInfoKHR handleImport = default; - /*if (handleType == ExternalMemoryHandleTypeFlags.D3D11TextureBit && exportable) - { - var d3dDevice = vk.D3DDevice ?? throw new NotSupportedException("Vulkan D3DDevice wasn't created"); - _d3dTexture2D = D3DMemoryHelper.CreateMemoryHandle(d3dDevice, size, Format); - using var dxgi = _d3dTexture2D.QueryInterface(); + var fdExport = new ExportMemoryAllocateInfo + { + HandleTypes = handleType, + SType = StructureType.ExportMemoryAllocateInfo, + PNext = &dedicatedAllocation + }; - handleImport = new ImportMemoryWin32HandleInfoKHR + ImportMemoryWin32HandleInfoKHR handleImport = default; + if (handleType == ExternalMemoryHandleTypeFlags.D3D11TextureBit && exportable) + { + if (vk.D3DDevice.Handle == null) + throw new NotSupportedException("Vulkan D3DDevice wasn't created"); + _d3dTexture2D = D3DMemoryHelper.CreateMemoryHandle(vk.D3DDevice, size, Format); + + handleImport = new ImportMemoryWin32HandleInfoKHR + { + PNext = &dedicatedAllocation, + SType = StructureType.ImportMemoryWin32HandleInfoKhr, + HandleType = ExternalMemoryHandleTypeFlags.D3D11TextureBit, + Handle = CreateDxgiSharedHandle() + }; + } + + var memoryAllocateInfo = new MemoryAllocateInfo { - PNext = &dedicatedAllocation, - SType = StructureType.ImportMemoryWin32HandleInfoKhr, - HandleType = ExternalMemoryHandleTypeFlags.D3D11TextureBit, - Handle = dxgi.CreateSharedHandle(null, SharedResourceFlags.Read | SharedResourceFlags.Write), + PNext = + exportable ? handleImport.Handle != IntPtr.Zero ? &handleImport : &fdExport : null, + SType = StructureType.MemoryAllocateInfo, + AllocationSize = memoryRequirements.Size, + MemoryTypeIndex = (uint)VulkanMemoryHelper.FindSuitableMemoryTypeIndex( + Api, + _physicalDevice, + memoryRequirements.MemoryTypeBits, MemoryPropertyFlags.DeviceLocalBit) }; - }*/ - var memoryAllocateInfo = new MemoryAllocateInfo - { - PNext = - exportable ? handleImport.Handle != IntPtr.Zero ? &handleImport : &fdExport : null, - SType = StructureType.MemoryAllocateInfo, - AllocationSize = memoryRequirements.Size, - MemoryTypeIndex = (uint)VulkanMemoryHelper.FindSuitableMemoryTypeIndex( - Api, - _physicalDevice, - memoryRequirements.MemoryTypeBits, MemoryPropertyFlags.DeviceLocalBit) - }; + Api.AllocateMemory(_device, memoryAllocateInfo, null, + out var imageMemory).ThrowOnError("Failed to allocate image memory"); + + _imageMemory = imageMemory; + - Api.AllocateMemory(_device, memoryAllocateInfo, null, - out var imageMemory).ThrowOnError("Failed to allocate image memory"); + MemorySize = memoryRequirements.Size; - _imageMemory = imageMemory; + Api.BindImageMemory(_device, InternalHandle, _imageMemory, 0).ThrowOnError("Failed to bind image memory"); + var componentMapping = new ComponentMapping( + ComponentSwizzle.Identity, + ComponentSwizzle.Identity, + ComponentSwizzle.Identity, + ComponentSwizzle.Identity); + AspectFlags = ImageAspectFlags.ColorBit; - MemorySize = memoryRequirements.Size; + var subresourceRange = new ImageSubresourceRange(AspectFlags, 0, MipLevels, 0, 1); - Api.BindImageMemory(_device, InternalHandle, _imageMemory, 0).ThrowOnError("Failed to bind image memory"); - var componentMapping = new ComponentMapping( - ComponentSwizzle.Identity, - ComponentSwizzle.Identity, - ComponentSwizzle.Identity, - ComponentSwizzle.Identity); + var imageViewCreateInfo = new ImageViewCreateInfo + { + SType = StructureType.ImageViewCreateInfo, + Image = InternalHandle, + ViewType = ImageViewType.Type2D, + Format = Format, + Components = componentMapping, + SubresourceRange = subresourceRange + }; - AspectFlags = ImageAspectFlags.ColorBit; + Api + .CreateImageView(_device, imageViewCreateInfo, null, out var imageView) + .ThrowOnError("Failed to create image view"); - var subresourceRange = new ImageSubresourceRange(AspectFlags, 0, MipLevels, 0, 1); + _imageView = imageView; - var imageViewCreateInfo = new ImageViewCreateInfo - { - SType = StructureType.ImageViewCreateInfo, - Image = InternalHandle, - ViewType = ImageViewType.Type2D, - Format = Format, - Components = componentMapping, - SubresourceRange = subresourceRange - }; + _currentLayout = ImageLayout.Undefined; - Api - .CreateImageView(_device, imageViewCreateInfo, null, out var imageView) - .ThrowOnError("Failed to create image view"); + TransitionLayout(ImageLayout.ColorAttachmentOptimal, AccessFlags.NoneKhr); + } + } - _imageView = imageView; - _currentLayout = ImageLayout.Undefined; + private unsafe IntPtr CreateDxgiSharedHandle() + { + using var dxgiResource = _d3dTexture2D.QueryInterface(); - TransitionLayout(ImageLayout.ColorAttachmentOptimal, AccessFlags.NoneKhr); + void* sharedHandle; + SilkMarshal.ThrowHResult(dxgiResource.CreateSharedHandle( + (SecurityAttributes*)null, + DXGI.SharedResourceRead | DXGI.SharedResourceWrite, + (char*)null, + &sharedHandle)); + + return (IntPtr)sharedHandle; } + public int ExportFd() { if (!Api.TryGetDeviceExtension(_instance, _device, out var ext)) @@ -198,29 +238,50 @@ public IntPtr ExportOpaqueNtHandle() return fd; } - public IPlatformHandle Export() + public unsafe IntPtr ExportIOSurface() + { + if (!Api.TryGetDeviceExtension(_instance, _device, out var ext)) + throw new InvalidOperationException(); + var surfaceExport = new ExportMetalIOSurfaceInfoEXT + { + SType = StructureType.ExportMetalIOSurfaceInfoExt, Image = InternalHandle + }; + var export = new ExportMetalObjectsInfoEXT() + { + SType = StructureType.ExportMetalObjectsInfoExt, PNext = &surfaceExport + }; + ext.ExportMetalObjects(_device, ref export); + if (surfaceExport.IoSurface == IntPtr.Zero) + throw new Exception("Unable to export IOSurfaceRef"); + return surfaceExport.IoSurface; + } + + public unsafe IPlatformHandle Export() { if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { - /*if (_d3dTexture2D != null) + if (_d3dTexture2D.Handle != null) { - using var dxgi = _d3dTexture2D!.QueryInterface(); return new PlatformHandle( - dxgi.CreateSharedHandle(null, SharedResourceFlags.Read | SharedResourceFlags.Write), + CreateDxgiSharedHandle(), KnownPlatformGraphicsExternalImageHandleTypes.D3D11TextureNtHandle); - }*/ + } return new PlatformHandle(ExportOpaqueNtHandle(), KnownPlatformGraphicsExternalImageHandleTypes.VulkanOpaqueNtHandle); } - else - return new PlatformHandle(new IntPtr(ExportFd()), - KnownPlatformGraphicsExternalImageHandleTypes.VulkanOpaquePosixFileDescriptor); + + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + return new PlatformHandle(ExportIOSurface(), + KnownPlatformGraphicsExternalImageHandleTypes.IOSurfaceRef); + + return new PlatformHandle(new IntPtr(ExportFd()), + KnownPlatformGraphicsExternalImageHandleTypes.VulkanOpaquePosixFileDescriptor); } public ImageTiling Tiling => ImageTiling.Optimal; - //public bool IsDirectXBacked => _d3dTexture2D != null; + public unsafe bool IsDirectXBacked => _d3dTexture2D.Handle != null; internal void TransitionLayout(CommandBuffer commandBuffer, ImageLayout fromLayout, AccessFlags fromAccessFlags, diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs index 98afc2c..8eb0809 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs @@ -9,6 +9,7 @@ using Drawie.RenderApi.Vulkan.Extensions; using DrawiEngine; using Silk.NET.Core.Native; +using Silk.NET.Direct3D11; using Silk.NET.Vulkan; using Silk.NET.Vulkan.Extensions.KHR; @@ -17,11 +18,11 @@ namespace Drawie.Interop.Avalonia.Vulkan.Vk; public class VulkanInteropContext : VulkanContext, IDrawieInteropContext { public VulkanCommandBufferPool Pool { get; private set; } + public ComPtr D3DDevice { get; private set; } private List requiredDeviceExtensions = new List(); private ICompositionGpuInterop gpuInterop; - private DescriptorPool descriptorPool; public VulkanInteropContext(ICompositionGpuInterop gpuInterop) { @@ -57,6 +58,19 @@ public override void Initialize(IVulkanContextInfo contextInfo) GpuInfo = PickPhysicalDevice(); CreateLogicalDevice(); CreatePool(); + CreateD3D11DeviceIfNeeded(); + } + + private unsafe void CreateD3D11DeviceIfNeeded() + { + var physicalDeviceIDProperties = GetPhysicalDeviceIDProperties(PhysicalDevice); + ComPtr d3dDevice = null; + if (physicalDeviceIDProperties.DeviceLuidvalid && + RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && + !gpuInterop.SupportedImageHandleTypes.Contains(KnownPlatformGraphicsExternalImageHandleTypes.VulkanOpaqueNtHandle) + ) + d3dDevice = D3DMemoryHelper.CreateDeviceByLuid( + MemoryMarshal.Read(new Span(physicalDeviceIDProperties.DeviceLuid, 8))); } private bool SetRequiredDeviceExtensions() @@ -77,6 +91,13 @@ private bool SetRequiredDeviceExtensions() requiredDeviceExtensions.Add("VK_KHR_dedicated_allocation"); requiredDeviceExtensions.Add("VK_KHR_get_memory_requirements2"); } + else if(RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + { + if (!gpuInterop.SupportedImageHandleTypes.Contains(KnownPlatformGraphicsExternalImageHandleTypes + .IOSurfaceRef)) + return false; + requiredDeviceExtensions.AddRange(["VK_EXT_metal_objects", "VK_KHR_timeline_semaphore"]); + } else { if (!gpuInterop.SupportedImageHandleTypes.Contains(KnownPlatformGraphicsExternalImageHandleTypes @@ -183,6 +204,23 @@ protected override unsafe bool IsDeviceSuitable(PhysicalDevice device) return true; } + private unsafe PhysicalDeviceIDProperties GetPhysicalDeviceIDProperties(PhysicalDevice device) + { + var physicalDeviceIDProperties = new PhysicalDeviceIDProperties() + { + SType = StructureType.PhysicalDeviceIDProperties + }; + + var physicalDeviceProperties2 = new PhysicalDeviceProperties2() + { + SType = StructureType.PhysicalDeviceProperties2, PNext = &physicalDeviceIDProperties + }; + + Api!.GetPhysicalDeviceProperties2(device, &physicalDeviceProperties2); + + return physicalDeviceIDProperties; + } + public override unsafe void Dispose() { Pool.Dispose(); diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanSemaphorePair.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanSemaphorePair.cs index 294edb9..d9e9ce0 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanSemaphorePair.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanSemaphorePair.cs @@ -9,10 +9,9 @@ namespace Drawie.Interop.Avalonia.Vulkan.Vk; public class VulkanSemaphorePair : IDisposable { - private readonly VulkanInteropContext _resources; + private readonly VulkanInteropContext _resources; - public unsafe VulkanSemaphorePair(VulkanInteropContext resources, - IReadOnlyList supportedHandleTypes, bool exportable) + public unsafe VulkanSemaphorePair(VulkanInteropContext resources, bool exportable) { _resources = resources; @@ -20,29 +19,26 @@ public unsafe VulkanSemaphorePair(VulkanInteropContext resources, { SType = StructureType.ExportSemaphoreCreateInfo, HandleTypes = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) - ? (supportedHandleTypes.Contains(KnownPlatformGraphicsExternalImageHandleTypes.D3D11TextureNtHandle) - && !supportedHandleTypes.Contains(KnownPlatformGraphicsExternalImageHandleTypes.VulkanOpaqueNtHandle) - ? ExternalSemaphoreHandleTypeFlags.D3D11FenceBit - : ExternalSemaphoreHandleTypeFlags.OpaqueWin32Bit) - : ExternalSemaphoreHandleTypeFlags.OpaqueFDBit + ? ExternalSemaphoreHandleTypeFlags.OpaqueWin32Bit + : ExternalSemaphoreHandleTypeFlags.OpaqueFDBit }; var semaphoreCreateInfo = new SemaphoreCreateInfo { - SType = StructureType.SemaphoreCreateInfo, - PNext = exportable ? &semaphoreExportInfo : null + SType = StructureType.SemaphoreCreateInfo, PNext = exportable ? &semaphoreExportInfo : null }; - resources.Api!.CreateSemaphore(resources.LogicalDevice.Device, semaphoreCreateInfo, null, out var semaphore).ThrowOnError("Failed to create semaphore"); + resources.Api.CreateSemaphore(resources.LogicalDevice.Device, in semaphoreCreateInfo, null, out var semaphore).ThrowOnError(); ImageAvailableSemaphore = semaphore; - resources.Api.CreateSemaphore(resources.LogicalDevice.Device, semaphoreCreateInfo, null, out semaphore).ThrowOnError("Failed to create semaphore"); + resources.Api.CreateSemaphore(resources.LogicalDevice.Device, in semaphoreCreateInfo, null, out semaphore).ThrowOnError(); RenderFinishedSemaphore = semaphore; } public int ExportFd(bool renderFinished) { - if (!_resources.Api!.TryGetDeviceExtension(_resources.Instance, _resources.LogicalDevice.Device, + if (!_resources.Api!.TryGetDeviceExtension(_resources.Instance, + _resources.LogicalDevice.Device, out var ext)) throw new InvalidOperationException(); var info = new SemaphoreGetFdInfoKHR() @@ -54,10 +50,11 @@ public int ExportFd(bool renderFinished) ext.GetSemaphoreF(_resources.LogicalDevice.Device, info, out var fd).ThrowOnError("Failed to export semaphore"); return fd; } - + public IntPtr ExportWin32(bool renderFinished) { - if (!_resources.Api!.TryGetDeviceExtension(_resources.Instance, _resources.LogicalDevice.Device, + if (!_resources.Api!.TryGetDeviceExtension(_resources.Instance, + _resources.LogicalDevice.Device, out var ext)) throw new InvalidOperationException(); var info = new SemaphoreGetWin32HandleInfoKHR() @@ -66,7 +63,8 @@ public IntPtr ExportWin32(bool renderFinished) Semaphore = renderFinished ? RenderFinishedSemaphore : ImageAvailableSemaphore, HandleType = ExternalSemaphoreHandleTypeFlags.OpaqueWin32Bit }; - ext.GetSemaphoreWin32Handle(_resources.LogicalDevice.Device, info, out var fd).ThrowOnError("Failed to export semaphore"); + ext.GetSemaphoreWin32Handle(_resources.LogicalDevice.Device, info, out var fd) + .ThrowOnError("Failed to export semaphore"); return fd; } @@ -86,5 +84,5 @@ public unsafe void Dispose() { _resources.Api!.DestroySemaphore(_resources.LogicalDevice.Device, ImageAvailableSemaphore, null); _resources.Api!.DestroySemaphore(_resources.LogicalDevice.Device, RenderFinishedSemaphore, null); - } + } } diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanSwapchain.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanSwapchain.cs index 08bd891..9f842ec 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanSwapchain.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanSwapchain.cs @@ -1,4 +1,5 @@ -using Avalonia; +using System.Runtime.InteropServices; +using Avalonia; using Avalonia.Platform; using Avalonia.Rendering.Composition; using Drawie.Interop.Avalonia.Core; @@ -38,11 +39,13 @@ public class VulkanSwapchainImage : ISwapchainImage private readonly CompositionDrawingSurface _target; private readonly VulkanImage _image; private readonly VulkanSemaphorePair _semaphorePair; - private ICompositionImportedGpuSemaphore? _availableSemaphore, _renderCompletedSemaphore; + private readonly VulkanTimelineSemaphore? _timelineSemaphore; + private ICompositionImportedGpuSemaphore? _availableSemaphore, _renderCompletedSemaphore, _importedTimelineSemaphore; private ICompositionImportedGpuImage? _importedImage; private Task? _lastPresent; public VulkanImage Image => _image; private bool _initial = true; + private ulong _timelineCounter; public VulkanSwapchainImage(VulkanInteropContext vk, PixelSize size, ICompositionGpuInterop interop, CompositionDrawingSurface target) @@ -51,8 +54,12 @@ public VulkanSwapchainImage(VulkanInteropContext vk, PixelSize size, ICompositio _interop = interop; _target = target; Size = size; - _image = new VulkanImage(vk, (uint)Format.R8G8B8A8Unorm, size, true, interop.SupportedImageHandleTypes); - _semaphorePair = new VulkanSemaphorePair(vk, interop.SupportedImageHandleTypes, true); + var format = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? Format.B8G8R8A8Unorm : Format.R8G8B8A8Unorm; + _image = new VulkanImage(vk, (uint)format, size, true, interop.SupportedImageHandleTypes); + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + _timelineSemaphore = new(vk); + else + _semaphorePair = new VulkanSemaphorePair(vk, true); } public async ValueTask DisposeAsync() @@ -68,6 +75,7 @@ public async ValueTask DisposeAsync() await _renderCompletedSemaphore.DisposeAsync(); _semaphorePair.Dispose(); + _timelineSemaphore?.Dispose(); _image.Dispose(); } @@ -84,13 +92,35 @@ public void BeginDraw() ImageLayout.Undefined, AccessFlags.None, ImageLayout.ColorAttachmentOptimal, AccessFlags.ColorAttachmentReadBit); - if (_initial) + if (_image.IsDirectXBacked) + buffer.Submit(null, null, null, null, + new VulkanCommandBufferPool.VulkanCommandBuffer.KeyedMutexSubmitInfo + { + AcquireKey = 0, DeviceMemory = _image.DeviceMemory + }); + else if (_timelineSemaphore != null) + { + unsafe + { + var wait = _timelineCounter; + var submitInfo = new TimelineSemaphoreSubmitInfo + { + PWaitSemaphoreValues = &wait, + WaitSemaphoreValueCount = 1, + SType = StructureType.TimelineSemaphoreSubmitInfo + }; + var waitSemaphores = new[] { _timelineSemaphore.Handle }; + + buffer.Submit(waitSemaphores, pNext: (IntPtr)(&submitInfo)); + } + } + else if (_initial) { _initial = false; buffer.Submit(); } else - buffer.Submit(new[] { _semaphorePair.ImageAvailableSemaphore }, + buffer.Submit(new[] { _semaphorePair!.ImageAvailableSemaphore }, new[] { PipelineStageFlags.AllGraphicsBit }); } @@ -101,22 +131,64 @@ public void Present() buffer.BeginRecording(); _image.TransitionLayout(buffer.InternalHandle, ImageLayout.TransferSrcOptimal, AccessFlags.TransferWriteBit); - buffer.Submit(null, null, new[] { _semaphorePair.RenderFinishedSemaphore }); + if (_image.IsDirectXBacked) + { + buffer.Submit(null, null, null, null, + new VulkanCommandBufferPool.VulkanCommandBuffer.KeyedMutexSubmitInfo + { + DeviceMemory = _image.DeviceMemory, ReleaseKey = 1 + }); + } + else if (_timelineSemaphore != null) + { + unsafe + { + var signal = _timelineCounter + 1; + var submitInfo = new TimelineSemaphoreSubmitInfo + { + PSignalSemaphoreValues = &signal, + SignalSemaphoreValueCount = 1, + SType = StructureType.TimelineSemaphoreSubmitInfo + }; + var signalSemaphores = new[] { _timelineSemaphore.Handle }; + + buffer.Submit(default, signalSemaphores: signalSemaphores, pNext: (IntPtr)(&submitInfo)); + } + } + else + buffer.Submit(null, null, new[] { _semaphorePair!.RenderFinishedSemaphore }); - _availableSemaphore ??= _interop.ImportSemaphore(_semaphorePair.Export(false)); + if (_timelineSemaphore != null) + { + _importedTimelineSemaphore ??= _interop.ImportSemaphore(_timelineSemaphore.Export()); + } + else if (!_image.IsDirectXBacked) + { + _availableSemaphore ??= _interop.ImportSemaphore(_semaphorePair!.Export(false)); - _renderCompletedSemaphore ??= _interop.ImportSemaphore(_semaphorePair.Export(true)); + _renderCompletedSemaphore ??= _interop.ImportSemaphore(_semaphorePair!.Export(true)); + } _importedImage ??= _interop.ImportImage(_image.Export(), new PlatformGraphicsExternalImageProperties { - Format = PlatformGraphicsExternalImageFormat.R8G8B8A8UNorm, + Format = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) + ? PlatformGraphicsExternalImageFormat.B8G8R8A8UNorm + : PlatformGraphicsExternalImageFormat.R8G8B8A8UNorm, Width = Size.Width, Height = Size.Height, MemorySize = _image.MemorySize }); - - _lastPresent = - _target.UpdateWithSemaphoresAsync(_importedImage, _renderCompletedSemaphore!, _availableSemaphore!); + if (_importedTimelineSemaphore != null) + { + _lastPresent = _target.UpdateWithTimelineSemaphoresAsync(_importedImage, + _importedTimelineSemaphore, _timelineCounter + 1, _importedTimelineSemaphore, _timelineCounter + 2); + _timelineCounter += 2; + } + else if (_image.IsDirectXBacked) + _lastPresent = _target.UpdateWithKeyedMutexAsync(_importedImage, 1, 0); + else + _lastPresent = + _target.UpdateWithSemaphoresAsync(_importedImage, _renderCompletedSemaphore!, _availableSemaphore!); } } diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanTimelineSemaphore.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanTimelineSemaphore.cs new file mode 100644 index 0000000..c045300 --- /dev/null +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanTimelineSemaphore.cs @@ -0,0 +1,74 @@ +using System.Runtime.InteropServices; +using Avalonia.Platform; +using Drawie.RenderApi.Vulkan; +using Drawie.RenderApi.Vulkan.Extensions; +using Silk.NET.Vulkan; +using Silk.NET.Vulkan.Extensions.EXT; +using Semaphore = Silk.NET.Vulkan.Semaphore; + +namespace Drawie.Interop.Avalonia.Vulkan.Vk; + +class VulkanTimelineSemaphore : IDisposable +{ + private VulkanContext _resources; + + public unsafe VulkanTimelineSemaphore(VulkanContext resources) + { + _resources = resources; + var mtlEvent = new ExportMetalObjectCreateInfoEXT + { + SType = StructureType.ExportMetalObjectCreateInfoExt, + ExportObjectType = ExportMetalObjectTypeFlagsEXT.SharedEventBitExt + }; + + var semaphoreTypeInfo = new SemaphoreTypeCreateInfoKHR() + { + SType = StructureType.SemaphoreTypeCreateInfo, + SemaphoreType = SemaphoreType.Timeline, + PNext = &mtlEvent + }; + + var semaphoreCreateInfo = new SemaphoreCreateInfo + { + SType = StructureType.SemaphoreCreateInfo, + PNext = &semaphoreTypeInfo, + }; + + resources.Api.CreateSemaphore(resources.LogicalDevice.Device, in semaphoreCreateInfo, null, out var semaphore).ThrowOnError(); + Handle = semaphore; + } + + public Semaphore Handle { get; } + public unsafe void Dispose() + { + _resources.Api.DestroySemaphore(_resources.LogicalDevice.Device, Handle, null); + } + + + public unsafe IntPtr ExportSharedEvent() + { + if (!_resources.Api.TryGetDeviceExtension(_resources.Instance, _resources.LogicalDevice.Device, out var ext)) + throw new InvalidOperationException(); + var eventExport = new ExportMetalSharedEventInfoEXT() + { + SType = StructureType.ExportMetalSharedEventInfoExt, + Semaphore = Handle, + }; + var export = new ExportMetalObjectsInfoEXT() + { + SType = StructureType.ExportMetalObjectsInfoExt, + PNext = &eventExport + }; + ext.ExportMetalObjects(_resources.LogicalDevice.Device, ref export); + if (eventExport.MtlSharedEvent == IntPtr.Zero) + throw new Exception("Unable to export IOSurfaceRef"); + return eventExport.MtlSharedEvent; + } + public IPlatformHandle Export() + { + if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) + return new PlatformHandle(ExportSharedEvent(), + KnownPlatformGraphicsExternalSemaphoreHandleTypes.MetalSharedEvent); + throw new PlatformNotSupportedException(); + } +} diff --git a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs index 7742bc1..f352fd0 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs @@ -74,13 +74,14 @@ protected unsafe void SetupInstance(IVulkanContextInfo contextInfo) ApplicationVersion = new Version32(1, 0, 0), PEngineName = (byte*)Marshal.StringToHGlobalAnsi("Drawie Engine"), EngineVersion = new Version32(1, 0, 0), - ApiVersion = Vk.Version12 + ApiVersion = Vk.Version11 }; InstanceCreateInfo createInfo = new() { SType = StructureType.InstanceCreateInfo, - PApplicationInfo = &appInfo + PApplicationInfo = &appInfo, + Flags = RuntimeInformation.IsOSPlatform(OSPlatform.OSX) ? InstanceCreateFlags.EnumeratePortabilityBitKhr : default }; var extensions = GetExtensions(contextInfo); @@ -131,6 +132,7 @@ protected unsafe void SetupDebugMessenger() protected unsafe GpuInfo PickPhysicalDevice() { var devices = Api!.GetPhysicalDevices(Instance); + List<(GpuInfo, PhysicalDevice)?> suitableDevices = new List<(GpuInfo, PhysicalDevice)?>(); foreach (var device in devices) { if (IsDeviceSuitable(device)) @@ -141,15 +143,26 @@ protected unsafe GpuInfo PickPhysicalDevice() if (deviceName == null) throw new VulkanException("Failed to get device name."); - GpuInfo gpuInfo = new(deviceName, VendorById(props.VendorID)); - PhysicalDevice = device; - return gpuInfo; + GpuInfo gpuInfo = new(deviceName, VendorById(props.VendorID), props.DeviceType == PhysicalDeviceType.DiscreteGpu); + suitableDevices.Add((gpuInfo, device)); } } + if(suitableDevices.Count > 0) + { + var selectedGpu = + suitableDevices.FirstOrDefault(x => x?.Item1.IsDiscreteGpu is true, null) ?? suitableDevices[0]; + PhysicalDevice = selectedGpu?.Item2 ?? default; + GpuInfo = selectedGpu?.Item1 ?? new GpuInfo("Unknown", "Unknown", false); + } + else + { + PhysicalDevice = default; + } + if (PhysicalDevice.Handle == 0) throw new VulkanException("Failed to find a suitable Vulkan GPU."); - return new GpuInfo("Unknown", "Unknown"); + return new GpuInfo("Unknown", "Unknown", false); } private string VendorById(uint vendorId) @@ -173,11 +186,6 @@ private string VendorById(uint vendorId) private unsafe string[] GetExtensions(IVulkanContextInfo contextInfo) { string[] contextExtensions = contextInfo.GetInstanceExtensions(); - if (EnableValidationLayers) - { - return contextExtensions.Append(ExtDebugUtils.ExtensionName).ToArray(); - } - return contextExtensions; } diff --git a/src/Drawie.RenderApi/GpuInfo.cs b/src/Drawie.RenderApi/GpuInfo.cs index 36bbe36..4888e61 100644 --- a/src/Drawie.RenderApi/GpuInfo.cs +++ b/src/Drawie.RenderApi/GpuInfo.cs @@ -1,9 +1,10 @@ namespace Drawie.RenderApi; -public class GpuInfo(string deviceName, string vendor) +public class GpuInfo(string deviceName, string vendor, bool? isDiscreteGpu = null) { public string Name { get; } = deviceName; public string Vendor { get; } = vendor; + public bool? IsDiscreteGpu { get; set; } = isDiscreteGpu; public override string ToString() { From fb6e9ef60187de208b4756595266e68154fac1ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 27 Aug 2026 10:48:44 +0200 Subject: [PATCH 44/55] Update VulkanContext.cs --- src/Drawie.RenderApi.Vulkan/VulkanContext.cs | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs index f352fd0..a86b8bf 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs @@ -153,11 +153,7 @@ protected unsafe GpuInfo PickPhysicalDevice() var selectedGpu = suitableDevices.FirstOrDefault(x => x?.Item1.IsDiscreteGpu is true, null) ?? suitableDevices[0]; PhysicalDevice = selectedGpu?.Item2 ?? default; - GpuInfo = selectedGpu?.Item1 ?? new GpuInfo("Unknown", "Unknown", false); - } - else - { - PhysicalDevice = default; + return selectedGpu?.Item1 ?? new GpuInfo("Unknown", "Unknown", false); } if (PhysicalDevice.Handle == 0) throw new VulkanException("Failed to find a suitable Vulkan GPU."); From 9c95bff7d684e023bebda89f1f2c8adc7091644b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 27 Aug 2026 12:16:56 +0200 Subject: [PATCH 45/55] Update Directory.Build.props --- src/Directory.Build.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 25d665d..b4c5d8f 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,6 +1,6 @@ - [12.1.1-cibuild0004448-alpha] + [12.1.1-cibuild0004449-alpha] true true From 7bf459f7e72a6fb9e546a36f1d95b08bfa502d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 27 Aug 2026 13:47:45 +0200 Subject: [PATCH 46/55] Global sampler and native handle fixes --- .../Implementations/SKObjectImplementation.cs | 6 +- .../SkiaSurfaceImplementation.cs | 23 +++++--- src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 58 ++++--------------- .../Buffers/VulkanTexture.cs | 18 +++--- .../VulkanGraphicsDevice.cs | 8 ++- 5 files changed, 47 insertions(+), 66 deletions(-) diff --git a/src/Drawie.Backend.Skia/Implementations/SKObjectImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SKObjectImplementation.cs index 23d2e33..a02fac1 100644 --- a/src/Drawie.Backend.Skia/Implementations/SKObjectImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SKObjectImplementation.cs @@ -1,5 +1,4 @@ using System.Collections.Concurrent; -using System.Diagnostics; using SkiaSharp; namespace Drawie.Skia.Implementations @@ -8,7 +7,7 @@ public abstract class SkObjectImplementation where T : SKObject { public int Count => ManagedInstances.Count; private readonly ConcurrentDictionary ManagedInstances = new ConcurrentDictionary(); - private ulong handleCounter = 1; + private nuint handleCounter = 1; #if DRAWIE_TRACE protected static Dictionary sources = new(); @@ -36,7 +35,8 @@ internal IntPtr AddManagedInstance(T instance) protected IntPtr GetNextHandle() { - return (IntPtr)Interlocked.Increment(ref handleCounter); + handleCounter++; + return (IntPtr)handleCounter; } public bool TryGetInstance(IntPtr objPtr, out T? instance) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index cd8919c..3512bac 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -17,7 +17,9 @@ public class SkiaSurfaceImplementation : SkObjectImplementation, ISur private readonly SkiaPixmapImplementation _pixmapImplementation; private readonly SkiaCanvasImplementation _canvasImplementation; private readonly SkiaPaintImplementation _paintImplementation; - private Dictionary nativeSurfaceInfos = new Dictionary(); + + private Dictionary nativeSurfaceInfos = + new Dictionary(); internal GRContext? GrContext { get; set; } internal IGraphicsDevice GraphicsDevice { get; set; } @@ -154,7 +156,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int out var framebufferInfo); if (surface == null) return null; - nativeSurfaceInfos[surface.Handle] = framebufferInfo; + nativeSurfaceInfos[surface] = framebufferInfo; return surface; } @@ -213,10 +215,10 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int new GRGlFramebufferInfo(textureId, SKColorType.Rgba8888.ToGlSizedFormat()); GRBackendRenderTarget backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, 1, 0, grGlFramebufferInfo); - + surface = SKSurface.Create(GrContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888); - + fbInfo = new SkiaNativeSurfaceInfo(backendRenderTarget, grGlFramebufferInfo); } @@ -228,8 +230,13 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int public void Dispose(DrawingSurface drawingSurface) { + var instance = this.GetInstanceOrDefault(drawingSurface.ObjectPointer); + if (instance != null) + { + nativeSurfaceInfos.Remove(instance, out var framebufferInfo); + } + UnmanageAndDispose(drawingSurface.ObjectPointer); - nativeSurfaceInfos.Remove(drawingSurface.ObjectPointer, out var framebufferInfo); } public object GetNativeSurface(IntPtr objectPointer) @@ -291,12 +298,12 @@ public RectD GetLocalClipBounds(IntPtr objectPointer) public INativeSurfaceInfo? GetNativeSurfaceInfo(IntPtr objectPointer) { - return nativeSurfaceInfos.GetValueOrDefault(objectPointer); + return nativeSurfaceInfos.GetValueOrDefault(this[objectPointer]); } - public void AddManagedFramebuffer(IntPtr nativeHandle, INativeSurfaceInfo fbInfo) + public void AddManagedFramebuffer(SKSurface nativeHandle, INativeSurfaceInfo fbInfo) { nativeSurfaceInfos.Add(nativeHandle, fbInfo); } } -} \ No newline at end of file +} diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index df9621e..3120275 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -32,7 +32,7 @@ private set _grContext = value; } } - + public IGraphicsDevice GraphicsDevice { get; private set; } public IPathEffectImplementation PathEffectImplementation { get; set; } @@ -125,7 +125,8 @@ public SkiaDrawingBackend() SkiaCanvasImplementation canvasImpl = new SkiaCanvasImplementation(paintImpl, imgImpl, bitmapImpl, pathImpl, fontImpl, meshImplementation); - SurfaceImplementation = new SkiaSurfaceImplementation(SkiaGraphicsContext, SurfaceOrigin.BottomLeft, pixmapImpl, canvasImpl, paintImpl); + SurfaceImplementation = new SkiaSurfaceImplementation(SkiaGraphicsContext, SurfaceOrigin.BottomLeft, + pixmapImpl, canvasImpl, paintImpl); canvasImpl.SetSurfaceImplementation(SurfaceImplementation); imgImpl.SetSurfaceImplementation(SurfaceImplementation); @@ -145,7 +146,7 @@ public void Setup(IRenderApi renderApi) ActiveRenderApi = renderApi; GraphicsDevice = renderApi.GraphicsDevice; SurfaceImplementation.GraphicsDevice = renderApi.GraphicsDevice; - + if (renderApi is IVulkanRenderApi vulkanRenderApi) { SetupVulkan(vulkanRenderApi.VulkanContext); @@ -181,10 +182,8 @@ private void SetupOpenGl(IOpenGlContext openGlContext) private void SetupAngleOpenGl(IOpenGlContext openGlContext) { GRGlInterface glInterface = GRGlInterface.Create(openGlContext.GetGlInterface); - SkiaGraphicsContext = GRContext.CreateGl(glInterface, new GRContextOptions() - { - AvoidStencilBuffers = true - }); + SkiaGraphicsContext = + GRContext.CreateGl(glInterface, new GRContextOptions() { AvoidStencilBuffers = true }); SurfaceImplementation.GrContext = SkiaGraphicsContext; } @@ -205,48 +204,15 @@ private void SetupWebGl(IWebGlContext webGlContext) public DrawingSurface? CreateRenderSurface(VecI size, ITexture renderTexture, SurfaceOrigin surfaceOrigin) { - var native = SurfaceImplementation.CreateFromNativeTexture(renderTexture, size, surfaceOrigin, true, out var fbInfo); + var native = + SurfaceImplementation.CreateFromNativeTexture(renderTexture, size, surfaceOrigin, true, out var fbInfo); if (native == null) { - var imageInfo = new GRVkImageInfo() - { - CurrentQueueFamily = texture.QueueFamily, - Format = texture.ImageFormat, - Image = texture.ImageHandle, - ImageLayout = texture.Layout, - ImageTiling = texture.Tiling, - ImageUsageFlags = texture.UsageFlags, - LevelCount = 1, - SampleCount = 1, - Protected = false, - SharingMode = texture.TargetSharingMode, - }; - - var surface = SKSurface.Create(GraphicsContext, new GRBackendRenderTarget(size.X, size.Y, imageInfo), - (GRSurfaceOrigin)surfaceOrigin, SKColorType.Rgba8888, - new SKSurfaceProperties(SKPixelGeometry.RgbHorizontal)); - - return DrawingSurface.FromNative(surface); - } - else if (renderTexture is IWebGlTexture or IOpenGlTexture) - { - uint textureId = renderTexture switch - { - IWebGlTexture wgl => wgl.TextureId, - IOpenGlTexture ogl => ogl.TextureId, - _ => throw new ArgumentException("Unsupported texture type.") - }; - - GRBackendRenderTarget backendRenderTarget = new GRBackendRenderTarget(size.X, size.Y, 1, 0, - new GRGlFramebufferInfo(textureId, SKColorType.Rgba8888.ToGlSizedFormat())); - - var surface = SKSurface.Create(GraphicsContext, backendRenderTarget, (GRSurfaceOrigin)surfaceOrigin, - SKColorType.Rgba8888); - - return DrawingSurface.FromNative(surface); + return null; } - SurfaceImplementation.AddManagedFramebuffer(native.Handle, fbInfo); + SurfaceImplementation.AddManagedInstance(native); + SurfaceImplementation.AddManagedFramebuffer(native, fbInfo); return DrawingSurface.FromNative(native); } @@ -354,4 +320,4 @@ private void DisposeImpl(SkObjectImplementation impl) where T : SKObject impl.DisposeAll(); } } -} \ No newline at end of file +} diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index 72a7711..85a23c4 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -52,7 +52,7 @@ public uint Attachments public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CommandPool commandPool, - Queue graphicsQueue, uint queueFamily, TextureDesc desc) + Queue graphicsQueue, uint queueFamily, TextureDesc desc, Sampler? sampler = null) { Vk = vk; LogicalDevice = logicalDevice; @@ -124,7 +124,14 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, msaaResolvedColorAttachment.TransitionLayout(ImageLayout.ColorAttachmentOptimal); } - CreateSampler(); + if (sampler != null) + { + this.sampler = sampler.Value; + } + else + { + CreateSampler(); + } } @@ -200,10 +207,7 @@ private unsafe void CopyBufferToImage(Buffer buffer, Image image, uint width, ui BufferImageHeight = 0, ImageSubresource = new ImageSubresourceLayers() { - AspectMask = ImageAspectFlags.ColorBit, - MipLevel = 0, - BaseArrayLayer = 0, - LayerCount = 1 + AspectMask = ImageAspectFlags.ColorBit, MipLevel = 0, BaseArrayLayer = 0, LayerCount = 1 }, ImageOffset = new Offset3D(0, 0, 0), ImageExtent = new Extent3D(width, height, 1) @@ -219,4 +223,4 @@ public unsafe void Dispose() ColorAttachment.Dispose(); DepthAttachment?.Dispose(); } -} \ No newline at end of file +} diff --git a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs index 9c36860..d327f65 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs @@ -20,6 +20,7 @@ public sealed class VulkanGraphicsDevice : IGraphicsDevice private readonly VulkanContext context; private readonly CommandPool commandPool; private VulkanPipeline? pipeline; + private VulkanSampler globalSampler; private Dictionary bufferCache = new Dictionary(); @@ -33,6 +34,7 @@ public VulkanGraphicsDevice(VulkanContext context) this.context = context; commandPool = CreateCommandPool(); + globalSampler = new VulkanSampler(context, new SamplerDesc()); } private unsafe CommandPool CreateCommandPool() @@ -76,7 +78,7 @@ public IAbstractionTexture CreateTexture(TextureDesc desc) commandPool, context.GraphicsQueue, context.GraphicsQueueFamilyIndex, - desc); + desc, globalSampler.VkSampler); context.AddManagedTexture(vkTex, vkTex.ImageHandle); disposables.Add(vkTex); @@ -146,6 +148,8 @@ public unsafe void Dispose() uniformBuffer.Value.Dispose(); } + globalSampler?.Dispose(); + context.Api!.DestroyCommandPool( context.LogicalDevice.Device, commandPool, @@ -230,4 +234,4 @@ private unsafe void CopyBuffer(BufferObject srcBuffer, BufferObject dstBuffer, u BufferCopy copyRegion = new() { Size = size }; context.Api!.CmdCopyBuffer(session.CommandBuffer, srcBuffer.VkBuffer, dstBuffer.VkBuffer, 1, copyRegion); } -} \ No newline at end of file +} From e50a712fb20e7a6d63659f7db374b6b1f9717419 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Krysi=C5=84ski?= Date: Thu, 27 Aug 2026 15:05:21 +0200 Subject: [PATCH 47/55] Sampler fixes and spirv 1.3 --- src/Drawie.Backend.Vertie/Core/Camera.cs | 12 +++++++- src/Drawie.Backend.Vertie/Core/Scene.cs | 29 +++++++++++++++++-- .../Buffers/VulkanTexture.cs | 7 ++++- .../VulkanCommandList.cs | 5 +++- .../Compilation/ShaderCompiler.cs | 3 +- 5 files changed, 50 insertions(+), 6 deletions(-) diff --git a/src/Drawie.Backend.Vertie/Core/Camera.cs b/src/Drawie.Backend.Vertie/Core/Camera.cs index 2f1b4e4..319ffa9 100644 --- a/src/Drawie.Backend.Vertie/Core/Camera.cs +++ b/src/Drawie.Backend.Vertie/Core/Camera.cs @@ -63,4 +63,14 @@ public void SetDirection(float xOffset, float yOffset) Right = Vector3.Normalize(Vector3.Cross(Forward, Vector3.UnitY)); Up = Vector3.Normalize(Vector3.Cross(Right, cameraDirection)); } -} \ No newline at end of file + + public void LookAt(Vector3 target) + { + Forward = Vector3.Normalize(target - Position); + Right = Vector3.Normalize(Vector3.Cross(Forward, Vector3.UnitY)); + Up = Vector3.Normalize(Vector3.Cross(Right, Forward)); + + Yaw = MathF.Atan2(Forward.Z, Forward.X) * (180f / MathF.PI); + Pitch = MathF.Asin(Forward.Y) * (180f / MathF.PI); + } +} diff --git a/src/Drawie.Backend.Vertie/Core/Scene.cs b/src/Drawie.Backend.Vertie/Core/Scene.cs index a6e91aa..9622c75 100644 --- a/src/Drawie.Backend.Vertie/Core/Scene.cs +++ b/src/Drawie.Backend.Vertie/Core/Scene.cs @@ -10,6 +10,31 @@ public class Scene { public List Meshes { get; } = new List(); + + public Scene(string path, Texture texture) + { + AssimpContext ctx = new AssimpContext(); + var scene = ctx.ImportFile(path, PostProcessPreset.TargetRealTimeMaximumQuality); + if (!scene.HasMeshes) return; + + Rendering.Material[] materials = new Material[scene.Meshes.Count]; + for (var index = 0; index < scene.Materials.Count; index++) + { + var sceneMaterial = scene.Materials[index]; + materials[index] = new Material(sceneMaterial.Name, + [BuiltInShaders.BasicVertexShader, BuiltInShaders.UnlitFragmentShader]); + } + + foreach (var mesh in scene.Meshes) + { + var vertices = mesh!.Vertices.Select(x => new Vector3(x.X, x.Y, x.Z)).ToArray(); + var indicies = mesh.GetUnsignedIndices().ToArray(); + var normals = mesh.Normals.Select(x => new Vector3(x.X, x.Y, x.Z)).ToArray(); + var texCoords = mesh.TextureCoordinateChannels[0].Select(x => new Vector2(x.X, x.Y)).ToArray(); + Meshes.Add(new Mesh(vertices, indicies, normals, texCoords, materials[mesh.MaterialIndex])); + } + } + public Scene(string path, string assetsRoot = "") { AssimpContext ctx = new AssimpContext(); @@ -32,7 +57,7 @@ public Scene(string path, string assetsRoot = "") if(!File.Exists(texPath)) continue; } - materials[index].AddTexture(NativeTexture.Load(texPath)); + materials[index].AddTexture(Texture.Load(texPath)); } foreach (var mesh in scene.Meshes) @@ -44,4 +69,4 @@ public Scene(string path, string assetsRoot = "") Meshes.Add(new Mesh(vertices, indicies, normals, texCoords, materials[mesh.MaterialIndex])); } } -} \ No newline at end of file +} diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index 85a23c4..84f902c 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -49,6 +49,7 @@ public uint Attachments private VulkanImageAttachment? depthAttachment; private VulkanImageAttachment? msaaResolvedColorAttachment; private Sampler sampler; + private bool isExternalSampler = false; public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, CommandPool commandPool, @@ -127,6 +128,7 @@ public VulkanTexture(Vk vk, Device logicalDevice, PhysicalDevice physicalDevice, if (sampler != null) { this.sampler = sampler.Value; + isExternalSampler = true; } else { @@ -219,7 +221,10 @@ private unsafe void CopyBufferToImage(Buffer buffer, Image image, uint width, ui public unsafe void Dispose() { Disposing?.Invoke(); - Vk.DestroySampler(LogicalDevice, sampler, null); + if (!isExternalSampler) + { + Vk.DestroySampler(LogicalDevice, sampler, null); + } ColorAttachment.Dispose(); DepthAttachment?.Dispose(); } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 49387fd..1bc208b 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -122,6 +122,9 @@ public override void UpdateUniforms(List blocks, List Date: Thu, 27 Aug 2026 16:52:53 +0200 Subject: [PATCH 48/55] Some target changes and disposal wip --- .../Surfaces/DrawingSurface.cs | 6 +++++- .../Implementations/SkiaSurfaceImplementation.cs | 11 ++++++++++- .../Helpers/TextureFramebufferExtensions.cs | 13 ++++++++++++- .../OpenGlInteropContext.cs | 16 +++++++++++++++- .../Vk/VulkanInteropContext.cs | 9 ++++++--- src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs | 7 ++++++- src/Drawie.RenderApi.OpenGl/OpenGlContext.cs | 11 +++++++++++ src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs | 8 +++++++- src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs | 7 +++++++ .../VulkanGraphicsDevice.cs | 5 +++++ .../Abstraction/CommandRecording/CommandList.cs | 4 +++- .../Abstraction/CommandRecording/ICommandList.cs | 3 ++- .../Abstraction/IGraphicsDevice.cs | 3 ++- src/Drawie.RenderApi/IOpenGlContext.cs | 2 ++ src/Drawie.RenderApi/IVkTexture.cs | 2 +- 15 files changed, 94 insertions(+), 13 deletions(-) diff --git a/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs b/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs index ec410bd..2c0ea51 100644 --- a/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs +++ b/src/Drawie.Backend.Core/Surfaces/DrawingSurface.cs @@ -2,10 +2,11 @@ using Drawie.Backend.Core.Surfaces.ImageData; using Drawie.Backend.Core.Surfaces.PaintImpl; using Drawie.Numerics; +using Drawie.RenderApi.Abstraction.RenderTargets; namespace Drawie.Backend.Core.Surfaces { - public class DrawingSurface : NativeObject, IPixelsMap + public class DrawingSurface : NativeObject, IPixelsMap, IRenderTarget { public override object Native => DrawingBackendApi.Current.SurfaceImplementation.GetNativeSurface(ObjectPointer); @@ -18,6 +19,9 @@ public class DrawingSurface : NativeObject, IPixelsMap public RectD LocalClipBounds => DrawingBackendApi.Current.SurfaceImplementation.GetLocalClipBounds(ObjectPointer); + VecI IRenderTarget.Size => DeviceClipBounds.Size; + public ulong SurfaceId => DrawingBackendApi.Current.SurfaceImplementation.GetNativeSurfaceInfo(ObjectPointer).SurfaceId; + public bool IsDisposed => isDisposed || Canvas.IsDisposed; public event SurfaceChangedEventHandler? Changed; diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index 3512bac..7ee7214 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -26,6 +26,8 @@ public class SkiaSurfaceImplementation : SkObjectImplementation, ISur private readonly SurfaceOrigin defaultSurfaceOrigin; + private HashSet surfacesInUse = new HashSet(); + public SkiaSurfaceImplementation(GRContext context, SurfaceOrigin surfaceOrigin, SkiaPixmapImplementation pixmapImplementation, SkiaCanvasImplementation canvasImplementation, SkiaPaintImplementation paintImplementation) @@ -231,12 +233,19 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int public void Dispose(DrawingSurface drawingSurface) { var instance = this.GetInstanceOrDefault(drawingSurface.ObjectPointer); + ulong? surfaceId = null; if (instance != null) { - nativeSurfaceInfos.Remove(instance, out var framebufferInfo); + nativeSurfaceInfos.Remove(instance, out var surfaceInfo); + surfaceId = surfaceInfo?.SurfaceId; } UnmanageAndDispose(drawingSurface.ObjectPointer); + if (surfaceId != null) + { + throw new NotImplementedException("Implement a proper lifetime management for GPU-backed surfaces."); + GraphicsDevice.DisposeTexture(surfaceId.Value); + } } public object GetNativeSurface(IntPtr objectPointer) diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 0d14ffc..72c8606 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -1,4 +1,5 @@ using Drawie.Backend.Core.Bridge; +using Drawie.Backend.Core.Surfaces; using Drawie.Backend.Vertie.Core; using Drawie.Backend.Vertie.Rendering; using Drawie.Numerics; @@ -33,6 +34,15 @@ public static void DrawScene(this TextureFramebuffer fb, Scene scene, Camera cam DrawScene(fb, scene, camera, device, options); } + public static void DrawScene(this DrawingSurface fb, Scene scene, Camera camera, + RenderOptions options = default) + { + IGraphicsDevice device = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice; + + fb.Canvas?.Flush(); + DrawScene(fb, scene, camera, device, options); + } + public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, IGraphicsDevice device, RenderOptions options) @@ -125,6 +135,7 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, var recordedRenderPass = cmdList.EndRenderPass(fb); device.Submit(recordedRenderPass); + DrawingBackendApi.Current.ResetContext(); } @@ -143,4 +154,4 @@ private static IShaderProgram GetOrCreateShaderProgram(IGraphicsDevice graphicsD return program; } -} \ No newline at end of file +} diff --git a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlInteropContext.cs b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlInteropContext.cs index ed852e5..0e77dae 100644 --- a/src/Drawie.Interop.Avalonia.OpenGl/OpenGlInteropContext.cs +++ b/src/Drawie.Interop.Avalonia.OpenGl/OpenGlInteropContext.cs @@ -15,6 +15,8 @@ public class OpenGlInteropContext : IOpenGlContext, IDrawieInteropContext public IGlContext Context { get; } + private Dictionary managedTextures = new Dictionary(); + public OpenGlInteropContext(IGlContext context, bool isGlViaAngle) { Context = context; @@ -40,7 +42,19 @@ public RenderApiResources CreateResources(CompositionDrawingSurface surface, ICo public void AddManagedTexture(IOpenGlTexture texture) { - // TODO + managedTextures[texture.TextureId] = texture; + } + + public IOpenGlTexture? GetManagedTexture(ulong textureId) + { + managedTextures.TryGetValue(textureId, out var texture); + return texture; + + } + + public void RemoveManagedTexture(ulong textureId) + { + managedTextures.Remove(textureId); } public GpuDiagnostics GetGpuDiagnostics() diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs index a86c477..b9e064a 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs @@ -5,6 +5,7 @@ using Drawie.Interop.Avalonia.Core; using Drawie.RenderApi; using Drawie.RenderApi.Vulkan; +using Drawie.RenderApi.Vulkan.Buffers; using Drawie.RenderApi.Vulkan.ContextObjects; using Drawie.RenderApi.Vulkan.Extensions; using DrawiEngine; @@ -38,15 +39,17 @@ public override void Initialize(IVulkanContextInfo contextInfo) Api = Silk.NET.Vulkan.Vk.GetApi(); - TryAddValidationLayer("VK_LAYER_KHRONOS_validation"); deviceExtensions.Add("VK_KHR_get_physical_device_properties2"); deviceExtensions.Add("VK_KHR_external_memory_capabilities"); deviceExtensions.Add("VK_KHR_external_semaphore_capabilities"); //TODO if it crashes with vertie, try adding VK_KHR_dynamic_rendering - - if(EnableValidationLayers) + + if (EnableValidationLayers) + { + TryAddValidationLayer("VK_LAYER_KHRONOS_validation"); deviceExtensions.Add("VK_EXT_debug_utils"); + } SetupInstance(contextInfo); SetupDebugMessenger(); diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs index 6eb1ebe..1979691 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlCommandList.cs @@ -52,6 +52,11 @@ public override void UpdateUniforms(List blocks, List { Api.BindVertexArray(bufferGroup.Handle); }); @@ -102,4 +107,4 @@ public override RecordedRenderPass EndRenderPass() RecordInstruction(() => Api.BindFramebuffer(FramebufferTarget.Framebuffer, originalFb)); return ToRenderPass(); } -} \ No newline at end of file +} diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs b/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs index 4ceee40..e45f42e 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlContext.cs @@ -12,6 +12,17 @@ public void AddManagedTexture(IOpenGlTexture texture) Textures.Add(texture.TextureId, texture); } + public IOpenGlTexture? GetManagedTexture(ulong textureId) + { + Textures.TryGetValue(textureId, out var texture); + return texture; + } + + public void RemoveManagedTexture(ulong textureId) + { + Textures.Remove(textureId); + } + public OpenGlContext(Func getGlInterface, bool isGlViaAngle) { this.getGlInterface = getGlInterface; diff --git a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs index a04a2fc..0444e4d 100644 --- a/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs +++ b/src/Drawie.RenderApi.OpenGl/OpenGlDevice.cs @@ -122,6 +122,12 @@ public IBufferGroup CreateBufferGroup() return new OpenGlVertexArrayObject(Api); } + public void DisposeTexture(ulong textureHandle) + { + (context.GetManagedTexture(textureHandle) as IDisposable)?.Dispose(); + context.RemoveManagedTexture(textureHandle); + } + private Silk.NET.OpenGL.ShaderType ToOpenGlShaderType(ShaderType shaderType) { @@ -140,4 +146,4 @@ public void Dispose() { } -} \ No newline at end of file +} diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index 1bc208b..ae3dbfc 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -120,6 +120,13 @@ public override void UpdateUniforms(List blocks, List blocks, List textures, List samplers); -} \ No newline at end of file + + public abstract void RestoreTexture(PreparedTexture preparedTextureValue); +} diff --git a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs index 8413c87..81bc423 100644 --- a/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs +++ b/src/Drawie.RenderApi/Abstraction/CommandRecording/ICommandList.cs @@ -18,4 +18,5 @@ public interface ICommandList void BindPipeline(); PreparedTexture PrepareTexture(ITexture texture); void UpdateUniforms(List blocks, List textures, List samplers); -} \ No newline at end of file + void RestoreTexture(PreparedTexture preparedTextureValue); +} diff --git a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs index 50e6064..21b223b 100644 --- a/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs +++ b/src/Drawie.RenderApi/Abstraction/IGraphicsDevice.cs @@ -20,4 +20,5 @@ public interface IGraphicsDevice : IDisposable IShaderProgram CreateShaderProgram(ShaderProgramDesc shaderProgramDesc); IRenderTarget CreateRenderTarget(TextureDesc textureDesc); IBufferGroup CreateBufferGroup(); -} \ No newline at end of file + void DisposeTexture(ulong textureHandle); +} diff --git a/src/Drawie.RenderApi/IOpenGlContext.cs b/src/Drawie.RenderApi/IOpenGlContext.cs index 3e14355..8296d0b 100644 --- a/src/Drawie.RenderApi/IOpenGlContext.cs +++ b/src/Drawie.RenderApi/IOpenGlContext.cs @@ -5,4 +5,6 @@ public interface IOpenGlContext public IntPtr GetGlInterface(string name); public bool IsGlViaAngle { get; } void AddManagedTexture(IOpenGlTexture texture); + IOpenGlTexture? GetManagedTexture(ulong textureId); + void RemoveManagedTexture(ulong textureId); } diff --git a/src/Drawie.RenderApi/IVkTexture.cs b/src/Drawie.RenderApi/IVkTexture.cs index 56367a5..0694363 100644 --- a/src/Drawie.RenderApi/IVkTexture.cs +++ b/src/Drawie.RenderApi/IVkTexture.cs @@ -14,4 +14,4 @@ public interface IVkTexture : ITexture public void MakeReadOnly(); public void MakeWriteable(); event Action Disposing; -} \ No newline at end of file +} From 33ebcafbfe372513078eb9698afd97aa817592a3 Mon Sep 17 00:00:00 2001 From: flabbet Date: Fri, 28 Aug 2026 20:32:41 +0200 Subject: [PATCH 49/55] fixes and slnx --- src/Drawie.Host.Glfw/GlfwHost.cs | 4 +- src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs | 3 +- src/Drawie.RenderApi.Vulkan/VulkanContext.cs | 11 +- .../VulkanWindowContext.cs | 1 + src/Drawie.sln | 243 ------------------ src/Drawie.sln.DotSettings.user | 107 +------- src/Drawie.slnx | 47 ++++ 7 files changed, 63 insertions(+), 353 deletions(-) delete mode 100644 src/Drawie.sln create mode 100644 src/Drawie.slnx diff --git a/src/Drawie.Host.Glfw/GlfwHost.cs b/src/Drawie.Host.Glfw/GlfwHost.cs index ff28b18..8c47240 100644 --- a/src/Drawie.Host.Glfw/GlfwHost.cs +++ b/src/Drawie.Host.Glfw/GlfwHost.cs @@ -69,6 +69,7 @@ public bool ShowOnTop private SKSurface? surface; private Texture renderTexture; + private ITexture nativeTexture; private bool initialized; private List layers = new List(); @@ -201,7 +202,8 @@ private void RenderApiOnFramebufferResized() private void CreateRenderTarget(VecI size, ITexture nativeRenderTexture) { - renderTexture = new Texture(NativeTexture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, + nativeTexture = nativeRenderTexture; + renderTexture = new Texture(Texture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, nativeRenderTexture, RenderApi is IVulkanHostViewRenderApi ? SurfaceOrigin.TopLeft : SurfaceOrigin.BottomLeft))); } diff --git a/src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs b/src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs index 94ba780..82987db 100644 --- a/src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs +++ b/src/Drawie.Layer.UI.MiniUi/MiniUILayer.cs @@ -1,4 +1,5 @@ -using Drawie.Backend.Core.Bridge; +using Drawie.Backend.Core; +using Drawie.Backend.Core.Bridge; using Drawie.Backend.Core.Surfaces; using Drawie.Host; using Drawie.Numerics; diff --git a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs index 2b03cd2..0abd025 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanContext.cs @@ -96,10 +96,10 @@ protected unsafe void SetupInstance(IVulkanContextInfo contextInfo) ApplicationInfo appInfo = new() { SType = StructureType.ApplicationInfo, - PApplicationName = (byte*)Marshal.StringToHGlobalAnsi("Drawie"), + PApplicationName = (byte*)Marshal.StringToHGlobalAnsi("Drawie App"), ApplicationVersion = new Version32(1, 0, 0), - PEngineName = (byte*)Marshal.StringToHGlobalAnsi("Drawie Engine"), - EngineVersion = new Version32(1, 0, 0), + PEngineName = (byte*)Marshal.StringToHGlobalAnsi("Drawie"), + EngineVersion = new Version32(2, 0, 0), ApiVersion = Vk.Version11 }; @@ -208,6 +208,11 @@ private string VendorById(uint vendorId) private unsafe string[] GetExtensions(IVulkanContextInfo contextInfo) { string[] contextExtensions = contextInfo.GetInstanceExtensions(); + if (EnableValidationLayers && !contextExtensions.Contains(ExtDebugUtils.ExtensionName)) + { + contextExtensions = [.. contextExtensions, ExtDebugUtils.ExtensionName]; + } + return contextExtensions; } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs index a004400..55a625f 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs @@ -4,6 +4,7 @@ using Drawie.RenderApi.Vulkan.Helpers; using Silk.NET.Core.Native; using Silk.NET.Vulkan; +using Silk.NET.Vulkan.Extensions.EXT; using Silk.NET.Vulkan.Extensions.KHR; namespace Drawie.RenderApi.Vulkan; diff --git a/src/Drawie.sln b/src/Drawie.sln deleted file mode 100644 index 33aacc9..0000000 --- a/src/Drawie.sln +++ /dev/null @@ -1,243 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Backend.Skia", "Drawie.Backend.Skia\Drawie.Backend.Skia.csproj", "{F549B8B4-B40C-4E79-B9D9-272FF9C648F0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Backend.Core", "Drawie.Backend.Core\Drawie.Backend.Core.csproj", "{860067DF-D78D-4459-BD5F-96AEC70C281B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawieSample.Desktop", "DrawieSample.Desktop\DrawieSample.Desktop.csproj", "{645AF54D-D58F-492E-A2A9-12F86EA8C00A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Numerics", "Drawie.Numerics\Drawie.Numerics.csproj", "{2C84A8E2-9DAF-43CF-AFCB-030922AEA412}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawiEngine", "DrawiEngine\DrawiEngine.csproj", "{C91E2EF2-BF05-49E6-91A0-53B847B38FC0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Host", "Drawie.Host\Drawie.Host.csproj", "{503FADEB-B803-4B27-BE37-DDAA37C5CDA9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Host.Glfw", "Drawie.Host.Glfw\Drawie.Host.Glfw.csproj", "{D4927AD1-8A67-4358-B867-EA19771D47C8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi", "Drawie.RenderApi\Drawie.RenderApi.csproj", "{D6C22861-1F82-4032-8108-06744D3DB33D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi.Vulkan", "Drawie.RenderApi.Vulkan\Drawie.RenderApi.Vulkan.csproj", "{C66A9ACB-904D-42B4-8FFE-6ED36E855A11}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawieSample.Browser", "DrawieSample.Browser\DrawieSample.Browser.csproj", "{16A45076-AAE6-497E-BBA6-E8CA974E19CD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "_Samples", "_Samples", "{239DB1B4-E66F-444A-87DA-B19775F40974}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Host.Browser", "Drawie.Host.Browser\Drawie.Host.Browser.csproj", "{14896E27-47BA-48E9-81D1-612582C8FF5B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "RenderApis", "RenderApis", "{9A805C39-3EC4-478F-B7F2-5D54F9F35CB8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Backends", "Backends", "{BE35DF1E-91E8-4F16-841D-70EDDE31CC9F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Hosts", "Hosts", "{823F63C1-3DD7-4DE7-A41E-B4E0159FBCB4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.JSInterop", "Drawie.JSInterop\Drawie.JSInterop.csproj", "{6B57DDAF-FE9A-496C-B290-D019004B6B11}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawiEngine.Browser", "DrawiEngine.Browser\DrawiEngine.Browser.csproj", "{6E4896DE-D6A3-433F-B350-2B35D0320F53}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DrawiEngine.Desktop", "DrawiEngine.Desktop\DrawiEngine.Desktop.csproj", "{88620A08-0FC3-4A60-835C-2FB516141375}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.AvaloniaInterop", "Drawie.AvaloniaInterop\Drawie.AvaloniaInterop.csproj", "{0CF0D692-9EEC-43C2-9064-E59609A134E6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Interops", "Interops", "{844D01F5-5C74-4635-9DBB-12303702D4A6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Interop.Avalonia.Vulkan", "Drawie.Interop.Avalonia.Vulkan\Drawie.Interop.Avalonia.Vulkan.csproj", "{43F3D61C-5FA8-4F24-ABDC-186E287EC882}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi.WebGl", "Drawie.RenderApi.WebGl\Drawie.RenderApi.WebGl.csproj", "{B5E4E80D-C248-4565-90F9-B3ECDF450EC6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi.Web.Common", "Drawie.RenderApi.Web.Common\Drawie.RenderApi.Web.Common.csproj", "{9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Interop.Avalonia.Core", "Drawie.Interop.Avalonia.Core\Drawie.Interop.Avalonia.Core.csproj", "{D10009DC-D4F1-4A50-A36D-BF38ABBCC148}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Interop.Avalonia", "Drawie.Interop.Avalonia\Drawie.Interop.Avalonia.csproj", "{88F7130B-C1B0-4383-8503-CB7A3960C6A4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Interop.Avalonia.OpenGl", "Drawie.Interop.Avalonia.OpenGl\Drawie.Interop.Avalonia.OpenGl.csproj", "{EF944C77-D86B-4D6B-B88E-FE06131C70D7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Tests", "Drawie.Tests\Drawie.Tests.csproj", "{5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.RenderApi.OpenGl", "Drawie.RenderApi.OpenGl\Drawie.RenderApi.OpenGl.csproj", "{40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Rendering", "Drawie.Rendering\Drawie.Rendering.csproj", "{2D889347-CF94-4D67-AC4A-742AD1F1201D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie2Sample", "Drawie2Sample\Drawie2Sample.csproj", "{A9DB4D66-CD25-40E9-8F72-C5341D6C6564}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Layers", "Layers", "{8F709A50-C8C2-46FC-8355-A96701FFC359}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.UI.ImGui", "Drawie.Layer.UI.ImGui\Drawie.Layer.UI.ImGui.csproj", "{7CACCC0C-044C-4ACE-B018-518F8D223D4A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Backend.Vertie", "Drawie.Backend.Vertie\Drawie.Backend.Vertie.csproj", "{154B8B31-8819-4996-B8F7-C6DE0BDC87A7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ShaderPlayground", "ShaderPlayground\ShaderPlayground.csproj", "{EB963B58-ECBA-400D-887E-F7598C7F7894}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Compilation", "Compilation", "{0D635DD1-AF77-4B5B-9649-2F61A4884D1E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.ShaderCompiler", "Drawie.ShaderCompiler\Drawie.ShaderCompiler.csproj", "{41CC13E2-3398-4669-8B8B-23721EB35754}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Shaders.Common", "Drawie.Shaders.Common\Drawie.Shaders.Common.csproj", "{4F39C0D8-4DB8-40F1-AAB3-269450765937}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Drawie.Layer.UI.MiniUi", "Drawie.Layer.UI.MiniUi\Drawie.Layer.UI.MiniUi.csproj", "{D576C583-C8D7-4485-B960-CA297969C1EB}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {F549B8B4-B40C-4E79-B9D9-272FF9C648F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F549B8B4-B40C-4E79-B9D9-272FF9C648F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F549B8B4-B40C-4E79-B9D9-272FF9C648F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F549B8B4-B40C-4E79-B9D9-272FF9C648F0}.Release|Any CPU.Build.0 = Release|Any CPU - {860067DF-D78D-4459-BD5F-96AEC70C281B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {860067DF-D78D-4459-BD5F-96AEC70C281B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {860067DF-D78D-4459-BD5F-96AEC70C281B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {860067DF-D78D-4459-BD5F-96AEC70C281B}.Release|Any CPU.Build.0 = Release|Any CPU - {645AF54D-D58F-492E-A2A9-12F86EA8C00A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {645AF54D-D58F-492E-A2A9-12F86EA8C00A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {645AF54D-D58F-492E-A2A9-12F86EA8C00A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {645AF54D-D58F-492E-A2A9-12F86EA8C00A}.Release|Any CPU.Build.0 = Release|Any CPU - {2C84A8E2-9DAF-43CF-AFCB-030922AEA412}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C84A8E2-9DAF-43CF-AFCB-030922AEA412}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C84A8E2-9DAF-43CF-AFCB-030922AEA412}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C84A8E2-9DAF-43CF-AFCB-030922AEA412}.Release|Any CPU.Build.0 = Release|Any CPU - {C91E2EF2-BF05-49E6-91A0-53B847B38FC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C91E2EF2-BF05-49E6-91A0-53B847B38FC0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C91E2EF2-BF05-49E6-91A0-53B847B38FC0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C91E2EF2-BF05-49E6-91A0-53B847B38FC0}.Release|Any CPU.Build.0 = Release|Any CPU - {503FADEB-B803-4B27-BE37-DDAA37C5CDA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {503FADEB-B803-4B27-BE37-DDAA37C5CDA9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {503FADEB-B803-4B27-BE37-DDAA37C5CDA9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {503FADEB-B803-4B27-BE37-DDAA37C5CDA9}.Release|Any CPU.Build.0 = Release|Any CPU - {D4927AD1-8A67-4358-B867-EA19771D47C8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4927AD1-8A67-4358-B867-EA19771D47C8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4927AD1-8A67-4358-B867-EA19771D47C8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4927AD1-8A67-4358-B867-EA19771D47C8}.Release|Any CPU.Build.0 = Release|Any CPU - {D6C22861-1F82-4032-8108-06744D3DB33D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D6C22861-1F82-4032-8108-06744D3DB33D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D6C22861-1F82-4032-8108-06744D3DB33D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D6C22861-1F82-4032-8108-06744D3DB33D}.Release|Any CPU.Build.0 = Release|Any CPU - {C66A9ACB-904D-42B4-8FFE-6ED36E855A11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C66A9ACB-904D-42B4-8FFE-6ED36E855A11}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C66A9ACB-904D-42B4-8FFE-6ED36E855A11}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C66A9ACB-904D-42B4-8FFE-6ED36E855A11}.Release|Any CPU.Build.0 = Release|Any CPU - {16A45076-AAE6-497E-BBA6-E8CA974E19CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16A45076-AAE6-497E-BBA6-E8CA974E19CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16A45076-AAE6-497E-BBA6-E8CA974E19CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16A45076-AAE6-497E-BBA6-E8CA974E19CD}.Release|Any CPU.Build.0 = Release|Any CPU - {14896E27-47BA-48E9-81D1-612582C8FF5B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {14896E27-47BA-48E9-81D1-612582C8FF5B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14896E27-47BA-48E9-81D1-612582C8FF5B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {14896E27-47BA-48E9-81D1-612582C8FF5B}.Release|Any CPU.Build.0 = Release|Any CPU - {6B57DDAF-FE9A-496C-B290-D019004B6B11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6B57DDAF-FE9A-496C-B290-D019004B6B11}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6B57DDAF-FE9A-496C-B290-D019004B6B11}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6B57DDAF-FE9A-496C-B290-D019004B6B11}.Release|Any CPU.Build.0 = Release|Any CPU - {6E4896DE-D6A3-433F-B350-2B35D0320F53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E4896DE-D6A3-433F-B350-2B35D0320F53}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E4896DE-D6A3-433F-B350-2B35D0320F53}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E4896DE-D6A3-433F-B350-2B35D0320F53}.Release|Any CPU.Build.0 = Release|Any CPU - {88620A08-0FC3-4A60-835C-2FB516141375}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88620A08-0FC3-4A60-835C-2FB516141375}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88620A08-0FC3-4A60-835C-2FB516141375}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88620A08-0FC3-4A60-835C-2FB516141375}.Release|Any CPU.Build.0 = Release|Any CPU - {0CF0D692-9EEC-43C2-9064-E59609A134E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0CF0D692-9EEC-43C2-9064-E59609A134E6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0CF0D692-9EEC-43C2-9064-E59609A134E6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0CF0D692-9EEC-43C2-9064-E59609A134E6}.Release|Any CPU.Build.0 = Release|Any CPU - {43F3D61C-5FA8-4F24-ABDC-186E287EC882}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {43F3D61C-5FA8-4F24-ABDC-186E287EC882}.Debug|Any CPU.Build.0 = Debug|Any CPU - {43F3D61C-5FA8-4F24-ABDC-186E287EC882}.Release|Any CPU.ActiveCfg = Release|Any CPU - {43F3D61C-5FA8-4F24-ABDC-186E287EC882}.Release|Any CPU.Build.0 = Release|Any CPU - {B5E4E80D-C248-4565-90F9-B3ECDF450EC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B5E4E80D-C248-4565-90F9-B3ECDF450EC6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B5E4E80D-C248-4565-90F9-B3ECDF450EC6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B5E4E80D-C248-4565-90F9-B3ECDF450EC6}.Release|Any CPU.Build.0 = Release|Any CPU - {9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04}.Release|Any CPU.Build.0 = Release|Any CPU - {D10009DC-D4F1-4A50-A36D-BF38ABBCC148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D10009DC-D4F1-4A50-A36D-BF38ABBCC148}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D10009DC-D4F1-4A50-A36D-BF38ABBCC148}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D10009DC-D4F1-4A50-A36D-BF38ABBCC148}.Release|Any CPU.Build.0 = Release|Any CPU - {88F7130B-C1B0-4383-8503-CB7A3960C6A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88F7130B-C1B0-4383-8503-CB7A3960C6A4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88F7130B-C1B0-4383-8503-CB7A3960C6A4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88F7130B-C1B0-4383-8503-CB7A3960C6A4}.Release|Any CPU.Build.0 = Release|Any CPU - {EF944C77-D86B-4D6B-B88E-FE06131C70D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EF944C77-D86B-4D6B-B88E-FE06131C70D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EF944C77-D86B-4D6B-B88E-FE06131C70D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EF944C77-D86B-4D6B-B88E-FE06131C70D7}.Release|Any CPU.Build.0 = Release|Any CPU - {5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6}.Release|Any CPU.Build.0 = Release|Any CPU - {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}.Debug|Any CPU.Build.0 = Debug|Any CPU - {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}.Release|Any CPU.ActiveCfg = Release|Any CPU - {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98}.Release|Any CPU.Build.0 = Release|Any CPU - {2D889347-CF94-4D67-AC4A-742AD1F1201D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D889347-CF94-4D67-AC4A-742AD1F1201D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D889347-CF94-4D67-AC4A-742AD1F1201D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D889347-CF94-4D67-AC4A-742AD1F1201D}.Release|Any CPU.Build.0 = Release|Any CPU - {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A9DB4D66-CD25-40E9-8F72-C5341D6C6564}.Release|Any CPU.Build.0 = Release|Any CPU - {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CACCC0C-044C-4ACE-B018-518F8D223D4A}.Release|Any CPU.Build.0 = Release|Any CPU - {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {154B8B31-8819-4996-B8F7-C6DE0BDC87A7}.Release|Any CPU.Build.0 = Release|Any CPU - {EB963B58-ECBA-400D-887E-F7598C7F7894}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB963B58-ECBA-400D-887E-F7598C7F7894}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB963B58-ECBA-400D-887E-F7598C7F7894}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB963B58-ECBA-400D-887E-F7598C7F7894}.Release|Any CPU.Build.0 = Release|Any CPU - {41CC13E2-3398-4669-8B8B-23721EB35754}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {41CC13E2-3398-4669-8B8B-23721EB35754}.Debug|Any CPU.Build.0 = Debug|Any CPU - {41CC13E2-3398-4669-8B8B-23721EB35754}.Release|Any CPU.ActiveCfg = Release|Any CPU - {41CC13E2-3398-4669-8B8B-23721EB35754}.Release|Any CPU.Build.0 = Release|Any CPU - {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4F39C0D8-4DB8-40F1-AAB3-269450765937}.Release|Any CPU.Build.0 = Release|Any CPU - {D576C583-C8D7-4485-B960-CA297969C1EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D576C583-C8D7-4485-B960-CA297969C1EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D576C583-C8D7-4485-B960-CA297969C1EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D576C583-C8D7-4485-B960-CA297969C1EB}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {645AF54D-D58F-492E-A2A9-12F86EA8C00A} = {239DB1B4-E66F-444A-87DA-B19775F40974} - {16A45076-AAE6-497E-BBA6-E8CA974E19CD} = {239DB1B4-E66F-444A-87DA-B19775F40974} - {D6C22861-1F82-4032-8108-06744D3DB33D} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} - {C66A9ACB-904D-42B4-8FFE-6ED36E855A11} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} - {860067DF-D78D-4459-BD5F-96AEC70C281B} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} - {F549B8B4-B40C-4E79-B9D9-272FF9C648F0} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} - {503FADEB-B803-4B27-BE37-DDAA37C5CDA9} = {823F63C1-3DD7-4DE7-A41E-B4E0159FBCB4} - {14896E27-47BA-48E9-81D1-612582C8FF5B} = {823F63C1-3DD7-4DE7-A41E-B4E0159FBCB4} - {D4927AD1-8A67-4358-B867-EA19771D47C8} = {823F63C1-3DD7-4DE7-A41E-B4E0159FBCB4} - {0CF0D692-9EEC-43C2-9064-E59609A134E6} = {239DB1B4-E66F-444A-87DA-B19775F40974} - {43F3D61C-5FA8-4F24-ABDC-186E287EC882} = {844D01F5-5C74-4635-9DBB-12303702D4A6} - {B5E4E80D-C248-4565-90F9-B3ECDF450EC6} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} - {9ADAF199-8AEA-4831-B8D3-8FC33A2F4F04} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} - {D10009DC-D4F1-4A50-A36D-BF38ABBCC148} = {844D01F5-5C74-4635-9DBB-12303702D4A6} - {88F7130B-C1B0-4383-8503-CB7A3960C6A4} = {844D01F5-5C74-4635-9DBB-12303702D4A6} - {EF944C77-D86B-4D6B-B88E-FE06131C70D7} = {844D01F5-5C74-4635-9DBB-12303702D4A6} - {40CFA9D6-EAFA-4B5B-80FE-6122342B0D98} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} - {2D889347-CF94-4D67-AC4A-742AD1F1201D} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} - {A9DB4D66-CD25-40E9-8F72-C5341D6C6564} = {239DB1B4-E66F-444A-87DA-B19775F40974} - {7CACCC0C-044C-4ACE-B018-518F8D223D4A} = {8F709A50-C8C2-46FC-8355-A96701FFC359} - {154B8B31-8819-4996-B8F7-C6DE0BDC87A7} = {BE35DF1E-91E8-4F16-841D-70EDDE31CC9F} - {EB963B58-ECBA-400D-887E-F7598C7F7894} = {239DB1B4-E66F-444A-87DA-B19775F40974} - {41CC13E2-3398-4669-8B8B-23721EB35754} = {0D635DD1-AF77-4B5B-9649-2F61A4884D1E} - {4F39C0D8-4DB8-40F1-AAB3-269450765937} = {9A805C39-3EC4-478F-B7F2-5D54F9F35CB8} - {D576C583-C8D7-4485-B960-CA297969C1EB} = {8F709A50-C8C2-46FC-8355-A96701FFC359} - EndGlobalSection -EndGlobal diff --git a/src/Drawie.sln.DotSettings.user b/src/Drawie.sln.DotSettings.user index 1f49dd6..743c8d7 100644 --- a/src/Drawie.sln.DotSettings.user +++ b/src/Drawie.sln.DotSettings.user @@ -1,106 +1,3 @@  - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - ForceIncluded - <AssemblyExplorer> - <PhysicalFolder Path="C:\Users\flubb\.nuget\packages\silk.net.shaderc.native\2.21.0" Loaded="True" /> -</AssemblyExplorer> - /home/flabbet/.dotnet/sdk/10.0.101/MSBuild.dll - /home/flabbet/.dotnet/dotnet - <SessionState ContinuousTestingMode="0" IsActive="True" Name="TestThatDrawingBackendHasGraphicsContext" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> - <TestAncestor> - <TestId>xUnit::5222843B-3E7F-4AF9-9394-4BDBC2D2ABD6::net10.0::Drawie.Tests.SkiaDrawingBackendTests</TestId> - </TestAncestor> -</SessionState> - - - - - - - - - - - - - - - - - - - - - - - True - True \ No newline at end of file + ForceIncluded + ForceIncluded \ No newline at end of file diff --git a/src/Drawie.slnx b/src/Drawie.slnx new file mode 100644 index 0000000..e0aeb40 --- /dev/null +++ b/src/Drawie.slnx @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b18ea0abcdefa4f322bc645109ae05472f0ad18c Mon Sep 17 00:00:00 2001 From: flabbet Date: Fri, 28 Aug 2026 21:10:58 +0200 Subject: [PATCH 50/55] damn, sneaky one --- src/Drawie.Host.Glfw/GlfwHost.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Drawie.Host.Glfw/GlfwHost.cs b/src/Drawie.Host.Glfw/GlfwHost.cs index 8c47240..3f913cf 100644 --- a/src/Drawie.Host.Glfw/GlfwHost.cs +++ b/src/Drawie.Host.Glfw/GlfwHost.cs @@ -203,9 +203,9 @@ private void RenderApiOnFramebufferResized() private void CreateRenderTarget(VecI size, ITexture nativeRenderTexture) { nativeTexture = nativeRenderTexture; - renderTexture = new Texture(Texture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, + renderTexture =Texture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, nativeRenderTexture, - RenderApi is IVulkanHostViewRenderApi ? SurfaceOrigin.TopLeft : SurfaceOrigin.BottomLeft))); + RenderApi is IVulkanHostViewRenderApi ? SurfaceOrigin.TopLeft : SurfaceOrigin.BottomLeft)); } private void WindowOnFramebufferResize(Vector2D newSize) From 41a6b0f8612beaad45b21c345fb764da9f499e39 Mon Sep 17 00:00:00 2001 From: flabbet Date: Fri, 28 Aug 2026 21:11:37 +0200 Subject: [PATCH 51/55] Fixed very sneaky bug --- src/Drawie.Host.Glfw/GlfwHost.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Drawie.Host.Glfw/GlfwHost.cs b/src/Drawie.Host.Glfw/GlfwHost.cs index 3f913cf..64c6ad1 100644 --- a/src/Drawie.Host.Glfw/GlfwHost.cs +++ b/src/Drawie.Host.Glfw/GlfwHost.cs @@ -203,7 +203,7 @@ private void RenderApiOnFramebufferResized() private void CreateRenderTarget(VecI size, ITexture nativeRenderTexture) { nativeTexture = nativeRenderTexture; - renderTexture =Texture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, + renderTexture = Texture.FromExisting(DrawingBackendApi.Current.CreateRenderSurface(size, nativeRenderTexture, RenderApi is IVulkanHostViewRenderApi ? SurfaceOrigin.TopLeft : SurfaceOrigin.BottomLeft)); } From af8d789de0aa86841eaea1d88513686fb9ba491d Mon Sep 17 00:00:00 2001 From: flabbet Date: Fri, 28 Aug 2026 21:50:36 +0200 Subject: [PATCH 52/55] Doesn't crash on dispose (on linux at least) --- .../Implementations/SkiaSurfaceImplementation.cs | 4 +++- src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index 7ee7214..0977a93 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -240,10 +240,12 @@ public void Dispose(DrawingSurface drawingSurface) surfaceId = surfaceInfo?.SurfaceId; } + // TODO: Maybe queue for disposal after a global flush + add texture type variations, so some are managed by skia and some have native textures + instance.Flush(true, true); + UnmanageAndDispose(drawingSurface.ObjectPointer); if (surfaceId != null) { - throw new NotImplementedException("Implement a proper lifetime management for GPU-backed surfaces."); GraphicsDevice.DisposeTexture(surfaceId.Value); } } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs index fbcba39..e75278c 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs @@ -143,7 +143,11 @@ public IBufferGroup CreateBufferGroup() public void DisposeTexture(ulong textureHandle) { - (context.ManagedTextures[textureHandle] as IDisposable)?.Dispose(); + if (context.ManagedTextures.TryGetValue(textureHandle, out var texture)) + { + (texture as IDisposable)?.Dispose(); + context.RemoveManagedTexture(textureHandle); + } } public unsafe void Dispose() From 1265e78c4b5e268706b47036772f44181a49305d Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 29 Aug 2026 13:55:54 +0200 Subject: [PATCH 53/55] Fix MSAA on Vulkan --- src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 1 - .../Helpers/TextureFramebufferExtensions.cs | 4 ++-- .../Vk/VulkanInteropContext.cs | 2 +- src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs | 1 + src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs | 7 ++++--- src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs | 2 -- src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs | 3 ++- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index 3120275..23fc9ff 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -235,7 +235,6 @@ private void SetupVulkan(IVulkanContext vulkanContext) public void Flush() { SkiaGraphicsContext?.Flush(); - SkiaGraphicsContext?.Submit(); } public void ResetContext() diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 72c8606..70491ab 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -57,7 +57,7 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, Height = fb.Size.Y, Format = TextureFormat.RGBA8_Unorm, Depth = DepthFormat.Depth24Stencil8, - Samples = 1 + Samples = 4 }); } @@ -75,7 +75,7 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, Rasterizer = new RasterizerDesc() { RenderMode = options.RenderMode, - Samples = 1 + Samples = 4 }, ShaderProgram = program, Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), diff --git a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs index b9e064a..2904a2e 100644 --- a/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs +++ b/src/Drawie.Interop.Avalonia.Vulkan/Vk/VulkanInteropContext.cs @@ -138,7 +138,7 @@ protected override unsafe void CreateLogicalDevice() priorities[j] = 1.0f; } - var features = new PhysicalDeviceFeatures() { SamplerAnisotropy = false }; + var features = new PhysicalDeviceFeatures() { SamplerAnisotropy = false, FillModeNonSolid = true }; var queueCreateInfo = new DeviceQueueCreateInfo() { diff --git a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs index 84f902c..cc03ec3 100644 --- a/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs +++ b/src/Drawie.RenderApi.Vulkan/Buffers/VulkanTexture.cs @@ -227,5 +227,6 @@ public unsafe void Dispose() } ColorAttachment.Dispose(); DepthAttachment?.Dispose(); + MsaaResolvedColorAttachment?.Dispose(); } } diff --git a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs index ae3dbfc..47ebfc3 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanCommandList.cs @@ -389,7 +389,7 @@ private unsafe void BeginRenderPass(VulkanRenderTarget target) ClearValue clearMsaaResolved = new() { - Color = new ClearColorValue() { Float32_0 = 0, Float32_1 = 0, Float32_2 = 0, Float32_3 = 1 } + Color = new ClearColorValue() { Float32_0 = 1, Float32_1 = 1, Float32_2 = 1, Float32_3 = 1 } }; ClearValue* clearValues = stackalloc ClearValue[(int)target.Texture.Attachments]; @@ -510,7 +510,8 @@ private void Blit( VulkanTexture source, VulkanTexture destination) { - source.ColorAttachment.TransitionLayout(ImageLayout.TransferSrcOptimal, commandBuffer); + var sourceAttachment = source.MsaaResolvedColorAttachment ?? source.ColorAttachment; + sourceAttachment.TransitionLayout(ImageLayout.TransferSrcOptimal, commandBuffer); destination.ColorAttachment.TransitionLayout(ImageLayout.TransferDstOptimal, commandBuffer); ImageBlit region = new() @@ -547,7 +548,7 @@ private void Blit( context.Api!.CmdBlitImage( commandBuffer, - source.VkImage, + sourceAttachment.Image, ImageLayout.TransferSrcOptimal, destination.VkImage, ImageLayout.TransferDstOptimal, diff --git a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs index e75278c..db24c64 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanGraphicsDevice.cs @@ -87,8 +87,6 @@ public IAbstractionTexture CreateTexture(TextureDesc desc) public IPipeline CreatePipeline(PipelineDesc desc) { - context.Api!.DeviceWaitIdle(context.LogicalDevice.Device); - if (pipeline == null || !pipeline.Description.Equals(desc)) { if (pipeline != null) diff --git a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs index 55a625f..03213ca 100644 --- a/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs +++ b/src/Drawie.RenderApi.Vulkan/VulkanWindowContext.cs @@ -76,7 +76,8 @@ protected override unsafe void CreateLogicalDevice() PhysicalDeviceFeatures deviceFeatures = new() { - SamplerAnisotropy = false + SamplerAnisotropy = false, + FillModeNonSolid = true }; DeviceCreateInfo createInfo = new() From 6572dffcccec423d837061c9c833e183442ac905 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 29 Aug 2026 13:58:47 +0200 Subject: [PATCH 54/55] MSaa samples option --- src/Drawie.Backend.Vertie/Core/RenderOptions.cs | 10 ++++++++++ .../Helpers/TextureFramebufferExtensions.cs | 4 ++-- src/Drawie2Sample/Drawie2SampleApp.cs | 2 +- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/Drawie.Backend.Vertie/Core/RenderOptions.cs b/src/Drawie.Backend.Vertie/Core/RenderOptions.cs index eacd8ec..a61f63e 100644 --- a/src/Drawie.Backend.Vertie/Core/RenderOptions.cs +++ b/src/Drawie.Backend.Vertie/Core/RenderOptions.cs @@ -3,4 +3,14 @@ namespace Drawie.Backend.Vertie.Core; public struct RenderOptions { public RenderMode RenderMode { get; set; } + public MsaaSamples MsaaSamples { get; set; } +} + +public enum MsaaSamples +{ + None = 0, + X2 = 2, + X4 = 4, + X8 = 8, + X16 = 16, } \ No newline at end of file diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index 70491ab..b66008b 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -57,7 +57,7 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, Height = fb.Size.Y, Format = TextureFormat.RGBA8_Unorm, Depth = DepthFormat.Depth24Stencil8, - Samples = 4 + Samples = (int)options.MsaaSamples }); } @@ -75,7 +75,7 @@ public static void DrawScene(IRenderTarget fb, Scene scene, Camera camera, Rasterizer = new RasterizerDesc() { RenderMode = options.RenderMode, - Samples = 4 + Samples = (int)options.MsaaSamples }, ShaderProgram = program, Viewport = new RectI(0, 0, fb.Size.X, fb.Size.Y), diff --git a/src/Drawie2Sample/Drawie2SampleApp.cs b/src/Drawie2Sample/Drawie2SampleApp.cs index 4357fca..3c1f28c 100644 --- a/src/Drawie2Sample/Drawie2SampleApp.cs +++ b/src/Drawie2Sample/Drawie2SampleApp.cs @@ -29,7 +29,7 @@ public class Drawie2SampleApp : DrawieApp "Wireframe", }; - private RenderOptions renderOptions = new RenderOptions(); + private RenderOptions renderOptions = new RenderOptions() { MsaaSamples = MsaaSamples.X4 }; public override IHost CreateMainWindow() { From 0007089a27e76ad1b3d49098808f523ef011df39 Mon Sep 17 00:00:00 2001 From: flabbet Date: Sat, 29 Aug 2026 15:35:12 +0200 Subject: [PATCH 55/55] Auto externally accessible textures --- .../Operations/ISurfaceImplementation.cs | 1 + src/Drawie.Backend.Core/Texture.cs | 13 +++- .../SkiaSurfaceImplementation.cs | 76 +++++++++++++------ src/Drawie.Backend.Skia/SkiaDrawingBackend.cs | 5 +- .../Helpers/TextureFramebufferExtensions.cs | 10 +++ src/Drawie.Host.Glfw/GlfwHost.cs | 2 + .../ILazyExternallyAccessibleTexture.cs | 6 ++ src/Drawie.Rendering/TextureFramebuffer.cs | 2 - 8 files changed, 86 insertions(+), 29 deletions(-) create mode 100644 src/Drawie.RenderApi/Abstraction/Textures/ILazyExternallyAccessibleTexture.cs diff --git a/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs b/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs index 8774bff..49dcfd4 100644 --- a/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs +++ b/src/Drawie.Backend.Core/Bridge/Operations/ISurfaceImplementation.cs @@ -22,5 +22,6 @@ public interface ISurfaceImplementation public void Unmanage(DrawingSurface surface); public RectD GetLocalClipBounds(IntPtr objectPointer); INativeSurfaceInfo? GetNativeSurfaceInfo(IntPtr objectPointer); + INativeSurfaceInfo? ToExternallyAccessibleSurface(IntPtr objectPointer); } diff --git a/src/Drawie.Backend.Core/Texture.cs b/src/Drawie.Backend.Core/Texture.cs index 25da237..caf21fb 100644 --- a/src/Drawie.Backend.Core/Texture.cs +++ b/src/Drawie.Backend.Core/Texture.cs @@ -8,7 +8,7 @@ namespace Drawie.Backend.Core; -public class Texture : IDisposable, ICloneable, IPixelsMap, INativeSurfaceInfo, ITexture +public class Texture : IDisposable, ICloneable, IPixelsMap, INativeSurfaceInfo, ILazyExternallyAccessibleTexture { public VecI Size { get; } public DrawingSurface DrawingSurface { get; private set; } @@ -410,8 +410,17 @@ public void SaveToDesktop() surf.SaveToDesktop(); } #endif + + public void EnsureExternallyAccessible() + { + if (DrawingBackendApi.Current.SurfaceImplementation.GetNativeSurfaceInfo(DrawingSurface.ObjectPointer) == null) + { + DrawingBackendApi.Current.SurfaceImplementation.ToExternallyAccessibleSurface(DrawingSurface.ObjectPointer); + } + } public ulong SurfaceId => DrawingBackendApi.Current.SurfaceImplementation.GetNativeSurfaceInfo(DrawingSurface.ObjectPointer) - ?.SurfaceId ?? throw new Exception("Framebuffer info not available."); + ?.SurfaceId ?? DrawingBackendApi.Current.SurfaceImplementation + .ToExternallyAccessibleSurface(DrawingSurface.ObjectPointer)?.SurfaceId ?? throw new Exception("Unable to get native texture info."); } diff --git a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs index 0977a93..a04961d 100644 --- a/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs +++ b/src/Drawie.Backend.Skia/Implementations/SkiaSurfaceImplementation.cs @@ -21,14 +21,14 @@ public class SkiaSurfaceImplementation : SkObjectImplementation, ISur private Dictionary nativeSurfaceInfos = new Dictionary(); + private HashSet nativeSurfacesToDispose = new HashSet(); + internal GRContext? GrContext { get; set; } internal IGraphicsDevice GraphicsDevice { get; set; } private readonly SurfaceOrigin defaultSurfaceOrigin; - private HashSet surfacesInUse = new HashSet(); - - public SkiaSurfaceImplementation(GRContext context, SurfaceOrigin surfaceOrigin, + public SkiaSurfaceImplementation(SkiaDrawingBackend backendApi, GRContext context, SurfaceOrigin surfaceOrigin, SkiaPixmapImplementation pixmapImplementation, SkiaCanvasImplementation canvasImplementation, SkiaPaintImplementation paintImplementation) { @@ -37,6 +37,15 @@ public SkiaSurfaceImplementation(GRContext context, SurfaceOrigin surfaceOrigin, _paintImplementation = paintImplementation; GrContext = context; defaultSurfaceOrigin = surfaceOrigin; + backendApi.AfterFlush += () => + { + foreach (var toDispose in nativeSurfacesToDispose) + { + GraphicsDevice.DisposeTexture(toDispose); + } + + nativeSurfacesToDispose.Clear(); + }; } public Pixmap PeekPixels(DrawingSurface drawingSurface) @@ -78,7 +87,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int { if (isGpuBacked) { - SKSurface? skSurface = CreateSkiaSurface(imageInfo, true); + SKSurface? skSurface = CreateSkiaSurface(imageInfo, true, false); if (skSurface == null) { return null; @@ -99,7 +108,7 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int { if (isGpuBacked) { - SKSurface? skSurface = CreateSkiaSurface(imageInfo, true); + SKSurface? skSurface = CreateSkiaSurface(imageInfo, true, false); if (skSurface == null) { return null; @@ -132,34 +141,39 @@ public void Draw(DrawingSurface drawingSurface, Canvas surfaceToDraw, int x, int public DrawingSurface? Create(ImageInfo imageInfo) { - SKSurface? skSurface = CreateSkiaSurface(imageInfo.ToSkImageInfo(), imageInfo.GpuBacked); + SKSurface? skSurface = CreateSkiaSurface(imageInfo.ToSkImageInfo(), imageInfo.GpuBacked, false); return CreateDrawingSurface(skSurface); } - private SKSurface? CreateSkiaSurface(SKImageInfo info, bool gpu) + private SKSurface? CreateSkiaSurface(SKImageInfo info, bool gpu, bool externallyAccessible) { if (!gpu || GrContext == null) { return SKSurface.Create(info); } - if (GraphicsDevice == null) + if (externallyAccessible) { - throw new InvalidOperationException("GraphicsDevice is not initialized."); - } + if (GraphicsDevice == null) + { + throw new InvalidOperationException("GraphicsDevice is not initialized."); + } - var texture = GraphicsDevice.CreateTexture(new TextureDesc() - { - Format = TextureFormat.RGBA8_Unorm, Width = info.Width, Height = info.Height - }); + var texture = GraphicsDevice.CreateTexture(new TextureDesc() + { + Format = TextureFormat.RGBA8_Unorm, Width = info.Width, Height = info.Height + }); - var surface = CreateFromNativeTexture(texture, new VecI(info.Width, info.Height), defaultSurfaceOrigin, - false, - out var framebufferInfo); - if (surface == null) return null; + var surface = CreateFromNativeTexture(texture, new VecI(info.Width, info.Height), defaultSurfaceOrigin, + false, + out var framebufferInfo); + if (surface == null) return null; - nativeSurfaceInfos[surface] = framebufferInfo; - return surface; + nativeSurfaceInfos[surface] = framebufferInfo; + return surface; + } + + return SKSurface.Create(GrContext, false, info); } internal SKSurface? CreateFromNativeTexture(ITexture renderTexture, VecI size, SurfaceOrigin surfaceOrigin, @@ -240,13 +254,10 @@ public void Dispose(DrawingSurface drawingSurface) surfaceId = surfaceInfo?.SurfaceId; } - // TODO: Maybe queue for disposal after a global flush + add texture type variations, so some are managed by skia and some have native textures - instance.Flush(true, true); - UnmanageAndDispose(drawingSurface.ObjectPointer); if (surfaceId != null) { - GraphicsDevice.DisposeTexture(surfaceId.Value); + nativeSurfacesToDispose.Add(surfaceId.Value); } } @@ -312,6 +323,23 @@ public RectD GetLocalClipBounds(IntPtr objectPointer) return nativeSurfaceInfos.GetValueOrDefault(this[objectPointer]); } + public INativeSurfaceInfo? ToExternallyAccessibleSurface(IntPtr objectPointer) + { + var original = this[objectPointer]; + using var snapshot = original.Snapshot(); + + var surface = CreateSkiaSurface(snapshot.Info, true, true); + if (surface == null) + { + return null; + } + + surface.Canvas.DrawImage(snapshot, 0, 0, SKSamplingOptions.Default); + UpdateManagedInstance(objectPointer, surface); + surface.Canvas.Flush(); + return nativeSurfaceInfos[surface]; + } + public void AddManagedFramebuffer(SKSurface nativeHandle, INativeSurfaceInfo fbInfo) { nativeSurfaceInfos.Add(nativeHandle, fbInfo); diff --git a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs index 23fc9ff..456a64b 100644 --- a/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs +++ b/src/Drawie.Backend.Skia/SkiaDrawingBackend.cs @@ -60,6 +60,8 @@ private set public IPictureImplementation PictureImplementation { get; } public IBlenderImplementation BlenderImplementation { get; } public IMeshImplementation MeshImplementation { get; } + + public event Action AfterFlush; private GRContext _grContext; @@ -125,7 +127,7 @@ public SkiaDrawingBackend() SkiaCanvasImplementation canvasImpl = new SkiaCanvasImplementation(paintImpl, imgImpl, bitmapImpl, pathImpl, fontImpl, meshImplementation); - SurfaceImplementation = new SkiaSurfaceImplementation(SkiaGraphicsContext, SurfaceOrigin.BottomLeft, + SurfaceImplementation = new SkiaSurfaceImplementation(this, SkiaGraphicsContext, SurfaceOrigin.BottomLeft, pixmapImpl, canvasImpl, paintImpl); canvasImpl.SetSurfaceImplementation(SurfaceImplementation); @@ -235,6 +237,7 @@ private void SetupVulkan(IVulkanContext vulkanContext) public void Flush() { SkiaGraphicsContext?.Flush(); + AfterFlush?.Invoke(); } public void ResetContext() diff --git a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs index b66008b..53e5986 100644 --- a/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs +++ b/src/Drawie.Backend.Vertie/Helpers/TextureFramebufferExtensions.cs @@ -38,6 +38,16 @@ public static void DrawScene(this DrawingSurface fb, Scene scene, Camera camera, RenderOptions options = default) { IGraphicsDevice device = DrawingBackendApi.Current.ActiveRenderApi.GraphicsDevice; + foreach (var mesh in scene.Meshes) + { + foreach (var texture in mesh.Material.Textures) + { + if (texture is ILazyExternallyAccessibleTexture extTexture) + { + extTexture.EnsureExternallyAccessible(); + } + } + } fb.Canvas?.Flush(); DrawScene(fb, scene, camera, device, options); diff --git a/src/Drawie.Host.Glfw/GlfwHost.cs b/src/Drawie.Host.Glfw/GlfwHost.cs index 64c6ad1..1b7bbba 100644 --- a/src/Drawie.Host.Glfw/GlfwHost.cs +++ b/src/Drawie.Host.Glfw/GlfwHost.cs @@ -238,6 +238,8 @@ private void RenderContent(double dt) { layer.Render(fbo, dt); } + + DrawingBackendApi.Current.Flush(); } public void Close() diff --git a/src/Drawie.RenderApi/Abstraction/Textures/ILazyExternallyAccessibleTexture.cs b/src/Drawie.RenderApi/Abstraction/Textures/ILazyExternallyAccessibleTexture.cs new file mode 100644 index 0000000..9f4d367 --- /dev/null +++ b/src/Drawie.RenderApi/Abstraction/Textures/ILazyExternallyAccessibleTexture.cs @@ -0,0 +1,6 @@ +namespace Drawie.RenderApi.Abstraction.Textures; + +public interface ILazyExternallyAccessibleTexture : ITexture +{ + void EnsureExternallyAccessible(); +} \ No newline at end of file diff --git a/src/Drawie.Rendering/TextureFramebuffer.cs b/src/Drawie.Rendering/TextureFramebuffer.cs index 39ea99c..c6d730a 100644 --- a/src/Drawie.Rendering/TextureFramebuffer.cs +++ b/src/Drawie.Rendering/TextureFramebuffer.cs @@ -17,7 +17,6 @@ public class TextureFramebuffer : IDisposable, IRenderTarget public VecI Size { get; } public Canvas? Canvas => IsOpen ? UnderlyingTexture?.DrawingSurface?.Canvas : null; - internal TextureFramebuffer(Texture texture) { UnderlyingTexture = texture; @@ -63,7 +62,6 @@ public void Dispose() if (!IsOpen) return; IsOpen = false; - DrawingBackendApi.Current.Flush(); } ulong IRenderTarget.SurfaceId => UnderlyingTexture.SurfaceId;