From d48403082123cdd6541aec9c961a22dbb7c01848 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Fri, 15 Apr 2022 16:42:59 +0200 Subject: [PATCH 1/5] Fixed novation devices not always beeing detected correctly --- RGB.NET.Devices.Novation/NovationDeviceProvider.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/RGB.NET.Devices.Novation/NovationDeviceProvider.cs b/RGB.NET.Devices.Novation/NovationDeviceProvider.cs index a341193..3c2d126 100644 --- a/RGB.NET.Devices.Novation/NovationDeviceProvider.cs +++ b/RGB.NET.Devices.Novation/NovationDeviceProvider.cs @@ -54,7 +54,11 @@ public class NovationDeviceProvider : AbstractRGBDeviceProvider NovationDevices? deviceId = (NovationDevices?)Enum.GetValues(typeof(NovationDevices)) .Cast() - .FirstOrDefault(x => x.GetDeviceId()?.ToUpperInvariant().Contains(outCaps.name.ToUpperInvariant()) ?? false); + .FirstOrDefault(x => + { + string? deviceId = x.GetDeviceId(); + return (deviceId != null) && outCaps.name.ToUpperInvariant().Contains(deviceId.ToUpperInvariant()); + }); if (deviceId == null) continue; From 0decf0b9d317a2c5c4f7a985e83b40990b8697dc Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Fri, 15 Apr 2022 16:58:50 +0200 Subject: [PATCH 2/5] Updated corsair model-names to reflect the sdk-changes in 3.0.460 --- .../Custom/CorsairCustomRGBDeviceInfo.cs | 6 +++--- RGB.NET.Devices.Corsair/Enum/CorsairChannelDeviceType.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs b/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs index 8c30c72..5d0858a 100644 --- a/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs +++ b/RGB.NET.Devices.Corsair/Custom/CorsairCustomRGBDeviceInfo.cs @@ -70,7 +70,7 @@ public class CorsairCustomRGBDeviceInfo : CorsairRGBDeviceInfo CorsairChannelDeviceType.FanML => RGBDeviceType.Fan, CorsairChannelDeviceType.DAP => RGBDeviceType.Fan, CorsairChannelDeviceType.FanQL => RGBDeviceType.Fan, - CorsairChannelDeviceType.FanSPPRO => RGBDeviceType.Fan, + CorsairChannelDeviceType.EightLedSeriesFan => RGBDeviceType.Fan, CorsairChannelDeviceType.Strip => RGBDeviceType.LedStripe, CorsairChannelDeviceType.Pump => RGBDeviceType.Cooler, CorsairChannelDeviceType.WaterBlock => RGBDeviceType.Cooler, @@ -117,8 +117,8 @@ public class CorsairCustomRGBDeviceInfo : CorsairRGBDeviceInfo case CorsairChannelDeviceType.FanQL: return "QL Fan"; - case CorsairChannelDeviceType.FanSPPRO: - return "SP-PRO Fan"; + case CorsairChannelDeviceType.EightLedSeriesFan: + return "8-Led-Series Fan Fan"; case CorsairChannelDeviceType.Strip: // LS100 Led Strips are reported as one big strip if configured in monitor mode in iCUE, 138 LEDs for dual monitor, 84 for single diff --git a/RGB.NET.Devices.Corsair/Enum/CorsairChannelDeviceType.cs b/RGB.NET.Devices.Corsair/Enum/CorsairChannelDeviceType.cs index 7a4010e..8c89470 100644 --- a/RGB.NET.Devices.Corsair/Enum/CorsairChannelDeviceType.cs +++ b/RGB.NET.Devices.Corsair/Enum/CorsairChannelDeviceType.cs @@ -21,5 +21,5 @@ public enum CorsairChannelDeviceType Pump = 7, FanQL = 8, WaterBlock = 9, - FanSPPRO = 10 + EightLedSeriesFan = 10 // Previously called FanSPPRO }; \ No newline at end of file From 10ec33c93888fc991cd114bf419a283598ef7918 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Sun, 17 Jul 2022 11:52:29 +0200 Subject: [PATCH 3/5] Added some optimizations and tests for Colors --- .../Color/Behaviors/DefaultColorBehavior.cs | 8 +- RGB.NET.Core/Color/Color.cs | 8 +- RGB.NET.sln | 11 +- .../Sampler/AverageColorSamplerTest.cs | 85 ++++++++++++ .../RGB.NET.Presets.Tests.csproj | 20 +++ .../Sampler/AverageByteSamplerTest.cs | 127 ++++++++++++++++++ .../Sampler/AverageFloatSamplerTest.cs | 127 ++++++++++++++++++ 7 files changed, 377 insertions(+), 9 deletions(-) create mode 100644 Tests/RGB.NET.Core.Tests/Sampler/AverageColorSamplerTest.cs create mode 100644 Tests/RGB.NET.Presets.Tests/RGB.NET.Presets.Tests.csproj create mode 100644 Tests/RGB.NET.Presets.Tests/Sampler/AverageByteSamplerTest.cs create mode 100644 Tests/RGB.NET.Presets.Tests/Sampler/AverageFloatSamplerTest.cs diff --git a/RGB.NET.Core/Color/Behaviors/DefaultColorBehavior.cs b/RGB.NET.Core/Color/Behaviors/DefaultColorBehavior.cs index c71ed1b..6942325 100644 --- a/RGB.NET.Core/Color/Behaviors/DefaultColorBehavior.cs +++ b/RGB.NET.Core/Color/Behaviors/DefaultColorBehavior.cs @@ -25,9 +25,11 @@ public class DefaultColorBehavior : IColorBehavior public virtual bool Equals(in Color color, object? obj) { if (obj is not Color color2) return false; - - (float a, float r, float g, float b) = color2.GetRGB(); - return color.A.EqualsInTolerance(a) && color.R.EqualsInTolerance(r) && color.G.EqualsInTolerance(g) && color.B.EqualsInTolerance(b); + + return color.A.EqualsInTolerance(color2.A) + && color.R.EqualsInTolerance(color2.R) + && color.G.EqualsInTolerance(color2.G) + && color.B.EqualsInTolerance(color2.B); } /// diff --git a/RGB.NET.Core/Color/Color.cs b/RGB.NET.Core/Color/Color.cs index 2573b14..ae775d3 100644 --- a/RGB.NET.Core/Color/Color.cs +++ b/RGB.NET.Core/Color/Color.cs @@ -33,22 +33,22 @@ public readonly struct Color /// /// Gets the alpha component value of this as percentage in the range [0..1]. /// - public float A { get; } + public readonly float A; /// /// Gets the red component value of this as percentage in the range [0..1]. /// - public float R { get; } + public readonly float R; /// /// Gets the green component value of this as percentage in the range [0..1]. /// - public float G { get; } + public readonly float G; /// /// Gets the blue component value of this as percentage in the range [0..1]. /// - public float B { get; } + public readonly float B; #endregion diff --git a/RGB.NET.sln b/RGB.NET.sln index f37972b..9dca4b4 100644 --- a/RGB.NET.sln +++ b/RGB.NET.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.29424.173 +# Visual Studio Version 17 +VisualStudioVersion = 17.1.32407.343 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Devices", "Devices", "{D13032C6-432E-4F43-8A32-071133C22B16}" EndProject @@ -43,6 +43,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.HID", "RGB.NET.HID\ EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.Devices.PicoPi", "RGB.NET.Devices.PicoPi\RGB.NET.Devices.PicoPi.csproj", "{7FC5C7A8-7B27-46E7-A8E8-DB80568F49C5}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "RGB.NET.Presets.Tests", "Tests\RGB.NET.Presets.Tests\RGB.NET.Presets.Tests.csproj", "{EDBA49D6-AE96-4E96-9E6A-30154D93BD5F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -121,6 +123,10 @@ Global {7FC5C7A8-7B27-46E7-A8E8-DB80568F49C5}.Debug|Any CPU.Build.0 = Debug|Any CPU {7FC5C7A8-7B27-46E7-A8E8-DB80568F49C5}.Release|Any CPU.ActiveCfg = Release|Any CPU {7FC5C7A8-7B27-46E7-A8E8-DB80568F49C5}.Release|Any CPU.Build.0 = Release|Any CPU + {EDBA49D6-AE96-4E96-9E6A-30154D93BD5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EDBA49D6-AE96-4E96-9E6A-30154D93BD5F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EDBA49D6-AE96-4E96-9E6A-30154D93BD5F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EDBA49D6-AE96-4E96-9E6A-30154D93BD5F}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -140,6 +146,7 @@ Global {E0732B34-3F96-4DD9-AFD5-0E34B833AD6D} = {D13032C6-432E-4F43-8A32-071133C22B16} {DD46DB2D-85BE-4962-86AE-E38C9053A548} = {D13032C6-432E-4F43-8A32-071133C22B16} {7FC5C7A8-7B27-46E7-A8E8-DB80568F49C5} = {D13032C6-432E-4F43-8A32-071133C22B16} + {EDBA49D6-AE96-4E96-9E6A-30154D93BD5F} = {92D7C263-D4C9-4D26-93E2-93C1F9C2CD16} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7F222AD4-1F9E-4AAB-9D69-D62372D4C1BA} diff --git a/Tests/RGB.NET.Core.Tests/Sampler/AverageColorSamplerTest.cs b/Tests/RGB.NET.Core.Tests/Sampler/AverageColorSamplerTest.cs new file mode 100644 index 0000000..99398ec --- /dev/null +++ b/Tests/RGB.NET.Core.Tests/Sampler/AverageColorSamplerTest.cs @@ -0,0 +1,85 @@ +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; + +namespace RGB.NET.Core.Tests.Sampler; + +[TestClass] +public class AverageColorSamplerTest +{ + #region Methods + + [TestMethod] + public void WhiteTest() + { + Span data = new Core.Color[16 * 16]; + data.Fill(new Core.Color(1f, 1f, 1f, 1f)); + Core.Color[] result = new Core.Color[1]; + + SamplerInfo info = new(2, 3, data[..6]); + new AverageColorSampler().Sample(info, result); + Assert.AreEqual(new Core.Color(1f, 1f, 1f, 1f), result[0]); + + info = new SamplerInfo(16, 16, data); + new AverageColorSampler().Sample(info, result); + Assert.AreEqual(new Core.Color(1f, 1f, 1f, 1f), result[0]); + } + + [TestMethod] + public void BlackTest() + { + Span data = new Core.Color[16 * 16]; + data.Fill(new Core.Color(1f, 0f, 0f, 0f)); + Core.Color[] result = new Core.Color[1]; + + SamplerInfo info = new(2, 3, data[..6]); + new AverageColorSampler().Sample(info, result); + Assert.AreEqual(new Core.Color(1f, 0f, 0f, 0f), result[0]); + + info = new SamplerInfo(16, 16, data); + new AverageColorSampler().Sample(info, result); + Assert.AreEqual(new Core.Color(1f, 0f, 0f, 0f), result[0]); + } + + [TestMethod] + public void GrayTest() + { + Span data = new Core.Color[16 * 16]; + for (int i = 0; i < data.Length; i++) + data[i] = (i % 2) == 0 ? new Core.Color(1f, 0f, 0f, 0f) : new Core.Color(1f, 1f, 1f, 1f); + Core.Color[] result = new Core.Color[1]; + + SamplerInfo info = new(2, 3, data[..6]); + new AverageColorSampler().Sample(info, result); + Assert.AreEqual(new Core.Color(1f, 0.5f, 0.5f, 0.5f), result[0]); + + info = new SamplerInfo(16, 16, data); + new AverageColorSampler().Sample(info, result); + Assert.AreEqual(new Core.Color(1f, 0.5f, 0.5f, 0.5f), result[0]); + } + + [TestMethod] + public void MixedTest() + { + Core.Color[] data = new Core.Color[16 * 16]; + for (int i = 0; i < data.Length; i++) + data[i] = (i % 5) switch + { + 0 => new Core.Color(1f, 1f, 0f, 0f), + 1 => new Core.Color(1f, 0f, 0.75f, 0f), + 2 => new Core.Color(0.5f, 0f, 0f, 0.5f), + 3 => new Core.Color(0f, 1f, 1f, 1f), + _ => new Core.Color(0f, 0f, 0f, 0f), + }; + Core.Color[] result = new Core.Color[1]; + + SamplerInfo info = new(2, 3, data[..6]); + new AverageColorSampler().Sample(info, result); + Assert.AreEqual(new Core.Color(0.5833333f, 0.5f, 0.291666657f, 0.25f), result[0]); + + info = new SamplerInfo(16, 16, data); + new AverageColorSampler().Sample(info, result); + Assert.AreEqual(new Core.Color(0.5019531f, 0.40234375f, 0.3486328f, 0.298828125f), result[0]); + } + + #endregion +} \ No newline at end of file diff --git a/Tests/RGB.NET.Presets.Tests/RGB.NET.Presets.Tests.csproj b/Tests/RGB.NET.Presets.Tests/RGB.NET.Presets.Tests.csproj new file mode 100644 index 0000000..19d0c79 --- /dev/null +++ b/Tests/RGB.NET.Presets.Tests/RGB.NET.Presets.Tests.csproj @@ -0,0 +1,20 @@ + + + + net6.0 + + false + + + + + + + + + + + + + + diff --git a/Tests/RGB.NET.Presets.Tests/Sampler/AverageByteSamplerTest.cs b/Tests/RGB.NET.Presets.Tests/Sampler/AverageByteSamplerTest.cs new file mode 100644 index 0000000..34a1e34 --- /dev/null +++ b/Tests/RGB.NET.Presets.Tests/Sampler/AverageByteSamplerTest.cs @@ -0,0 +1,127 @@ +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using RGB.NET.Core; +using RGB.NET.Presets.Textures.Sampler; + +namespace RGB.NET.Presets.Tests.Sampler; + +[TestClass] +public class AverageByteSamplerTest +{ + #region Methods + + [TestMethod] + public void WhiteTest() + { + Span colorData = new Color[16 * 16]; + colorData.Fill(new Color(1f, 1f, 1f, 1f)); + byte[] result = new byte[4]; + + Span data = new byte[colorData.Length * 4]; + int index = 0; + for (int i = 0; i < colorData.Length; i++) + { + data[index++] = colorData[i].GetA(); + data[index++] = colorData[i].GetR(); + data[index++] = colorData[i].GetG(); + data[index++] = colorData[i].GetB(); + } + + SamplerInfo info = new(2, 3, data[..(6 * 4)]); + new AverageByteSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 1f, 1f, 1f), new Color(result[0], result[1], result[2], result[3])); + + info = new SamplerInfo(16, 16, data); + new AverageByteSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 1f, 1f, 1f), new Color(result[0], result[1], result[2], result[3])); + } + + [TestMethod] + public void BlackTest() + { + Span colorData = new Color[16 * 16]; + colorData.Fill(new Color(1f, 0f, 0f, 0f)); + byte[] result = new byte[4]; + + Span data = new byte[colorData.Length * 4]; + int index = 0; + for (int i = 0; i < colorData.Length; i++) + { + data[index++] = colorData[i].GetA(); + data[index++] = colorData[i].GetR(); + data[index++] = colorData[i].GetG(); + data[index++] = colorData[i].GetB(); + } + + SamplerInfo info = new(2, 3, data[..(6 * 4)]); + new AverageByteSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 0f, 0f, 0f), new Color(result[0], result[1], result[2], result[3])); + + info = new SamplerInfo(16, 16, data); + new AverageByteSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 0f, 0f, 0f), new Color(result[0], result[1], result[2], result[3])); + } + + [TestMethod] + public void GrayTest() + { + Span colorData = new Color[16 * 16]; + for (int i = 0; i < colorData.Length; i++) + colorData[i] = (i % 2) == 0 ? new Color(1f, 0f, 0f, 0f) : new Color(1f, 1f, 1f, 1f); + byte[] result = new byte[4]; + + Span data = new byte[colorData.Length * 4]; + int index = 0; + for (int i = 0; i < colorData.Length; i++) + { + data[index++] = colorData[i].GetA(); + data[index++] = colorData[i].GetR(); + data[index++] = colorData[i].GetG(); + data[index++] = colorData[i].GetB(); + } + + SamplerInfo info = new(2, 3, data[..(6 * 4)]); + new AverageByteSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 0.5f, 0.5f, 0.5f), new Color(result[0], result[1], result[2], result[3])); + + info = new SamplerInfo(16, 16, data); + new AverageByteSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 0.5f, 0.5f, 0.5f), new Color(result[0], result[1], result[2], result[3])); + } + + [TestMethod] + public void MixedTest() + { + Color[] colorData = new Color[16 * 16]; + for (int i = 0; i < colorData.Length; i++) + colorData[i] = (i % 5) switch + { + 0 => new Color(1f, 1f, 0f, 0f), + 1 => new Color(1f, 0f, 0.75f, 0f), + 2 => new Color(0.5f, 0f, 0f, 0.5f), + 3 => new Color(0f, 1f, 1f, 1f), + _ => new Color(0f, 0f, 0f, 0f), + }; + byte[] result = new byte[4]; + + Span data = new byte[colorData.Length * 4]; + int index = 0; + for (int i = 0; i < colorData.Length; i++) + { + data[index++] = colorData[i].GetA(); + data[index++] = colorData[i].GetR(); + data[index++] = colorData[i].GetG(); + data[index++] = colorData[i].GetB(); + } + + SamplerInfo info = new(2, 3, data[..(6 * 4)]); + new AverageByteSampler().Sample(info, result); + Assert.AreEqual(new Color(149, 128, 74, 64), new Color(result[0], result[1], result[2], result[3])); + + info = new SamplerInfo(16, 16, data); + new AverageByteSampler().Sample(info, result); + Assert.AreEqual(new Color(128, 103, 89, 76), new Color(result[0], result[1], result[2], result[3])); + } + + #endregion +} \ No newline at end of file diff --git a/Tests/RGB.NET.Presets.Tests/Sampler/AverageFloatSamplerTest.cs b/Tests/RGB.NET.Presets.Tests/Sampler/AverageFloatSamplerTest.cs new file mode 100644 index 0000000..6795f2c --- /dev/null +++ b/Tests/RGB.NET.Presets.Tests/Sampler/AverageFloatSamplerTest.cs @@ -0,0 +1,127 @@ +using System; +using Microsoft.VisualStudio.TestTools.UnitTesting; +using RGB.NET.Core; +using RGB.NET.Presets.Textures.Sampler; + +namespace RGB.NET.Presets.Tests.Sampler; + +[TestClass] +public class AverageFloatSamplerTest +{ + #region Methods + + [TestMethod] + public void WhiteTest() + { + Span colorData = new Color[16 * 16]; + colorData.Fill(new Color(1f, 1f, 1f, 1f)); + float[] result = new float[4]; + + Span data = new float[colorData.Length * 4]; + int index = 0; + for (int i = 0; i < colorData.Length; i++) + { + data[index++] = colorData[i].A; + data[index++] = colorData[i].R; + data[index++] = colorData[i].G; + data[index++] = colorData[i].B; + } + + SamplerInfo info = new(2, 3, data[..(6 * 4)]); + new AverageFloatSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 1f, 1f, 1f), new Color(result[0], result[1], result[2], result[3])); + + info = new SamplerInfo(16, 16, data); + new AverageFloatSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 1f, 1f, 1f), new Color(result[0], result[1], result[2], result[3])); + } + + [TestMethod] + public void BlackTest() + { + Span colorData = new Color[16 * 16]; + colorData.Fill(new Color(1f, 0f, 0f, 0f)); + float[] result = new float[4]; + + Span data = new float[colorData.Length * 4]; + int index = 0; + for (int i = 0; i < colorData.Length; i++) + { + data[index++] = colorData[i].A; + data[index++] = colorData[i].R; + data[index++] = colorData[i].G; + data[index++] = colorData[i].B; + } + + SamplerInfo info = new(2, 3, data[..(6 * 4)]); + new AverageFloatSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 0f, 0f, 0f), new Color(result[0], result[1], result[2], result[3])); + + info = new SamplerInfo(16, 16, data); + new AverageFloatSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 0f, 0f, 0f), new Color(result[0], result[1], result[2], result[3])); + } + + [TestMethod] + public void GrayTest() + { + Span colorData = new Color[16 * 16]; + for (int i = 0; i < colorData.Length; i++) + colorData[i] = (i % 2) == 0 ? new Color(1f, 0f, 0f, 0f) : new Color(1f, 1f, 1f, 1f); + float[] result = new float[4]; + + Span data = new float[colorData.Length * 4]; + int index = 0; + for (int i = 0; i < colorData.Length; i++) + { + data[index++] = colorData[i].A; + data[index++] = colorData[i].R; + data[index++] = colorData[i].G; + data[index++] = colorData[i].B; + } + + SamplerInfo info = new(2, 3, data[..(6 * 4)]); + new AverageFloatSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 0.5f, 0.5f, 0.5f), new Color(result[0], result[1], result[2], result[3])); + + info = new SamplerInfo(16, 16, data); + new AverageFloatSampler().Sample(info, result); + Assert.AreEqual(new Color(1f, 0.5f, 0.5f, 0.5f), new Color(result[0], result[1], result[2], result[3])); + } + + [TestMethod] + public void MixedTest() + { + Color[] colorData = new Color[16 * 16]; + for (int i = 0; i < colorData.Length; i++) + colorData[i] = (i % 5) switch + { + 0 => new Color(1f, 1f, 0f, 0f), + 1 => new Color(1f, 0f, 0.75f, 0f), + 2 => new Color(0.5f, 0f, 0f, 0.5f), + 3 => new Color(0f, 1f, 1f, 1f), + _ => new Color(0f, 0f, 0f, 0f), + }; + float[] result = new float[4]; + + Span data = new float[colorData.Length * 4]; + int index = 0; + for (int i = 0; i < colorData.Length; i++) + { + data[index++] = colorData[i].A; + data[index++] = colorData[i].R; + data[index++] = colorData[i].G; + data[index++] = colorData[i].B; + } + + SamplerInfo info = new(2, 3, data[..(6 * 4)]); + new AverageFloatSampler().Sample(info, result); + Assert.AreEqual(new Color(0.5833333f, 0.5f, 0.291666657f, 0.25f), new Color(result[0], result[1], result[2], result[3])); + + info = new SamplerInfo(16, 16, data); + new AverageFloatSampler().Sample(info, result); + Assert.AreEqual(new Color(0.5019531f, 0.40234375f, 0.3486328f, 0.298828125f), new Color(result[0], result[1], result[2], result[3])); + } + + #endregion +} \ No newline at end of file From 105f99672946b3e3003d2093b491d65728bd79b4 Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Sun, 17 Jul 2022 11:52:42 +0200 Subject: [PATCH 4/5] Fixed code issue --- RGB.NET.Devices.Logitech/HID/LightspeedHidLoader.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/RGB.NET.Devices.Logitech/HID/LightspeedHidLoader.cs b/RGB.NET.Devices.Logitech/HID/LightspeedHidLoader.cs index c4888ba..a536a1e 100644 --- a/RGB.NET.Devices.Logitech/HID/LightspeedHidLoader.cs +++ b/RGB.NET.Devices.Logitech/HID/LightspeedHidLoader.cs @@ -4,6 +4,7 @@ using RGB.NET.HID; using System; using System.Collections; using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; using System.Linq; namespace RGB.NET.Devices.Logitech.HID; @@ -108,6 +109,7 @@ public class LightspeedHIDLoader : IEnumerable GetWirelessDevices(IReadOnlyDictionary deviceUsages) { const byte LOGITECH_RECEIVER_ADDRESS = 0xFF; From 5b25b100688a7ba248735b63069382464d8deb0b Mon Sep 17 00:00:00 2001 From: Darth Affe Date: Sun, 17 Jul 2022 11:53:08 +0200 Subject: [PATCH 5/5] Fixed tick-resolution issues on linux --- RGB.NET.Core/Helper/TimerHelper.cs | 3 +-- .../Generic/SteelSeriesDeviceUpdateTrigger.cs | 5 ++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/RGB.NET.Core/Helper/TimerHelper.cs b/RGB.NET.Core/Helper/TimerHelper.cs index 6c33284..432170b 100644 --- a/RGB.NET.Core/Helper/TimerHelper.cs +++ b/RGB.NET.Core/Helper/TimerHelper.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Linq; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Threading; @@ -83,7 +82,7 @@ public static class TimerHelper /// The initial timestamp to calculate the time from. /// The elapsed time in ms. [MethodImpl(MethodImplOptions.AggressiveInlining)] - public static double GetElapsedTime(long initialTimestamp) => ((Stopwatch.GetTimestamp() - initialTimestamp) / (double)TimeSpan.TicksPerMillisecond); + public static double GetElapsedTime(long initialTimestamp) => ((Stopwatch.GetTimestamp() - initialTimestamp) / (Stopwatch.Frequency / 1000.0)); /// /// Requests to use to use High Resolution Timers if enabled. diff --git a/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesDeviceUpdateTrigger.cs b/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesDeviceUpdateTrigger.cs index 292a6cc..ddc644b 100644 --- a/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesDeviceUpdateTrigger.cs +++ b/RGB.NET.Devices.SteelSeries/Generic/SteelSeriesDeviceUpdateTrigger.cs @@ -1,6 +1,5 @@ // ReSharper disable MemberCanBePrivate.Global -using System; using System.Diagnostics; using System.Threading; using RGB.NET.Core; @@ -14,7 +13,7 @@ public class SteelSeriesDeviceUpdateTrigger : DeviceUpdateTrigger { #region Constants - private const long FLUSH_TIMER = 5 * 1000 * TimeSpan.TicksPerMillisecond; // flush the device every 5 seconds to prevent timeouts + private static readonly long FLUSH_TIMER = 5 * 1000 * (long)(Stopwatch.Frequency / 1000.0); // flush the device every 5 seconds to prevent timeouts #endregion @@ -59,7 +58,7 @@ public class SteelSeriesDeviceUpdateTrigger : DeviceUpdateTrigger if (UpdateFrequency > 0) { - double lastUpdateTime = ((_lastUpdateTimestamp - preUpdateTicks) / (double)TimeSpan.TicksPerMillisecond); + double lastUpdateTime = ((_lastUpdateTimestamp - preUpdateTicks) / (Stopwatch.Frequency / 1000.0)); int sleep = (int)((UpdateFrequency * 1000.0) - lastUpdateTime); if (sleep > 0) Thread.Sleep(sleep);