diff --git a/Source/Engine/Engine/NativeInterop.cs b/Source/Engine/Engine/NativeInterop.cs
index 8a8d543f1..dfef614b3 100644
--- a/Source/Engine/Engine/NativeInterop.cs
+++ b/Source/Engine/Engine/NativeInterop.cs
@@ -24,7 +24,8 @@ namespace FlaxEngine.Interop
///
/// Provides a Mono-like API for native code to access managed runtime.
///
- internal static unsafe partial class NativeInterop
+ [HideInEditor]
+ public static unsafe partial class NativeInterop
{
internal static Dictionary AssemblyLocations = new();
@@ -147,7 +148,13 @@ namespace FlaxEngine.Interop
NativeMemory.AlignedFree(ptr);
}
- internal static T[] GCHandleArrayToManagedArray(ManagedArray ptrArray) where T : class
+ ///
+ /// Converts array of GC Handles from native runtime to managed array.
+ ///
+ /// Array element type.
+ /// Input array.
+ /// Output array.
+ public static T[] GCHandleArrayToManagedArray(ManagedArray ptrArray) where T : class
{
Span span = ptrArray.ToSpan();
T[] managedArray = new T[ptrArray.Length];
@@ -156,7 +163,12 @@ namespace FlaxEngine.Interop
return managedArray;
}
- internal static IntPtr[] ManagedArrayToGCHandleArray(Array array)
+ ///
+ /// Converts managed array wrapper into array of GC Handles for native runtime.
+ ///
+ /// Input array.
+ /// Output array.
+ public static IntPtr[] ManagedArrayToGCHandleArray(Array array)
{
if (array.Length == 0)
return Array.Empty();
@@ -170,13 +182,26 @@ namespace FlaxEngine.Interop
return pointerArray;
}
- internal static ManagedArray ManagedArrayToGCHandleWrappedArray(Array array)
+ ///
+ /// Converts managed array wrapper into array of GC Handles for native runtime.
+ ///
+ /// Input array.
+ /// Output array.
+ public static ManagedArray ManagedArrayToGCHandleWrappedArray(Array array)
{
IntPtr[] pointerArray = ManagedArrayToGCHandleArray(array);
return ManagedArray.WrapNewArray(pointerArray, array.GetType());
}
- internal static TDst[] ConvertArray(Span src, Func convertFunc)
+ ///
+ /// Converts array with a custom converter function for each element.
+ ///
+ /// Input data type.
+ /// Output data type.
+ /// The input array.
+ /// Converter callback.
+ /// The output array.
+ public static TDst[] ConvertArray(Span src, Func convertFunc)
{
TDst[] dst = new TDst[src.Length];
for (int i = 0; i < src.Length; i++)
@@ -184,7 +209,15 @@ namespace FlaxEngine.Interop
return dst;
}
- internal static TDst[] ConvertArray(TSrc[] src, Func convertFunc)
+ ///
+ /// Converts array with a custom converter function for each element.
+ ///
+ /// Input data type.
+ /// Output data type.
+ /// The input array.
+ /// Converter callback.
+ /// The output array.
+ public static TDst[] ConvertArray(TSrc[] src, Func convertFunc)
{
TDst[] dst = new TDst[src.Length];
for (int i = 0; i < src.Length; i++)
@@ -1024,11 +1057,12 @@ namespace FlaxEngine.Interop
private static uint pinnedBoxedValuesPointer = 0;
private static (IntPtr ptr, int size)[] pinnedAllocations = new (IntPtr ptr, int size)[256];
private static uint pinnedAllocationsPointer = 0;
-
+
private delegate TInternal ToNativeDelegate(T value);
+
private delegate IntPtr UnboxerDelegate(object value, object converter);
- private static ConcurrentDictionary unboxers = new (1, 3);
+ private static ConcurrentDictionary unboxers = new(1, 3);
private static MethodInfo unboxerMethod = typeof(ValueTypeUnboxer).GetMethod(nameof(ValueTypeUnboxer.UnboxPointer), BindingFlags.Static | BindingFlags.NonPublic);
private static MethodInfo unboxerToNativeMethod = typeof(ValueTypeUnboxer).GetMethod(nameof(ValueTypeUnboxer.UnboxPointerWithConverter), BindingFlags.Static | BindingFlags.NonPublic);
@@ -1089,7 +1123,8 @@ namespace FlaxEngine.Interop
return new IntPtr(Unsafe.AsPointer(ref Unsafe.Unbox(value)));
}
- private static IntPtr UnboxPointerWithConverter(object value, object converter) where T : struct where TInternal : struct
+ private static IntPtr UnboxPointerWithConverter(object value, object converter) where T : struct
+ where TInternal : struct
{
ToNativeDelegate toNative = Unsafe.As>(converter);
return PinValue(toNative(Unsafe.Unbox(value)));