您可以 P/Invoke 在 Mac Visual Studio / Xamarin 中缺少 OpenTK 方法吗?

Can you P/Invoke missing OpenTK methods in Mac Visual Studio / Xamarin?

Mac 的 Visual studio 预览版使用包 Xamarin.Mac.framework

中的 OpenTK 0,0,0,0

这缺少我需要的许多电话,

有什么方法可以 P/Invoke 这些,你应该怎么做?或者,哪里有关于如何做的好资料?

我可以从 /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/mono/Xamarin.Mac/OpenTK.dll 目录中删除 .dll 并且将其替换为具有这些调用的其他地方? (我不能使用 OpenTKv2 开源,因为 Xamarin 有 Vector2 类型,而其他类型存储在另一个冲突的命名空间中)

Can I remove the .dll from the /Library/Frameworks/Xamarin.Mac.framework/Versions/Current/lib/mono/Xamarin.Mac/OpenTK.dll directory and replace it with one elsewhere that has these calls? (I can't use OpenTKv2 open source as Xamarin has Vector2 types, and others stored in another namespace that clash)

不,不安全。从内部替换随机程序集 Xamarin.Mac 不会导致满意的结果。

Is there some way to P/Invoke these and how should you do it? Or, where is there any good information on how to do it?

是的,对于 C 函数,像这样标准的 DllImport 应该可以正常工作。您可以找到一些示例 here.

所以在 Chris 的回答之后我在下面创建了一个 class

public static class PInvoke
{ 
public const string file = "/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL";
#if __MAC__

[DllImport(file, EntryPoint = "glBindVertexArray", ExactSpelling = true)]
    internal extern static void BindVertexArray(UInt32 array);
#endif
}

然后从另一个class使用

PInvoke.glBindVertexArray((uint) _vertexBuffer._VAO_ID);

它只是代替了

GL.BindVeryexArray((uint) _vertexBuffer._VAO_ID)