Watch
2
0
Fork
You've already forked raylib-cs
0

Update tests and dll resolver (#336)

This commit is contained in:
Rgebee 2026-05-17 19:24:49 +01:00 committed by GitHub
commit a657bb6367
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 45 additions and 94 deletions

View file

@ -31,10 +31,16 @@ public static class Bunnymark
private record struct Bunny() private record struct Bunny()
{ {
public Vector2 Position { get; set; } = GetMousePosition(); 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,
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(50, 240),
GetRandomValue(80, 240), GetRandomValue(80, 240),
GetRandomValue(100, 240), 255); GetRandomValue(100, 240), 255);
@ -68,7 +74,7 @@ public static class Bunnymark
if (IsMouseButtonDown(MouseButton.Left) && bunniesCount < MaxBunnies) if (IsMouseButtonDown(MouseButton.Left) && bunniesCount < MaxBunnies)
{ {
// Add a range of new bunnies // 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(); bunny = new();
} }
@ -79,7 +85,7 @@ public static class Bunnymark
// Remove the oldest bunnies, shifting them back in the span // Remove the oldest bunnies, shifting them back in the span
if (bunniesCount > BunnyDecrement) if (bunniesCount > BunnyDecrement)
{ {
bunnies[BunnyDecrement .. bunniesCount].CopyTo(bunnies); bunnies[BunnyDecrement..bunniesCount].CopyTo(bunnies);
} }
bunniesCount = Math.Max(0, bunniesCount - BunnyDecrement); bunniesCount = Math.Max(0, bunniesCount - BunnyDecrement);
} }
@ -93,9 +99,9 @@ public static class Bunnymark
// Bounce bunnies off the screen borders // Bounce bunnies off the screen borders
bunny.Speed *= (bunny.Position + halfSize) switch bunny.Speed *= (bunny.Position + halfSize) switch
{ {
{ X: < 0 or > screenWidth, 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), { X: < 0 or > screenWidth } => new(-1, 1),
{ Y: < 40 or > screenHeight} => new(1,-1), { Y: < 40 or > screenHeight } => new(1, -1),
_ => Vector2.One, _ => Vector2.One,
}; };
} }

View file

@ -1,4 +1,5 @@
namespace Raylib_cs.Native namespace Raylib_cs.Native;
internal class Native
{ {
internal class Native { }
} }

View file

@ -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<T>()
{
return IsBlittableCache<T>.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<T>
{
public static readonly bool VALUE = IsBlittable(typeof(T));
}
}

View file

@ -1,7 +1,18 @@
using System.Runtime.CompilerServices;
using Xunit; using Xunit;
namespace Raylib_cs.Tests; namespace Raylib_cs.Tests;
using System.Collections.Generic;
public static class BlittableHelper
{
public static bool IsBlittable<T>()
{
return !RuntimeHelpers.IsReferenceOrContainsReferences<T>();
}
}
public class RaylibTests public class RaylibTests
{ {
private unsafe void CheckType<T>() where T : unmanaged private unsafe void CheckType<T>() where T : unmanaged

View file

@ -26,25 +26,27 @@ public static unsafe partial class Raylib
static 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; IntPtr handle = IntPtr.Zero;
string libraryPath = GetLibraryPath(libraryName); string libraryPath = GetLibraryPath(libraryName);
if (NativeLibrary.TryLoad(libraryPath, out handle))
{
return handle;
}
if (NativeLibrary.TryLoad(libraryName, assembly, searchPath, out handle)) if (NativeLibrary.TryLoad(libraryName, assembly, searchPath, out handle))
{ {
return handle; return handle;
} }
if (NativeLibrary.TryLoad(libraryPath, out handle))
{
return handle;
}
throw new DllNotFoundException( throw new DllNotFoundException(
$"Failed to load {libraryName} using {libraryPath}." $"Failed to load {libraryName}."
); );
});
} }
public static string GetLibraryPath(string libraryName) public static string GetLibraryPath(string libraryName)