void glDoStuff<T>(T[] myArray) where T : unmanaged {
fixed (void* arrPtr = myArray)
glDoStuff((nuint) myArray.Length, arrPtr);
}Quoted by kaijellinghaus#0000
const char** to be specificT*[] helps with nothingROSpan<Span<T>> is just not validint*[] no problemno need for unsafe, no need for weird types, just give something an array and it worksis exactly what we try to enable here
Quoted by perksey#0000
f(int***, void**, uint**, res*, float**) it's just ???Ptr<T> idea of course, i am just trying to suggest stuff from a user's perspective. i love C#'s unsafe, but I don't think it should be the norm for the end user, and I don't think that a custom type is the right way to do things - simply because to an end user, it is a type they may have never seen before, and may be confusing to use, to the point where one may have to read documentation to find out how to use itf(int***, void**, uint**, res*, float**)T[] in place of T* everywhere, I think everyone agrees?f(int**[], void*[], uint*[], res[], float*[]) should be a valid way to pass the argsf(int*[][], void[][], uint[][], res[], float[][]) (now next to void[][] not being valid, so it should stay void*[])const char**T*[]ROSpan<Span<T>>int*[]f(int***, void**, uint**, res*, float**)f(int***, void**, uint**, res*, float**)Ptr<T>unsafeT[]T*f(int**[], void*[], uint*[], res[], float*[])f(int*[][], void[][], uint[][], res[], float[][])void*[]