From a657bb63675ba896d9167b7e20cdb21ec3ebbe2d Mon Sep 17 00:00:00 2001 From: Rgebee Date: Sun, 17 May 2026 19:24:49 +0100 Subject: [PATCH] Update tests and dll resolver (#336) --- Examples/Textures/Bunnymark.cs | 20 ++++++--- Raylib-cs.Native/Native.cs | 5 ++- Raylib-cs.Tests/BlittableHelper.cs | 69 ------------------------------ Raylib-cs.Tests/RaylibTests.cs | 11 +++++ Raylib-cs/interop/Raylib.cs | 34 ++++++++------- 5 files changed, 45 insertions(+), 94 deletions(-) delete mode 100644 Raylib-cs.Tests/BlittableHelper.cs diff --git a/Examples/Textures/Bunnymark.cs b/Examples/Textures/Bunnymark.cs index 364a4d5..b610692 100644 --- a/Examples/Textures/Bunnymark.cs +++ b/Examples/Textures/Bunnymark.cs @@ -31,10 +31,16 @@ public static class Bunnymark private record struct Bunny() { public Vector2 Position { get; set; } = GetMousePosition(); - public Vector2 Speed { get; set; } = new( + public Vector2 Speed + { + get; set; + } = new( GetRandomValue(-250, 250) / (float)TARGET_FPS, GetRandomValue(-250, 250) / (float)TARGET_FPS); - public Color Color { get; } = new( + public Color Color + { + get; + } = new( GetRandomValue(50, 240), GetRandomValue(80, 240), GetRandomValue(100, 240), 255); @@ -68,7 +74,7 @@ public static class Bunnymark if (IsMouseButtonDown(MouseButton.Left) && bunniesCount < MaxBunnies) { // Add a range of new bunnies - foreach (ref var bunny in bunnies[bunniesCount..(bunniesCount+BunnyIncrement)]) + foreach (ref var bunny in bunnies[bunniesCount..(bunniesCount + BunnyIncrement)]) { bunny = new(); } @@ -79,7 +85,7 @@ public static class Bunnymark // Remove the oldest bunnies, shifting them back in the span if (bunniesCount > BunnyDecrement) { - bunnies[BunnyDecrement .. bunniesCount].CopyTo(bunnies); + bunnies[BunnyDecrement..bunniesCount].CopyTo(bunnies); } bunniesCount = Math.Max(0, bunniesCount - BunnyDecrement); } @@ -93,9 +99,9 @@ public static class Bunnymark // Bounce bunnies off the screen borders bunny.Speed *= (bunny.Position + halfSize) switch { - { X: < 0 or > screenWidth, Y: < 40 or > screenHeight} => new(-1, -1), - { X: < 0 or > screenWidth} => new(-1, 1), - { Y: < 40 or > screenHeight} => new(1,-1), + { X: < 0 or > screenWidth, Y: < 40 or > screenHeight } => new(-1, -1), + { X: < 0 or > screenWidth } => new(-1, 1), + { Y: < 40 or > screenHeight } => new(1, -1), _ => Vector2.One, }; } diff --git a/Raylib-cs.Native/Native.cs b/Raylib-cs.Native/Native.cs index fc8bba6..7efa532 100644 --- a/Raylib-cs.Native/Native.cs +++ b/Raylib-cs.Native/Native.cs @@ -1,4 +1,5 @@ -namespace Raylib_cs.Native +namespace Raylib_cs.Native; + +internal class Native { - internal class Native { } } diff --git a/Raylib-cs.Tests/BlittableHelper.cs b/Raylib-cs.Tests/BlittableHelper.cs deleted file mode 100644 index d8d6cfd..0000000 --- a/Raylib-cs.Tests/BlittableHelper.cs +++ /dev/null @@ -1,69 +0,0 @@ -// For more information see the blog post: https://aakinshin.net/posts/blittable/ -// Original code derived from: https://github.com/AndreyAkinshin/BlittableStructs/blob/master/BlittableStructs/BlittableHelper.cs - -/* -The MIT License - -Copyright (c) 2015 Andrey Akinshin - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -using System; -using System.Runtime.InteropServices; -using System.Runtime.Serialization; - -namespace Raylib_cs.Tests; - -public static class BlittableHelper -{ - public static bool IsBlittable() - { - return IsBlittableCache.VALUE; - } - - public static bool IsBlittable(this Type type) - { - if (type == typeof(decimal)) - { - return false; - } - if (type.IsArray) - { - var elementType = type.GetElementType(); - return elementType != null && elementType.IsValueType && IsBlittable(elementType); - } - try - { - var instance = FormatterServices.GetUninitializedObject(type); - GCHandle.Alloc(instance, GCHandleType.Pinned).Free(); - return true; - } - catch - { - return false; - } - } - - private static class IsBlittableCache - { - public static readonly bool VALUE = IsBlittable(typeof(T)); - } -} diff --git a/Raylib-cs.Tests/RaylibTests.cs b/Raylib-cs.Tests/RaylibTests.cs index b85d8ad..e1962d0 100644 --- a/Raylib-cs.Tests/RaylibTests.cs +++ b/Raylib-cs.Tests/RaylibTests.cs @@ -1,7 +1,18 @@ +using System.Runtime.CompilerServices; using Xunit; namespace Raylib_cs.Tests; +using System.Collections.Generic; + +public static class BlittableHelper +{ + public static bool IsBlittable() + { + return !RuntimeHelpers.IsReferenceOrContainsReferences(); + } +} + public class RaylibTests { private unsafe void CheckType() where T : unmanaged diff --git a/Raylib-cs/interop/Raylib.cs b/Raylib-cs/interop/Raylib.cs index 4068e6d..30e4fc3 100644 --- a/Raylib-cs/interop/Raylib.cs +++ b/Raylib-cs/interop/Raylib.cs @@ -26,25 +26,27 @@ public static unsafe partial class Raylib static Raylib() { - NativeLibrary.SetDllImportResolver(Assembly.GetExecutingAssembly(), (libraryName, assembly, searchPath) => + NativeLibrary.SetDllImportResolver(Assembly.GetExecutingAssembly(), ResolveDllImport); + } + + public static IntPtr ResolveDllImport(string libraryName, Assembly assembly, DllImportSearchPath? searchPath) + { + IntPtr handle = IntPtr.Zero; + string libraryPath = GetLibraryPath(libraryName); + + if (NativeLibrary.TryLoad(libraryName, assembly, searchPath, out handle)) { - IntPtr handle = IntPtr.Zero; - string libraryPath = GetLibraryPath(libraryName); + return handle; + } - if (NativeLibrary.TryLoad(libraryPath, out handle)) - { - return handle; - } + if (NativeLibrary.TryLoad(libraryPath, out handle)) + { + return handle; + } - if (NativeLibrary.TryLoad(libraryName, assembly, searchPath, out handle)) - { - return handle; - } - - throw new DllNotFoundException( - $"Failed to load {libraryName} using {libraryPath}." - ); - }); + throw new DllNotFoundException( + $"Failed to load {libraryName}." + ); } public static string GetLibraryPath(string libraryName)