Update tests and dll resolver
This commit is contained in:
parent
709a0c1c3d
commit
eb48e471d8
5 changed files with 45 additions and 94 deletions
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
namespace Raylib_cs.Native
|
||||
namespace Raylib_cs.Native;
|
||||
|
||||
internal class Native
|
||||
{
|
||||
internal class Native { }
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
@ -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<T>()
|
||||
{
|
||||
return !RuntimeHelpers.IsReferenceOrContainsReferences<T>();
|
||||
}
|
||||
}
|
||||
|
||||
public class RaylibTests
|
||||
{
|
||||
private unsafe void CheckType<T>() where T : unmanaged
|
||||
|
|
|
|||
|
|
@ -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(libraryPath, out handle))
|
||||
{
|
||||
return handle;
|
||||
}
|
||||
|
||||
if (NativeLibrary.TryLoad(libraryName, assembly, searchPath, out handle))
|
||||
{
|
||||
return handle;
|
||||
}
|
||||
|
||||
if (NativeLibrary.TryLoad(libraryPath, out handle))
|
||||
{
|
||||
return handle;
|
||||
}
|
||||
|
||||
throw new DllNotFoundException(
|
||||
$"Failed to load {libraryName} using {libraryPath}."
|
||||
$"Failed to load {libraryName}."
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
public static string GetLibraryPath(string libraryName)
|
||||
|
|
|
|||
Loading…
Reference in a new issue