Xamarin.ios 通过MonoTouch/OpenTK调用特定于苹果的OpenGL命令

Xamarin.ios 通过MonoTouch/OpenTK调用特定于苹果的OpenGL命令,xamarin.ios,opengl-es-2.0,opentk,Xamarin.ios,Opengl Es 2.0,Opentk,如果我理解正确的话,苹果的OpenGLES2.0实现使用了OpenGLES3.0中的一些方法 glBindVertexArrayAPPLE 或 而不是 glBindVertexArray MonoTouch提供的OpenTK编译似乎不包括这两种方法中的任何一种,尽管存在它们的OpenTK绑定,请参见的第229行示例 我有没有办法在MonoTouch中使用这些功能?也许可以通过P/Invoke调用它们?就是这样: [DllImport(Constants.OpenGLESLibrary, En

如果我理解正确的话,苹果的OpenGLES2.0实现使用了OpenGLES3.0中的一些方法

glBindVertexArrayAPPLE

而不是

glBindVertexArray
MonoTouch提供的OpenTK编译似乎不包括这两种方法中的任何一种,尽管存在它们的OpenTK绑定,请参见的第229行示例

我有没有办法在MonoTouch中使用这些功能?也许可以通过P/Invoke调用它们?

就是这样:

[DllImport(Constants.OpenGLESLibrary, EntryPoint="glGenVertexArraysOES")]
public extern static void GenVertexArrays(int n, out int id);

[DllImport(Constants.OpenGLESLibrary, EntryPoint="glBindVertexArrayOES")]
public extern static void BindVertexArray(int id);

还有更多类似于这两个的函数@Xamarin,也许它们可以包含在下一个MonoTouch版本中?

如果您引用的是OpenTK-1.0而不是OpenTK,您会在那里找到此API。

为了澄清问题,MonoTouch自2012年初开始提供的
OpenTK-1.0.dll
(无需安装任何其他内容),通过调用以下命令来支持
glBindVertexArrayOES

GL.Oes.BindVertexArray([u]int);
用户代码中不需要额外的p/invoke。至于
glBindVertexArrayAPPLE
,从逻辑上讲,它可以作为:

GL.Apple.BindVertexArray([u]int);
它不是API的一部分,因为在iOS版本的
glext.h
中没有定义
GL\u APPLE\u vertex\u array\u object
(就像同一文件的OSX版本一样)。请注意,
glext.h
的iOS和OSX版本中都定义了
GL\uOES\uVertex\uArray\u对象
,这就是OESAPI可用的原因


快速grep(查找所有事件)没有显示任何.dylib中可用的符号(因此在运行时添加它或p/调用它将失败)。

我正在使用OpenTK-1.0.dll,但它不在那里,我必须手动p/调用它。我使用的是最新的MonoTouch/MonoDevelop版本,就在几天前,我收到了一个更新。我看到了
glBindVertexArray
abnd
glBindVertexArrayAPPLE
,但没有看到
glBindVertexArrayOES
。我将添加它们(如果您发现任何其他丢失的碎片,请通过bugzilla通知我们)。谢谢罗尔夫是对的,虽然有点不精确。p/invoke本身位于
OpenTK-1.0.dll
中,但它是
内部的
而不是
公共的
。不过,您应该可以通过使用
GL.Oes.BindVertexArray(int)
访问它。谢谢您,我会的,但奇怪的是,我没有看到
glBindVertexArrayAPPLE
。我在Mono 2.10.9和MonoTouch 6.0.8中使用MD 3.0.6,但我的OpenTK-1.0.dll版本为0.0.0.0。请看一下这个屏幕截图:如何安装当前版本的OpenTK?它不是用MonoTouch自动安装的吗?干杯,现在我按照您的建议使用
GL.Oes.BindVertexArray(int)
。尽管没有
GL.Apple.BindVertexArray(int)
,但仍然找不到
glBindVertexArrayAPPLE
。我在iOS头文件中找不到
glBindVertexArrayAPPLE
,只有在OSX中。你有没有听说过iOS开发者可以使用这个?或者有其他理由用这个来代替其他的吗?谢谢,这是有道理的。如果
OpenTK-1.0.dll
与MonoTouch一起提供,也许您应该为它提供另一个版本号,而不是0.0.0.0(在我的安装中显示为0.0.0.0)。干杯
GL.Apple.BindVertexArray([u]int);