From b8a678c97fa14e24bc3c026f5429e7cabbbf82b6 Mon Sep 17 00:00:00 2001 From: Robert Date: Mon, 2 Dec 2019 20:14:28 +0100 Subject: [PATCH] Skia WIP --- src/Artemis.Core/Artemis.Core.csproj | 8 ++- .../Events/FrameRenderingEventArgs.cs | 8 +-- .../Extensions/DoubleExtensions.cs | 12 ++++ .../Models/Surface/ArtemisDevice.cs | 11 +++- src/Artemis.Core/Plugins/Abstract/Module.cs | 5 +- src/Artemis.Core/RGB.NET/DirectBitmap.cs | 57 ----------------- src/Artemis.Core/RGB.NET/GraphicsDecorator.cs | 55 ++++++---------- src/Artemis.Core/Services/CoreService.cs | 25 +++----- src/Artemis.Core/packages.config | 2 +- ...Artemis.Plugins.LayerElements.Brush.csproj | 26 +++++++- .../packages.config | 6 +- .../Artemis.Plugins.Modules.General.csproj | 28 ++++++-- .../GeneralModule.cs | 64 ++++++++----------- .../packages.config | 6 +- src/Artemis.UI/Artemis.UI.csproj | 19 +++++- src/Artemis.UI/packages.config | 6 +- 16 files changed, 172 insertions(+), 166 deletions(-) create mode 100644 src/Artemis.Core/Extensions/DoubleExtensions.cs delete mode 100644 src/Artemis.Core/RGB.NET/DirectBitmap.cs diff --git a/src/Artemis.Core/Artemis.Core.csproj b/src/Artemis.Core/Artemis.Core.csproj index e1b091e70..0012730ab 100644 --- a/src/Artemis.Core/Artemis.Core.csproj +++ b/src/Artemis.Core/Artemis.Core.csproj @@ -110,6 +110,9 @@ ..\packages\Serilog.Sinks.File.4.0.0\lib\net45\Serilog.Sinks.File.dll + + ..\packages\SkiaSharp.1.68.1\lib\net45\SkiaSharp.dll + ..\packages\Stylet.1.2.0\lib\net45\Stylet.dll @@ -125,7 +128,6 @@ ..\packages\System.Diagnostics.DiagnosticSource.4.5.1\lib\net46\System.Diagnostics.DiagnosticSource.dll - ..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll @@ -156,6 +158,7 @@ + @@ -189,7 +192,6 @@ - @@ -230,5 +232,7 @@ + + \ No newline at end of file diff --git a/src/Artemis.Core/Events/FrameRenderingEventArgs.cs b/src/Artemis.Core/Events/FrameRenderingEventArgs.cs index 70ed191ac..fb6f49184 100644 --- a/src/Artemis.Core/Events/FrameRenderingEventArgs.cs +++ b/src/Artemis.Core/Events/FrameRenderingEventArgs.cs @@ -1,23 +1,23 @@ using System; using System.Collections.Generic; -using System.Drawing; using Artemis.Core.Plugins.Abstract; +using Artemis.Core.RGB.NET; using RGB.NET.Core; namespace Artemis.Core.Events { public class FrameRenderingEventArgs : EventArgs { - public FrameRenderingEventArgs(List modules, Bitmap bitmap, double deltaTime, RGBSurface rgbSurface) + public FrameRenderingEventArgs(List modules, GraphicsDecorator graphicsDecorator, double deltaTime, RGBSurface rgbSurface) { Modules = modules; - Bitmap = bitmap; + GraphicsDecorator = graphicsDecorator; DeltaTime = deltaTime; RgbSurface = rgbSurface; } public List Modules { get; } - public Bitmap Bitmap { get; } + public GraphicsDecorator GraphicsDecorator { get; } public double DeltaTime { get; } public RGBSurface RgbSurface { get; } } diff --git a/src/Artemis.Core/Extensions/DoubleExtensions.cs b/src/Artemis.Core/Extensions/DoubleExtensions.cs new file mode 100644 index 000000000..7eda9aa26 --- /dev/null +++ b/src/Artemis.Core/Extensions/DoubleExtensions.cs @@ -0,0 +1,12 @@ +using System; + +namespace Artemis.Core.Extensions +{ + public static class DoubleExtensions + { + public static int RoundToInt(this double number) + { + return (int) Math.Round(number, MidpointRounding.AwayFromZero); + } + } +} \ No newline at end of file diff --git a/src/Artemis.Core/Models/Surface/ArtemisDevice.cs b/src/Artemis.Core/Models/Surface/ArtemisDevice.cs index d276921a6..402e13102 100644 --- a/src/Artemis.Core/Models/Surface/ArtemisDevice.cs +++ b/src/Artemis.Core/Models/Surface/ArtemisDevice.cs @@ -6,6 +6,7 @@ using Artemis.Core.Extensions; using Artemis.Core.Plugins.Abstract; using Artemis.Storage.Entities.Surface; using RGB.NET.Core; +using SkiaSharp; using Stylet; using Rectangle = System.Drawing.Rectangle; @@ -38,8 +39,8 @@ namespace Artemis.Core.Models.Surface Leds = rgbDevice.Select(l => new ArtemisLed(l, this)).ToList().AsReadOnly(); } - public Rectangle RenderRectangle { get; private set; } - public GraphicsPath RenderPath { get; private set; } + public SKRect RenderRectangle { get; private set; } + public SKPath RenderPath { get; private set; } public IRGBDevice RgbDevice { get; } public Plugin Plugin { get; } @@ -95,6 +96,12 @@ namespace Artemis.Core.Models.Surface internal void CalculateRenderProperties() { + RenderRectangle = SKRect.Create( + (RgbDevice.Location.X * Surface.Scale).RoundToInt(), + (RgbDevice.Location.Y * Surface.Scale).RoundToInt(), + (RgbDevice.Location.X * Surface.Scale).RoundToInt(), + (RgbDevice.Location.X * Surface.Scale).RoundToInt() + ); RenderRectangle = new Rectangle( (int) Math.Round(RgbDevice.Location.X * Surface.Scale, MidpointRounding.AwayFromZero), (int) Math.Round(RgbDevice.Location.Y * Surface.Scale, MidpointRounding.AwayFromZero), diff --git a/src/Artemis.Core/Plugins/Abstract/Module.cs b/src/Artemis.Core/Plugins/Abstract/Module.cs index 3f085ed03..fdc28e2f1 100644 --- a/src/Artemis.Core/Plugins/Abstract/Module.cs +++ b/src/Artemis.Core/Plugins/Abstract/Module.cs @@ -2,6 +2,7 @@ using System.Drawing; using Artemis.Core.Models.Surface; using Artemis.Core.Plugins.Models; +using SkiaSharp; namespace Artemis.Core.Plugins.Abstract { @@ -37,8 +38,8 @@ namespace Artemis.Core.Plugins.Abstract /// /// Time since the last render /// The RGB Surface to render to - /// - public abstract void Render(double deltaTime, ArtemisSurface surface, Graphics graphics); + /// + public abstract void Render(double deltaTime, ArtemisSurface surface, SKCanvas canvas); /// /// Called when the module's view model is being show, return view models here to create tabs for them diff --git a/src/Artemis.Core/RGB.NET/DirectBitmap.cs b/src/Artemis.Core/RGB.NET/DirectBitmap.cs deleted file mode 100644 index 9bc7ddce4..000000000 --- a/src/Artemis.Core/RGB.NET/DirectBitmap.cs +++ /dev/null @@ -1,57 +0,0 @@ -using System; -using System.Drawing; -using System.Drawing.Imaging; -using System.Runtime.InteropServices; - -namespace Artemis.Core.RGB.NET -{ - public class DirectBitmap : IDisposable - { - public DirectBitmap(int width, int height) - { - Width = width; - Height = height; - Bits = new int[width * height]; - BitsHandle = GCHandle.Alloc(Bits, GCHandleType.Pinned); - Bitmap = new Bitmap(width, height, width * 4, PixelFormat.Format32bppPArgb, BitsHandle.AddrOfPinnedObject()); - } - - public Bitmap Bitmap { get; } - public int[] Bits { get; } - public bool Disposed { get; private set; } - public int Height { get; } - public int Width { get; } - - protected GCHandle BitsHandle { get; } - - public void Dispose() - { - if (Disposed) return; - Disposed = true; - Bitmap.Dispose(); - BitsHandle.Free(); - } - - public void SetPixel(int x, int y, Color colour) - { - var index = x + y * Width; - var col = colour.ToArgb(); - - Bits[index] = col; - } - - public Color GetPixel(int x, int y) - { - var index = x + y * Width; - if (index >= 0 && index - 1 <= Bits.Length) - { - var col = Bits[index]; - var result = Color.FromArgb(col); - - return result; - } - - return Color.Black; - } - } -} \ No newline at end of file diff --git a/src/Artemis.Core/RGB.NET/GraphicsDecorator.cs b/src/Artemis.Core/RGB.NET/GraphicsDecorator.cs index 25c126c96..e37334a02 100644 --- a/src/Artemis.Core/RGB.NET/GraphicsDecorator.cs +++ b/src/Artemis.Core/RGB.NET/GraphicsDecorator.cs @@ -1,16 +1,13 @@ using System; -using System.Drawing; using System.Linq; using RGB.NET.Core; -using Color = RGB.NET.Core.Color; -using Rectangle = RGB.NET.Core.Rectangle; +using SkiaSharp; namespace Artemis.Core.RGB.NET { public class GraphicsDecorator : AbstractDecorator, IBrushDecorator, IDisposable { private readonly double _scale; - private DirectBitmap _bitmap; public GraphicsDecorator(ILedGroup ledGroup, double scale) { @@ -18,27 +15,27 @@ namespace Artemis.Core.RGB.NET var leds = ledGroup.GetLeds().ToList(); if (!leds.Any()) - _bitmap = null; - else - { - var width = Math.Min(leds.Max(l => l.AbsoluteLedRectangle.Location.X + l.AbsoluteLedRectangle.Size.Width) * scale, 4096); - var height = Math.Min(leds.Max(l => l.AbsoluteLedRectangle.Location.Y + l.AbsoluteLedRectangle.Size.Height) * scale, 4096); + return; - _bitmap = new DirectBitmap((int) width, (int) height); - } + var width = Math.Min(leds.Max(l => l.AbsoluteLedRectangle.Location.X + l.AbsoluteLedRectangle.Size.Width) * scale, 4096); + var height = Math.Min(leds.Max(l => l.AbsoluteLedRectangle.Location.Y + l.AbsoluteLedRectangle.Size.Height) * scale, 4096); + Bitmap = new SKBitmap(new SKImageInfo(RoundToInt(width), RoundToInt(height))); + Canvas = new SKCanvas(Bitmap); } + public SKBitmap Bitmap { get; private set; } + public SKCanvas Canvas { get; private set; } + public Color ManipulateColor(Rectangle rectangle, BrushRenderTarget renderTarget, Color color) { + if (Bitmap == null) + return new Color(0, 0, 0); + var x = renderTarget.Led.AbsoluteLedRectangle.Center.X * _scale; var y = renderTarget.Led.AbsoluteLedRectangle.Center.Y * _scale; - if (_bitmap != null && _bitmap.Width - 1 >= x && _bitmap.Height - 1 >= y) - { - var pixel = _bitmap.GetPixel((int) x, (int) y); - return new Color(pixel.A, pixel.R, pixel.G, pixel.B); - } - return new Color(0, 0, 0); + var pixel = Bitmap.GetPixel(RoundToInt(x), RoundToInt(y)); + return new Color(pixel.Alpha, pixel.Red, pixel.Green, pixel.Blue); } public override void OnDetached(IDecoratable decoratable) @@ -48,27 +45,15 @@ namespace Artemis.Core.RGB.NET public void Dispose() { - _bitmap?.Dispose(); - _bitmap = null; + Bitmap?.Dispose(); + Canvas?.Dispose(); + Bitmap = null; + Canvas = null; } - public Graphics GetGraphics() + private int RoundToInt(double number) { - try - { - return _bitmap == null ? null : Graphics.FromImage(_bitmap.Bitmap); - } - catch (AccessViolationException) - { - // ignored - } - - return null; - } - - public Bitmap GetBitmap() - { - return _bitmap?.Bitmap; + return (int) Math.Round(number, MidpointRounding.AwayFromZero); } } } \ No newline at end of file diff --git a/src/Artemis.Core/Services/CoreService.cs b/src/Artemis.Core/Services/CoreService.cs index 5f099afd9..023788a86 100644 --- a/src/Artemis.Core/Services/CoreService.cs +++ b/src/Artemis.Core/Services/CoreService.cs @@ -8,7 +8,6 @@ using Artemis.Core.Services.Interfaces; using Artemis.Core.Services.Storage.Interfaces; using RGB.NET.Core; using Serilog; -using Color = System.Drawing.Color; namespace Artemis.Core.Services { @@ -78,26 +77,20 @@ namespace Artemis.Core.Services module.Update(args.DeltaTime); } - // If there is no graphics decorator, skip the frame - if (_rgbService.GraphicsDecorator == null) + // If there is no ready graphics decorator, skip the frame + if (_rgbService.GraphicsDecorator?.Canvas == null) return; // Render all active modules - using (var g = _rgbService.GraphicsDecorator.GetGraphics()) + _rgbService.GraphicsDecorator.Canvas.Clear(); + lock (_modules) { - // If there are no graphics, skip the frame - if (g == null) - return; - - g.Clear(Color.Black); - lock (_modules) - { - foreach (var module in _modules) - module.Render(args.DeltaTime, _surfaceService.ActiveSurface, g); - } + foreach (var module in _modules) + module.Render(args.DeltaTime, _surfaceService.ActiveSurface, _rgbService.GraphicsDecorator.Canvas); } - OnFrameRendering(new FrameRenderingEventArgs(_modules, _rgbService.GraphicsDecorator.GetBitmap(), args.DeltaTime, _rgbService.Surface)); + + OnFrameRendering(new FrameRenderingEventArgs(_modules, _rgbService.GraphicsDecorator, args.DeltaTime, _rgbService.Surface)); } catch (Exception e) { @@ -107,7 +100,7 @@ namespace Artemis.Core.Services private void SurfaceOnUpdated(UpdatedEventArgs args) { - OnFrameRendered(new FrameRenderedEventArgs(_rgbService.GraphicsDecorator.GetBitmap(), _rgbService.Surface)); + OnFrameRendered(new FrameRenderedEventArgs(_rgbService.GraphicsDecorator, _rgbService.Surface)); } protected virtual void OnFrameRendering(FrameRenderingEventArgs e) diff --git a/src/Artemis.Core/packages.config b/src/Artemis.Core/packages.config index 2733bfdeb..182a96878 100644 --- a/src/Artemis.Core/packages.config +++ b/src/Artemis.Core/packages.config @@ -1,5 +1,4 @@  - @@ -15,6 +14,7 @@ + diff --git a/src/Artemis.Plugins.LayerTypes.Brush/Artemis.Plugins.LayerElements.Brush.csproj b/src/Artemis.Plugins.LayerTypes.Brush/Artemis.Plugins.LayerElements.Brush.csproj index f39c66274..1f7f03acc 100644 --- a/src/Artemis.Plugins.LayerTypes.Brush/Artemis.Plugins.LayerElements.Brush.csproj +++ b/src/Artemis.Plugins.LayerTypes.Brush/Artemis.Plugins.LayerElements.Brush.csproj @@ -13,6 +13,8 @@ 512 true + + true @@ -48,12 +50,27 @@ ..\..\..\RGB.NET\bin\net45\RGB.NET.Core.dll False + + ..\packages\SkiaSharp.1.68.1\lib\net45\SkiaSharp.dll + ..\packages\Stylet.1.2.0\lib\net45\Stylet.dll + + ..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll + - + + ..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll False @@ -100,4 +117,11 @@ echo Copying plugin to Artemis.UI output directory XCOPY "$(TargetDir.TrimEnd('\'))" "$(SolutionDir)\Artemis.UI\$(OutDir)Plugins\$(ProjectName)" /s /q /i /y + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + \ No newline at end of file diff --git a/src/Artemis.Plugins.LayerTypes.Brush/packages.config b/src/Artemis.Plugins.LayerTypes.Brush/packages.config index ca0c2406c..4ea1f6565 100644 --- a/src/Artemis.Plugins.LayerTypes.Brush/packages.config +++ b/src/Artemis.Plugins.LayerTypes.Brush/packages.config @@ -1,7 +1,11 @@  - + + + + + \ No newline at end of file diff --git a/src/Artemis.Plugins.Modules.General/Artemis.Plugins.Modules.General.csproj b/src/Artemis.Plugins.Modules.General/Artemis.Plugins.Modules.General.csproj index bef9f7b45..3208678a8 100644 --- a/src/Artemis.Plugins.Modules.General/Artemis.Plugins.Modules.General.csproj +++ b/src/Artemis.Plugins.Modules.General/Artemis.Plugins.Modules.General.csproj @@ -13,6 +13,8 @@ 512 true + + true @@ -42,15 +44,26 @@ False ..\..\..\RGB.NET\bin\net45\RGB.NET.Core.dll + + ..\packages\SkiaSharp.1.68.1\lib\net45\SkiaSharp.dll + ..\packages\Stylet.1.2.0\lib\net45\Stylet.dll + + ..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll + - - - ..\packages\System.Drawing.Common.4.5.0\lib\net461\System.Drawing.Common.dll - False + + ..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll @@ -97,4 +110,11 @@ echo Copying plugin to Artemis.UI output directory XCOPY "$(TargetDir.TrimEnd('\'))" "$(SolutionDir)\Artemis.UI\$(OutDir)Plugins\$(ProjectName)" /s /q /i /y + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + \ No newline at end of file diff --git a/src/Artemis.Plugins.Modules.General/GeneralModule.cs b/src/Artemis.Plugins.Modules.General/GeneralModule.cs index 775ac0455..35ba0da83 100644 --- a/src/Artemis.Plugins.Modules.General/GeneralModule.cs +++ b/src/Artemis.Plugins.Modules.General/GeneralModule.cs @@ -1,21 +1,20 @@ using System; using System.Collections.Generic; -using System.Drawing; -using System.Drawing.Drawing2D; using System.Linq; +using System.Windows.Media; using Artemis.Core.Models.Surface; using Artemis.Core.Plugins.Abstract; using Artemis.Core.Plugins.Models; using Artemis.Core.Services.Storage.Interfaces; using Artemis.Plugins.Modules.General.ViewModels; using RGB.NET.Core; -using Color = System.Drawing.Color; +using SkiaSharp; +using Color = RGB.NET.Core.Color; namespace Artemis.Plugins.Modules.General { public class GeneralModule : ProfileModule { - private readonly ColorBlend _rainbowColorBlend; private readonly PluginSettings _settings; public GeneralModule(PluginInfo pluginInfo, PluginSettings settings, ISurfaceService surfaceService) : base(pluginInfo) @@ -23,31 +22,25 @@ namespace Artemis.Plugins.Modules.General _settings = settings; DisplayName = "General"; ExpandsMainDataModel = true; - DeviceBrushes = new Dictionary(); + DeviceShaders = new Dictionary(); + RainbowColors = new List(); - var testSetting = _settings.GetSetting("TestSetting", DateTime.Now); - - Hues = new int[1000]; - for (var i = 0; i < 1000; i++) - Hues[i] = ColorHelpers.GetRandomHue(); - - _rainbowColorBlend = new ColorBlend(9); for (var i = 0; i < 9; i++) { - _rainbowColorBlend.Positions[i] = i / 8f; if (i != 8) - _rainbowColorBlend.Colors[i] = ColorHelpers.ColorFromHSV(i * 32, 1, 1); + RainbowColors.Add(SKColor.FromHsv(i * 32, 1, 1)); else - _rainbowColorBlend.Colors[i] = ColorHelpers.ColorFromHSV(0, 1, 1); + RainbowColors.Add(SKColor.FromHsv(0, 1, 1)); } - surfaceService.SurfaceConfigurationUpdated += (sender, args) => DeviceBrushes.Clear(); + surfaceService.SurfaceConfigurationUpdated += (sender, args) => DeviceShaders.Clear(); + var testSetting = _settings.GetSetting("TestSetting", DateTime.Now); } - public int[] Hues { get; set; } public int MovePercentage { get; set; } - public Dictionary DeviceBrushes { get; set; } + public Dictionary DeviceShaders { get; set; } + public List RainbowColors { get; set; } public override void EnablePlugin() { @@ -59,13 +52,6 @@ namespace Artemis.Plugins.Modules.General public override void Update(double deltaTime) { - for (var i = 0; i < Hues.Length; i++) - { - Hues[i]++; - if (Hues[i] > 360) - Hues[i] = 0; - } - MovePercentage++; if (MovePercentage > 100) MovePercentage = 0; @@ -74,29 +60,31 @@ namespace Artemis.Plugins.Modules.General } - public override void Render(double deltaTime, ArtemisSurface surface, Graphics graphics) + public override void Render(double deltaTime, ArtemisSurface surface, SKCanvas canvas) { - // Per-device coloring, slower - // RenderPerDevice(surface, graphics); + foreach (var device in surface.Devices) + { + if (!DeviceShaders.ContainsKey(device)) + DeviceShaders.Add(device, + SKShader.CreateLinearGradient(new SKPoint(0, 0), new SKPoint(device.RenderRectangle.Width, device.RenderRectangle.Height), RainbowColors.ToArray(), SKShaderTileMode.Clamp)); - // Per-LED coloring, slowest - // RenderPerLed(surface, graphics); + var brush = DeviceShaders[device]; + brush.TranslateTransform((int) Math.Round(device.RenderRectangle.Width / 100.0 * MovePercentage), 0); + graphics.FillPath(brush, device.RenderPath); + brush.TranslateTransform((int) Math.Round(device.RenderRectangle.Width / 100.0 * MovePercentage) * -1, 0); - base.Render(deltaTime, surface, graphics); - } - - public void RenderFullSurface(ArtemisSurface surface, Graphics graphics) - { + graphics.DrawRectangle(new Pen(Color.Red), device.RenderRectangle); + } } public void RenderPerDevice(ArtemisSurface surface, Graphics graphics) { foreach (var device in surface.Devices) { - if (!DeviceBrushes.ContainsKey(device)) - DeviceBrushes.Add(device, new TextureBrush(RenderGradientForDevice(device), WrapMode.Tile)); + if (!DeviceShaders.ContainsKey(device)) + DeviceShaders.Add(device, new TextureBrush(RenderGradientForDevice(device), WrapMode.Tile)); - var brush = DeviceBrushes[device]; + var brush = DeviceShaders[device]; brush.TranslateTransform((int) Math.Round(device.RenderRectangle.Width / 100.0 * MovePercentage), 0); graphics.FillPath(brush, device.RenderPath); brush.TranslateTransform((int) Math.Round(device.RenderRectangle.Width / 100.0 * MovePercentage) * -1, 0); diff --git a/src/Artemis.Plugins.Modules.General/packages.config b/src/Artemis.Plugins.Modules.General/packages.config index c5ec6307a..f2224df9b 100644 --- a/src/Artemis.Plugins.Modules.General/packages.config +++ b/src/Artemis.Plugins.Modules.General/packages.config @@ -1,8 +1,12 @@  - + + + + + \ No newline at end of file diff --git a/src/Artemis.UI/Artemis.UI.csproj b/src/Artemis.UI/Artemis.UI.csproj index d29501b6e..713c2785f 100644 --- a/src/Artemis.UI/Artemis.UI.csproj +++ b/src/Artemis.UI/Artemis.UI.csproj @@ -117,16 +117,31 @@ ..\packages\Serilog.2.8.0\lib\net46\Serilog.dll + + ..\packages\SkiaSharp.1.68.1\lib\net45\SkiaSharp.dll + ..\packages\Stylet.1.3.0\lib\net45\Stylet.dll + + ..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll + ..\packages\System.ComponentModel.Annotations.4.6.0\lib\net461\System.ComponentModel.Annotations.dll - + + ..\packages\System.Memory.4.5.3\lib\netstandard2.0\System.Memory.dll + + + + ..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll + + + ..\packages\System.Runtime.CompilerServices.Unsafe.4.5.2\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll + ..\packages\System.ValueTuple.4.5.0\lib\net47\System.ValueTuple.dll @@ -420,5 +435,7 @@ + + \ No newline at end of file diff --git a/src/Artemis.UI/packages.config b/src/Artemis.UI/packages.config index 73fe590d2..f120873e0 100644 --- a/src/Artemis.UI/packages.config +++ b/src/Artemis.UI/packages.config @@ -1,5 +1,4 @@  - @@ -17,7 +16,12 @@ + + + + + \ No newline at end of file