你可以在Mac Visual Studio / Xamarin中调用/调用缺少的OpenTK方法吗?

时间:2016-12-10 19:15:21

标签: c# macos xamarin.mac

Visual Studio for Mac的预览版使用来自Package Xamarin.Mac.framework的OpenTK 0,0,0,0

这缺少我需要的多次通话,

  • GL.BindVertexArray
  • GL.DeleteVertexArray
  • GL.GenVertexArrays

有没有办法P / Invoke这些,你应该怎么做?或者,哪里有关于如何做的好信息?

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

2 个答案:

答案 0 :(得分:1)

  

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

不,不安全。从Xamarin.Mac内部替换随机组件不会带来愉快的结果。

  

有没有办法P / Invoke这些,你应该怎么做?要么,   哪里有关于如何做的好消息?

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

答案 1 :(得分:0)

所以在克里斯的回答之后我在

下创建了一个班级
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
}

然后从另一个类使用

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

它只是起作用而不是

GL.BindVeryexArray((uint) _vertexBuffer._VAO_ID)